diff --git a/uniborg/_core.py b/uniborg/_core.py index c205257..15f7e63 100644 --- a/uniborg/_core.py +++ b/uniborg/_core.py @@ -8,7 +8,7 @@ import traceback DELETE_TIMEOUT = 2 -@borg.on(borg.admin_cmd(r"(?:re)?load (?P\w+)")) +@borg.on(borg.admin_cmd(r"(?:re)?load", r"(?P\w+)")) async def load_reload(event): if not borg.me.bot: await event.delete() @@ -31,7 +31,7 @@ async def load_reload(event): await event.respond(f"Failed to (re)load plugin {shortname}: {e}") -@borg.on(borg.admin_cmd(r"(?:unload|disable|remove) (?P\w+)")) +@borg.on(borg.admin_cmd(r"(?:unload|disable|remove)", r"(?P\w+)")) async def remove(event): if not borg.me.bot: await event.delete() diff --git a/uniborg/uniborg.py b/uniborg/uniborg.py index 883622d..c8c9dee 100644 --- a/uniborg/uniborg.py +++ b/uniborg/uniborg.py @@ -110,25 +110,31 @@ class Uniborg(TelegramClient): return fut - def cmd(self, pattern): - if not self.me.bot: - return telethon.events.NewMessage( - outgoing=True, - pattern=fr'^\.{pattern}$' - ) - else: - return telethon.events.NewMessage( - pattern=fr'^\/{pattern}$' - ) + def cmd(self, command, pattern=None, admin_only=False): + if self.me.bot: + command = fr'{command}(?:@{self.me.username})?' - def admin_cmd(self, pattern): - if not self.me.bot: - return telethon.events.NewMessage( - outgoing=True, - pattern=fr'^\.{pattern}$' - ) + if pattern is not None: + pattern = fr'{command}\s+{pattern}' else: - return telethon.events.NewMessage( - from_users=self.admins, - pattern=fr'^\/{pattern}$' - ) + pattern = command + + if not self.me.bot: + pattern=fr'^\.{pattern}' + else: + pattern=fr'^\/{pattern}' + pattern=fr'(?i){pattern}$' + + if self.me.bot and admin_only: + allowed_users = self.admins + else: + allowed_users = None + + return telethon.events.NewMessage( + outgoing=not self.me.bot, + from_users=allowed_users, + pattern=pattern + ) + + def admin_cmd(self, command, pattern=None): + return self.cmd(command, pattern, admin_only=True)