import logging import inspect from telethon.tl.functions.channels import JoinChannelRequest from .. import loader, utils, main, security logger = logging.getLogger(__name__) @loader.tds class HelpMod(loader.Module): """Описание этого модуля.""" strings = {'name': 'CustomHelp', 'bad_module': 'Указано неверное название модуля.', 'single_mod_header': 'Справка к {}:\n', 'single_cmd': '\n➜ {}\n ╰', 'undoc_cmd': 'Для этой команды нет описания.\n', 'all_header': 'Список из {} доступных модулей:\n', 'mod_tmpl': '\n➜ {}', 'first_cmd_tmpl': ': {}', 'cmd_tmpl': ', {}', 'joined': 'Уже вступил в канал авторских модулей', 'join': 'Вступить в канал авторских модулей'} @loader.unrestricted async def helpcmd(self, message): """.help <название модуля>.""" args = utils.get_args_raw(message) if args: module = None for mod in self.allmodules.modules: if mod.strings('name', message).lower() == args.lower(): module = mod if module is None: await utils.answer(message, self.strings('bad_module', message)) return try: name = module.strings('name', message) except KeyError: name = getattr(module, 'name', 'ERROR') reply = self.strings('single_mod_header', message).format(utils.escape_html(name), utils.escape_html((self.db.get(main.__name__, 'command_prefix', False) or '.')[0])) if module.__doc__: reply += '\n' + '\n'.join('' + t for t in utils.escape_html(inspect.getdoc(module)).split('\n')) else: logger.warning('У модуля %s отсутствует описание!', module) commands = {name: func for name, func in module.commands.items() if await self.allmodules.check_security(message, func)} for name, fun in commands.items(): reply += self.strings('single_cmd', message).format(name) if fun.__doc__: reply += utils.escape_html('\n'.join(' ' + t for t in inspect.getdoc(fun).split('\n'))) else: reply += self.strings('undoc_cmd', message) else: count = 0 for i in self.allmodules.modules: if len(i.commands) != 0: count += 1 reply = self.strings('all_header', message).format(count) for mod in self.allmodules.modules: try: name = mod.strings('name', message) except KeyError: name = getattr(mod, 'name', 'ERROR') reply += self.strings('mod_tmpl', message).format(name) first = True commands = [name for name, func in mod.commands.items() if await self.allmodules.check_security(message, func)] for cmd in commands: if first: reply += self.strings('first_cmd_tmpl', message).format(cmd) first = False else: reply += self.strings('cmd_tmpl', message).format(cmd) reply += '' await utils.answer(message, reply) @loader.unrestricted async def supportcmd(self, message): """Вступить в канал авторских модулей.""" if not self.is_bot and await self.allmodules.check_security(message, security.OWNER | security.SUDO): await self.client(JoinChannelRequest('https://t.me/ftgmodulesbyfl1yd')) await utils.answer(message, self.strings('joined', message)) else: await utils.answer(message, self.strings('join', message)) async def client_ready(self, client, db): self.client = client self.is_bot = await client.is_bot() self.db = db