diff --git a/maubot/handlers/command.py b/maubot/handlers/command.py index 27e6547..4c1a57c 100644 --- a/maubot/handlers/command.py +++ b/maubot/handlers/command.py @@ -39,6 +39,15 @@ from mautrix.types import EventType, MessageType from ..matrix import MaubotMessageEvent from . import event + +class CommandError(Exception): + pass + + +class CommandFailure(CommandError): + pass + + PrefixType = Optional[Union[str, Callable[[], str], Callable[[Any], str]]] AliasesType = Union[ List[str], Tuple[str, ...], Set[str], Callable[[str], bool], Callable[[Any, str], bool] @@ -150,9 +159,18 @@ class CommandHandler: await evt.reply(self.__mb_full_help__) return - if self.__bound_instance__: - return await self.__mb_func__(self.__bound_instance__, evt, **call_args) - return await self.__mb_func__(evt, **call_args) + try: + if self.__bound_instance__: + return await self.__mb_func__(self.__bound_instance__, evt, **call_args) + return await self.__mb_func__(evt, **call_args) + except CommandFailure as e: + await evt.reply(f"Error: {e}") + except CommandError as e: + await evt.reply(f"Error: {e}") + raise e + except Exception as e: + await evt.reply("An error happened while running the command") + raise e async def __call_subcommand__( self, evt: MaubotMessageEvent, call_args: Dict[str, Any], remaining_val: str