From 3d053d25bf7bad67d41a0ff820a6909612d7a94d Mon Sep 17 00:00:00 2001
From: Who? <155328415+coddrago@users.noreply.github.com>
Date: Fri, 13 Sep 2024 23:58:02 +0700
Subject: [PATCH] Update loader.py
---
hikka/modules/loader.py | 128 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 128 insertions(+)
diff --git a/hikka/modules/loader.py b/hikka/modules/loader.py
index 5843d0e..5d62183 100644
--- a/hikka/modules/loader.py
+++ b/hikka/modules/loader.py
@@ -1185,3 +1185,131 @@ class LoaderMod(loader.Module):
self.fully_loaded = True
return len(loaded)
+
+ @loader.command()
+ async def mlcmd(self, message: Message):
+ if not (args := utils.get_args_raw(message)):
+ await utils.answer(message, self.strings("args"))
+ return
+
+ exact = True
+ if not (
+ class_name := next(
+ (
+ module.strings("name")
+ for module in self.allmodules.modules
+ if args.lower()
+ in {
+ module.strings("name").lower(),
+ module.__class__.__name__.lower(),
+ }
+ ),
+ None,
+ )
+ ):
+ if not (
+ class_name := next(
+ reversed(
+ sorted(
+ [
+ module.strings["name"].lower()
+ for module in self.allmodules.modules
+ ]
+ + [
+ module.__class__.__name__.lower()
+ for module in self.allmodules.modules
+ ],
+ key=lambda x: difflib.SequenceMatcher(
+ None,
+ args.lower(),
+ x,
+ ).ratio(),
+ )
+ ),
+ None,
+ )
+ ):
+ await utils.answer(message, self.strings("404"))
+ return
+
+ exact = False
+
+ try:
+ module = self.lookup(class_name)
+ sys_module = inspect.getmodule(module)
+ except Exception:
+ await utils.answer(message, self.strings("404"))
+ return
+
+ link = module.__origin__
+
+ text = (
+ f"🧳 {utils.escape_html(class_name)}"
+ if not utils.check_url(link)
+ else (
+ f'📼 Link for'
+ f" {utils.escape_html(class_name)}:"
+ f' {link}
\n\n{self.strings("not_exact") if not exact else ""}'
+ )
+ )
+
+ text = (
+ self.strings("link").format(
+ class_name=utils.escape_html(class_name),
+ url=link,
+ not_exact=self.strings("not_exact") if not exact else "",
+ prefix=utils.escape_html(self.get_prefix()),
+ )
+ if utils.check_url(link)
+ else self.strings("file").format(
+ class_name=utils.escape_html(class_name),
+ not_exact=self.strings("not_exact") if not exact else "",
+ prefix=utils.escape_html(self.get_prefix()),
+ )
+ )
+
+ file = io.BytesIO(sys_module.__loader__.data)
+ file.name = f"{class_name}.py"
+ file.seek(0)
+
+ await utils.answer_file(
+ message,
+ file,
+ caption=text,
+ )
+
+ def _format_result(
+ self,
+ result: dict,
+ query: str,
+ no_translate: bool = False,
+ ) -> str:
+ commands = "\n".join([
+ f"▫️ {utils.escape_html(self.get_prefix())}{utils.escape_html(cmd)}
:"
+ f" {utils.escape_html(cmd_doc)}"
+ for cmd, cmd_doc in result["module"]["commands"].items()
+ ])
+
+ kwargs = {
+ "name": utils.escape_html(result["module"]["name"]),
+ "dev": utils.escape_html(result["module"]["dev"]),
+ "commands": commands,
+ "cls_doc": utils.escape_html(result["module"]["cls_doc"]),
+ "mhash": result["module"]["hash"],
+ "query": utils.escape_html(query),
+ "prefix": utils.escape_html(self.get_prefix()),
+ }
+
+ strings = (
+ self.strings.get("result", "en")
+ if self.config["translate"] and not no_translate
+ else self.strings("result")
+ )
+
+ text = strings.format(**kwargs)
+
+ if len(text) > 1980:
+ kwargs["commands"] = "..."
+ text = strings.format(**kwargs)
+
+ return text