Passive command handlers
Passive commands are command handlers that don't follow a strict syntax
like !command <arguments>
, but instead just match some regular expressions
anywhere in a message.
Passive commands are created using the @command.passive(regex)
decorator.
The regex
is a required argument. It can either be a string (in which case
maubot will compile it) or a pre-re.compile
'd Pattern object.
from typing import Tuple
from maubot import Plugin, MessageEvent
from maubot.handlers import command
class PassiveBot(Plugin):
@command.passive("cat")
async def command(self, evt: MessageEvent, match: Tuple[str]) -> None:
await evt.react("🐈️")
Handler parameters
Like command handlers, the first parameter is the MessageEvent
object. In
addition to that, passive commands always have a second parameter. By default,
the parameter is a tuple where the first element is the full match, and the
following elements are individual capture groups. If the multiple
flag is set,
then the parameter is an array containing one or more such tuples.
@command.passive()
parameters
field
This defines which field to run the regex against in the event content. The
parameter is a function that takes a single argument, the event object. The
default value will return evt.content.body
(i.e. the plaintext body of the
message).
multiple
...
event_type
and msgtypes
These work the same way as in @command.new()
case_insensitive
, multiline
and dot_all
These parameters enable regex flags. They only apply if you pass a string
instead of a compiled pattern as the regex. They set the re.IGNORECASE
, re.MULTILINE
and re.DOTALL
flags respectively.