diff --git a/stdplugins/ninja.py b/stdplugins/ninja.py index 266fab7..ec538a1 100644 --- a/stdplugins/ninja.py +++ b/stdplugins/ninja.py @@ -39,8 +39,8 @@ async def await_read(chat, message): await fut -@borg.on(util.admin_cmd(r"^\.(del)(?:ete)?$")) -@borg.on(util.admin_cmd(r"^\.(edit)(?:\s+(.*))?$")) +@borg.on(events.NewMessage(outgoing=True, pattern=r"^\.(del)(?:ete)?$") +@borg.on(events.NewMessage(outgoing=True, pattern=r"^\.(edit)(?:\s+(.*))?$") async def delete(event): await event.delete() command = event.pattern_match.group(1) diff --git a/uniborg/_core.py b/uniborg/_core.py index 43d8bd1..77f68b0 100644 --- a/uniborg/_core.py +++ b/uniborg/_core.py @@ -5,14 +5,13 @@ import asyncio import traceback -from uniborg import util - DELETE_TIMEOUT = 2 -@borg.on(util.admin_cmd(r"^\.(?:re)?load (?P\w+)$")) +@borg.on(borg.admin_cmd(r"(?:re)?load (?P\w+)")) async def load_reload(event): - await event.delete() + if not borg.me.bot: + await event.delete() shortname = event.pattern_match["shortname"] try: @@ -22,8 +21,9 @@ async def load_reload(event): msg = await event.respond( f"Successfully (re)loaded plugin {shortname}") - await asyncio.sleep(DELETE_TIMEOUT) - await borg.delete_messages(msg.to_id, msg) + if not borg.me.bot: + await asyncio.sleep(DELETE_TIMEOUT) + await borg.delete_messages(msg.to_id, msg) except Exception as e: tb = traceback.format_exc() @@ -31,9 +31,10 @@ async def load_reload(event): await event.respond(f"Failed to (re)load plugin {shortname}: {e}") -@borg.on(util.admin_cmd(r"^\.(?:unload|disable|remove) (?P\w+)$")) +@borg.on(borg.admin_cmd(r"(?:unload|disable|remove) (?P\w+)")) async def remove(event): - await event.delete() + if not borg.me.bot: + await event.delete() shortname = event.pattern_match["shortname"] if shortname == "_core": @@ -44,5 +45,6 @@ async def remove(event): else: msg = await event.respond(f"Plugin {shortname} is not loaded") - await asyncio.sleep(DELETE_TIMEOUT) - await borg.delete_messages(msg.to_id, msg) + if not borg.me.bot: + await asyncio.sleep(DELETE_TIMEOUT) + await borg.delete_messages(msg.to_id, msg) diff --git a/uniborg/uniborg.py b/uniborg/uniborg.py index 3dd3447..af1fdcf 100644 --- a/uniborg/uniborg.py +++ b/uniborg/uniborg.py @@ -17,7 +17,7 @@ from . import hacks class Uniborg(TelegramClient): def __init__( - self, session, *, plugin_path="plugins", storage=None, + self, session, *, plugin_path="plugins", storage=None, admins=[], bot_token=None, **kwargs): # TODO: handle non-string session # @@ -28,6 +28,7 @@ class Uniborg(TelegramClient): self._logger = logging.getLogger(session) self._plugins = {} self._plugin_path = plugin_path + self.admins = admins kwargs = { "api_id": 6, "api_hash": "eb06d4abfb49dc3eeb1aeb98ae0f581e", @@ -108,3 +109,15 @@ class Uniborg(TelegramClient): lambda _: self.remove_event_handler(cb, event_matcher)) return fut + + def admin_cmd(self, pattern): + if not self.me.bot: + return telethon.events.NewMessage( + outgoing=True, + pattern=fr'^\.{pattern}$' + ) + else: + return telethon.events.NewMessage( + from_users=self.admins, + pattern=fr'^\/{pattern}$' + ) diff --git a/uniborg/util.py b/uniborg/util.py index 1b93b26..84f5d44 100644 --- a/uniborg/util.py +++ b/uniborg/util.py @@ -10,10 +10,6 @@ from telethon import events from telethon.tl.functions.messages import GetPeerDialogsRequest -def admin_cmd(pattern): - return events.NewMessage(outgoing=True, pattern=re.compile(pattern)) - - async def is_read(borg, entity, message, is_out=None): """ Returns True if the given message (or id) has been read