For more complicated bots, it's often useful to have multiple distinct command handlers for different tasks. While it's technically possible to use separate commands, it might be nicer to have everything under a single command. To do this, maubot allows you to define subcommands.
Subcommands are defined by using the
.subcommand() decorator of a top-level
command that was defined earlier:
from maubot import Plugin, MessageEvent from maubot.handlers import command class SimpleBot(Plugin): @command.new(name="hello", require_subcommand=True) async def base_command(self, evt: MessageEvent) -> None: # When you require a subcommand, the base command handler # doesn't have to do anything. pass @base_command.subcommand(help="Do subcommand things") async def subcommand(self, evt: MessageEvent) -> None: await evt.react("subcommand!")
In this case, the subcommand handler would be triggered by
If you send just
!hello, it will respond with a help page. The
from the subcommand decorator is how the help page is populated.
subcommand decorator has the same parameters as top-level commands, except
it can't define the
msgtypes that the handler catches. You
can also nest subcommands as deep as you like (i.e. in the above example,
@subcommand.subcommand() is a valid decorator for a third method).