Improve command support

- Support commands with the bot's username
- Make matching case-insensitive by default
- Merge cmd and admin_cmd for better maintainability
master
Dan Elkouby 2020-08-02 15:32:44 +00:00
parent b97d1649a4
commit cc98721120
2 changed files with 28 additions and 22 deletions

View File

@ -8,7 +8,7 @@ import traceback
DELETE_TIMEOUT = 2
@borg.on(borg.admin_cmd(r"(?:re)?load (?P<shortname>\w+)"))
@borg.on(borg.admin_cmd(r"(?:re)?load", r"(?P<shortname>\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<shortname>\w+)"))
@borg.on(borg.admin_cmd(r"(?:unload|disable|remove)", r"(?P<shortname>\w+)"))
async def remove(event):
if not borg.me.bot:
await event.delete()

View File

@ -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)