Skip to content

Conversation

@Gnuxie
Copy link
Contributor

@Gnuxie Gnuxie commented Dec 24, 2025

Rendered

Signed-off-by: Gnuxie [email protected]


This MSC incorporates work from MSC4332

@Gnuxie Gnuxie changed the title MSC0000: Simplified in-room bot commands MSC4391: Simplified in-room bot commands Dec 24, 2025
@tulir tulir added proposal A matrix spec change proposal client-server Client-Server API kind:feature MSC for not-core and not-maintenance stuff needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Dec 24, 2025
Copy link
Member

@tulir tulir Dec 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation requirements:

  • Client
  • Bot

Copy link
Member

@tulir tulir Dec 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gomuks/gomuks#675 is mostly complete implementation of client and technically also bot, converted from MSC4332. It doesn't have full support for room/event IDs or unions yet, but mostly it should be there

It assumes most of my suggestions in other comments are applied. Specifically:

  • command string instead of designator array
  • "optional": true instead of "required": false
  • primitive schemas nested in an object with "schema_type": "primitive"
  • arrays only at top level and unions only at top level or in arrays)
  • optionally: list of aliases, default_value for default values

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(all of these suggestions were up-streamed into the MSC)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Proper bot implementation: maunium/meowlnir#50

Both meowlnir and parts of gomuks use logic from mautrix/go#446 (gomuks web has its own typescript implementation, gomuks terminal uses mautrix-go)

"m.text": [{ "body": "Whether to apply this to the policy" }]
},
// This argument is not required
"required": false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an alternative/extension to optional parameters, a default value might be useful. The /raw command in gomuks has {} as the default value for event JSON for example

Also, "optional": true might be nicer than "required": false to allow treating undefined as false

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't include defaults at this stage because they can also be provided by partial commands and interactive prompts ie the way suggestions work in draupnir. I guess it might be ok if it's treated like a literal default.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a little bit hesitant to do so right now and am thinking of making a JSON RPC style response follow up MSC that can explore the prompts and partial commands before settling on how to do defaults.

@Gnuxie Gnuxie marked this pull request as ready for review January 8, 2026 17:13
@tulir tulir added implementation-needs-checking The MSC has an implementation, but the SCT has not yet checked it. and removed needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Jan 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

client-server Client-Server API implementation-needs-checking The MSC has an implementation, but the SCT has not yet checked it. kind:feature MSC for not-core and not-maintenance stuff proposal A matrix spec change proposal

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants