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.loading": "🦊 <b>Загрузка...</b>",
"hikka.modules.web2file._cls_doc": "Скачивает содержимое ссылки и отправляет в виде файла",
"hikka.modules.cloud.no_file": "<b>А что отправлять то?... 🗿</b>",
"hikka.modules.cloud.cannot_check_file": "<b>Не могу прочитать файл...</b>",
"hikka.modules.cloud.cannot_join": "<b>Может я забанен в чате Хикари?</b>",
"hikka.modules.cloud.sent": "<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.cannot_check_file": "🚫 <b>Не могу прочитать файл...</b>",
"hikka.modules.cloud.cannot_join": "🚫 <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._cmd_doc_addmod": "<файл> - Отправить модуль в @hikka_talks для добавления в базу",
"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 telethon.tl.functions.channels import JoinChannelRequest
import logging
import difflib
from telethon.tl.types import Message
@ -50,7 +51,7 @@ class HelpMod(loader.Module):
lambda: "Hikka-only module bullet",
"plain_emoji",
"▫️",
lambda: "Plain module bullet"
lambda: "Plain module bullet",
)
async def helphidecmd(self, message: Message):
@ -109,21 +110,43 @@ class HelpMod(loader.Module):
if mod.strings("name", message).lower() == args.lower():
module = mod
if module is None:
if not module:
args = args.lower()
args = args[1:] if args.startswith(prefix) else args
if args in self.allmodules.commands:
module = self.allmodules.commands[args].__self__
else:
await utils.answer(message, self.strings("bad_module", message).format(args))
return
if not module:
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:
name = module.strings("name")
except KeyError:
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__:
reply += (
"<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", [])))
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
plain_ = []
@ -219,11 +244,11 @@ class HelpMod(loader.Module):
core = mod.__origin__ == "<core>"
if core:
emoji = self.config['core_emoji']
emoji = self.config["core_emoji"]
elif inline:
emoji = self.config['hikka_emoji']
emoji = self.config["hikka_emoji"]
else:
emoji = self.config['plain_emoji']
emoji = self.config["plain_emoji"]
tmp += self.strings("mod_tmpl", message).format(emoji, name)
@ -245,7 +270,10 @@ class HelpMod(loader.Module):
icommands = [
name
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:
@ -271,7 +299,10 @@ class HelpMod(loader.Module):
core_.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):
"""Joins the support Hikka chat"""