Return best match if no full-match occurred in `.help`

pull/1/head
Hikari 2022-04-23 12:30:37 +00:00
parent d74aaa99fd
commit 1b846a6e1b
No known key found for this signature in database
GPG Key ID: 5FA52ACBB2AD964D
2 changed files with 47 additions and 20 deletions

View File

@ -284,14 +284,10 @@
"hikka.modules.web2file.fetch_error": "🦊 <b>Ошибка загрузки</b>", "hikka.modules.web2file.fetch_error": "🦊 <b>Ошибка загрузки</b>",
"hikka.modules.web2file.loading": "🦊 <b>Загрузка...</b>", "hikka.modules.web2file.loading": "🦊 <b>Загрузка...</b>",
"hikka.modules.web2file._cls_doc": "Скачивает содержимое ссылки и отправляет в виде файла", "hikka.modules.web2file._cls_doc": "Скачивает содержимое ссылки и отправляет в виде файла",
"hikka.modules.cloud.no_file": "<b>А что отправлять то?... 🗿</b>", "hikka.modules.cloud.cannot_check_file": "🚫 <b>Не могу прочитать файл...</b>",
"hikka.modules.cloud.cannot_check_file": "<b>Не могу прочитать файл...</b>", "hikka.modules.cloud.cannot_join": "🚫 <b>Может я забанен в чате Хикари?</b>",
"hikka.modules.cloud.cannot_join": "<b>Может я забанен в чате Хикари?</b>", "hikka.modules.cloud.args": "🚫 <b>Нет аргументов</b>",
"hikka.modules.cloud.sent": "<b>Модуль отправлен для проверки</b>", "hikka.modules.cloud.mod404": "🚫 <b>Модуль {} не найден</b>",
"hikka.modules.cloud.tag": "<b>🦊 Запрос на добавление в базу данных</b>",
"hikka.modules.cloud.upload_error": "🦊 <b>Ошибка загрузки</b>",
"hikka.modules.cloud.args": "🦊 <b>Нет аргументов</b>",
"hikka.modules.cloud.mod404": "🦊 <b>Модуль {} не найден</b>",
"hikka.modules.cloud.hikka_only": "\n🌘 <b>Эсклюзивно для <u>Hikka</u></b>\n", "hikka.modules.cloud.hikka_only": "\n🌘 <b>Эсклюзивно для <u>Hikka</u></b>\n",
"hikka.modules.cloud._cmd_doc_addmod": "<файл> - Отправить модуль в @hikka_talks для добавления в базу", "hikka.modules.cloud._cmd_doc_addmod": "<файл> - Отправить модуль в @hikka_talks для добавления в базу",
"hikka.modules.cloud._cmd_doc_cloud": "<command \\ mod_name> - Поиск модуля в @hikarimods_database", "hikka.modules.cloud._cmd_doc_cloud": "<command \\ mod_name> - Поиск модуля в @hikarimods_database",

View File

@ -12,6 +12,7 @@ import inspect
from .. import loader, utils, main, security from .. import loader, utils, main, security
from telethon.tl.functions.channels import JoinChannelRequest from telethon.tl.functions.channels import JoinChannelRequest
import logging import logging
import difflib
from telethon.tl.types import Message from telethon.tl.types import Message
@ -50,7 +51,7 @@ class HelpMod(loader.Module):
lambda: "Hikka-only module bullet", lambda: "Hikka-only module bullet",
"plain_emoji", "plain_emoji",
"▫️", "▫️",
lambda: "Plain module bullet" lambda: "Plain module bullet",
) )
async def helphidecmd(self, message: Message): async def helphidecmd(self, message: Message):
@ -109,21 +110,43 @@ class HelpMod(loader.Module):
if mod.strings("name", message).lower() == args.lower(): if mod.strings("name", message).lower() == args.lower():
module = mod module = mod
if module is None: if not module:
args = args.lower() args = args.lower()
args = args[1:] if args.startswith(prefix) else args args = args[1:] if args.startswith(prefix) else args
if args in self.allmodules.commands: if args in self.allmodules.commands:
module = self.allmodules.commands[args].__self__ module = self.allmodules.commands[args].__self__
else:
await utils.answer(message, self.strings("bad_module", message).format(args)) if not module:
return module_name = next(
reversed(
sorted(
[
module.strings["name"]
for module in self.allmodules.modules
],
key=lambda x: difflib.SequenceMatcher(
None,
args.lower(),
x,
).ratio(),
)
)
)
module = next(
module
for module in self.allmodules.modules
if module.strings["name"] == module_name
)
try: try:
name = module.strings("name") name = module.strings("name")
except KeyError: except KeyError:
name = getattr(module, "name", "ERROR") name = getattr(module, "name", "ERROR")
reply = self.strings("single_mod_header", message).format(utils.escape_html(name)) reply = self.strings("single_mod_header", message).format(
utils.escape_html(name)
)
if module.__doc__: if module.__doc__:
reply += ( reply += (
"<i>\n " + utils.escape_html(inspect.getdoc(module)) + "\n</i>" "<i>\n " + utils.escape_html(inspect.getdoc(module)) + "\n</i>"
@ -181,7 +204,9 @@ class HelpMod(loader.Module):
hidden = list(filter(lambda module: module in mods, self.get("hide", []))) hidden = list(filter(lambda module: module in mods, self.get("hide", [])))
self.set("hide", hidden) self.set("hide", hidden)
reply = self.strings("all_header", message).format(count, len(hidden) if not force else 0) reply = self.strings("all_header", message).format(
count, len(hidden) if not force else 0
)
shown_warn = False shown_warn = False
plain_ = [] plain_ = []
@ -219,11 +244,11 @@ class HelpMod(loader.Module):
core = mod.__origin__ == "<core>" core = mod.__origin__ == "<core>"
if core: if core:
emoji = self.config['core_emoji'] emoji = self.config["core_emoji"]
elif inline: elif inline:
emoji = self.config['hikka_emoji'] emoji = self.config["hikka_emoji"]
else: else:
emoji = self.config['plain_emoji'] emoji = self.config["plain_emoji"]
tmp += self.strings("mod_tmpl", message).format(emoji, name) tmp += self.strings("mod_tmpl", message).format(emoji, name)
@ -245,7 +270,10 @@ class HelpMod(loader.Module):
icommands = [ icommands = [
name name
for name, func in mod.inline_handlers.items() for name, func in mod.inline_handlers.items()
if await self.inline.check_inline_security(func=func, user=message.sender_id) or force if await self.inline.check_inline_security(
func=func, user=message.sender_id
)
or force
] ]
for cmd in icommands: for cmd in icommands:
@ -271,7 +299,10 @@ class HelpMod(loader.Module):
core_.sort(key=lambda x: x.split()[1]) core_.sort(key=lambda x: x.split()[1])
inline_.sort(key=lambda x: x.split()[1]) inline_.sort(key=lambda x: x.split()[1])
await utils.answer(message, f"{reply}\n{''.join(core_)}{''.join(plain_)}{''.join(inline_)}") await utils.answer(
message,
f"{reply}\n{''.join(core_)}{''.join(plain_)}{''.join(inline_)}",
)
async def supportcmd(self, message): async def supportcmd(self, message):
"""Joins the support Hikka chat""" """Joins the support Hikka chat"""