Rework admin_cmd to work for actual bots

master
Dan Elkouby 2020-08-02 14:35:18 +00:00
parent c4de997eb7
commit 475c3aebfd
4 changed files with 28 additions and 17 deletions

View File

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

View File

@ -5,14 +5,13 @@
import asyncio
import traceback
from uniborg import util
DELETE_TIMEOUT = 2
@borg.on(util.admin_cmd(r"^\.(?:re)?load (?P<shortname>\w+)$"))
@borg.on(borg.admin_cmd(r"(?:re)?load (?P<shortname>\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<shortname>\w+)$"))
@borg.on(borg.admin_cmd(r"(?:unload|disable|remove) (?P<shortname>\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)

View File

@ -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}$'
)

View File

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