This repository has been archived on 2020-08-02. You can view files and clone it, but cannot push or open issues/pull-requests.
uniborg/uniborg/_core.py

64 lines
2.0 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import asyncio
import traceback
DELETE_TIMEOUT = 2
@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()
shortname = event.pattern_match["shortname"]
try:
if shortname in borg._plugins:
await borg.remove_plugin(shortname)
borg.load_plugin(shortname)
msg = await event.respond(
f"Successfully (re)loaded plugin {shortname}")
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()
logger.warn(f"Failed to (re)load plugin {shortname}: {tb}")
await event.respond(f"Failed to (re)load plugin {shortname}: {e}")
@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()
shortname = event.pattern_match["shortname"]
if shortname == "_core":
msg = await event.respond(f"Not removing {shortname}")
elif shortname in borg._plugins:
await borg.remove_plugin(shortname)
msg = await event.respond(f"Removed plugin {shortname}")
else:
msg = await event.respond(f"Plugin {shortname} is not loaded")
if not borg.me.bot:
await asyncio.sleep(DELETE_TIMEOUT)
await borg.delete_messages(msg.to_id, msg)
@borg.on(borg.admin_cmd(r"plugins"))
async def list_plugins(event):
result = f'{len(borg._plugins)} plugins loaded:'
for name, mod in sorted(borg._plugins.items(), key=lambda t: t[0]):
desc = (mod.__doc__ or '__no description__').replace('\n', ' ').strip()
result += f'\n**{name}**: {desc}'
if not borg.me.bot:
await event.edit(result)
else:
await event.respond(result)