From 32743544f541b60ed8488cdae5d8e555eec7b9e2 Mon Sep 17 00:00:00 2001 From: bgrmwbys <77823759+bgrmwbys@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:29:41 -0400 Subject: [PATCH 1/4] Refactor commands to use enums for parse mode --- plugins/commands.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/commands.py b/plugins/commands.py index 65b0c48..b4479ef 100644 --- a/plugins/commands.py +++ b/plugins/commands.py @@ -1,7 +1,7 @@ from functions.functions import ip, get_server_speedtest, get_server_details from config import allowed, help_text from plugins.markups import start_and_help, refresh_space, base_markup -from pyrogram import Client, filters +from pyrogram import Client, filters, enums from pyrogram.types import Message, ForceReply import os @@ -13,7 +13,7 @@ async def start(_, m: Message): @Client.on_message(filters.command('ip') & filters.user(allowed)) async def ip_cmd(_, m: Message): - await m.reply(ip(), parse_mode='markdown') + await m.reply(ip(), parse_mode=enums.ParseMode.MARKDOWN) @Client.on_message(filters.command('stats') & filters.user(allowed)) @@ -47,3 +47,4 @@ async def cd(client, m: Message): @Client.on_message(filters.command('my_files') & filters.user(allowed)) async def my_files(_, m: Message): await m.reply_text('what you want to show?', reply_markup=base_markup) + From 9bfe9f2441d2cb01adb1f83de49ecb3d0eb8731e Mon Sep 17 00:00:00 2001 From: bgrmwbys <77823759+bgrmwbys@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:30:54 -0400 Subject: [PATCH 2/4] Update exec.py --- plugins/exec.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/exec.py b/plugins/exec.py index f5deb68..d299690 100644 --- a/plugins/exec.py +++ b/plugins/exec.py @@ -31,10 +31,10 @@ async def exec_cmd(_: Client, msg: Message): if not k: k = await msg.reply(out_data) else: - await k.edit(out_data) + await k.edit_text(out_data) except Exception: pass - out_data = f"`{output}{cmd.get_output}`" + out_data = f"{output}`{cmd.get_output}`" if len(out_data) > 4096: if k: await k.delete() @@ -45,6 +45,6 @@ async def exec_cmd(_: Client, msg: Message): "terminal.txt", caption=cmd) os.remove("terminal.txt") return - send = k.edit if k else msg.reply + send = k.edit_text if k else msg.reply await send(out_data) - + From 29dfc024e34dfc230e0e51fa99fee8668636dfea Mon Sep 17 00:00:00 2001 From: bgrmwbys <77823759+bgrmwbys@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:31:32 -0400 Subject: [PATCH 3/4] Refactor Terminal class to use asyncio.gather --- functions/terminal.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/functions/terminal.py b/functions/terminal.py index 0cd7a65..92d3e48 100644 --- a/functions/terminal.py +++ b/functions/terminal.py @@ -20,7 +20,6 @@ def finished(self) -> bool: @property def read_line(self) -> str: return (self._stdout_line + self._stderr_line).decode('utf-8').rstrip() - #return (self._stdout + self._stderr).decode('utf-8').strip() @property def get_output(self) -> str: @@ -28,7 +27,6 @@ def get_output(self) -> str: async def _read_stdout(self) -> None: while True: - #line = await self._process.stdout.readline() line = await self._process.stdout.read(n=1024) if line: self._stdout_line = line @@ -38,7 +36,6 @@ async def _read_stdout(self) -> None: async def _read_stderr(self) -> None: while True: - #line = await self._process.stderr.readline() line = await self._process.stderr.read(n=1024) if line: self._stderr_line = line @@ -47,7 +44,7 @@ async def _read_stderr(self) -> None: break async def worker(self) -> None: - await asyncio.wait([self._read_stdout(), self._read_stderr()]) + await asyncio.gather(self._read_stdout(), self._read_stderr()) await self._process.wait() self._finished = True @@ -58,3 +55,4 @@ async def execute(cls, cmd: str): t_obj = cls(process) asyncio.get_event_loop().create_task(t_obj.worker()) return t_obj + From 670c311cc78ce3b5d6604d6ad5c5aa0cdb7b74fa Mon Sep 17 00:00:00 2001 From: bgrmwbys <77823759+bgrmwbys@users.noreply.github.com> Date: Wed, 15 Apr 2026 10:33:36 -0400 Subject: [PATCH 4/4] Enhance bot.py with compatibility and patch updates Added compatibility patches for collections and Ravenclaw preprocessing. --- bot.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/bot.py b/bot.py index 8e03b58..c1d203a 100644 --- a/bot.py +++ b/bot.py @@ -4,7 +4,37 @@ from pyromod import listen from pyrogram import Client, idle, __version__ from pyrogram.raw.all import layer +import collections +import collections.abc +import sys +import types +import collections +import collections.abc +import sys +import types + +# 1. Collections compatibility patch +collections.Iterable = collections.abc.Iterable +collections.Mapping = collections.abc.Mapping +collections.MutableMapping = collections.abc.MutableMapping +collections.Sequence = collections.abc.Sequence +collections.MutableSet = collections.abc.MutableSet # <--- Add this line! + +# 2. Ravenclaw/Chronometry Patch +try: + import ravenclaw.preprocessing +except ImportError: + m = types.ModuleType("ravenclaw.preprocessing") + sys.modules["ravenclaw.preprocessing"] = m + ravenclaw.preprocessing = m + +if not hasattr(ravenclaw.preprocessing, 'Polynomial'): + ravenclaw.preprocessing.Polynomial = type('Polynomial', (), {}) +if not hasattr(ravenclaw.preprocessing, 'Normalizer'): + ravenclaw.preprocessing.Normalizer = type('Normalizer', (), {}) + +# ... existing code (imports like from pyromod import listen, etc) logging.basicConfig(level=logging.INFO) plugins = dict(root="plugins") @@ -21,3 +51,4 @@ async def main(): if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(main()) +