diff --git a/modules/admintool.py b/modules/admintool.py index 893b953..044ddca 100644 --- a/modules/admintool.py +++ b/modules/admintool.py @@ -16,7 +16,7 @@ from contextlib import suppress -from pyrogram import Client, ContinuePropagation, filters, enums +from pyrogram import Client, ContinuePropagation, filters from pyrogram.errors import ( UserAdminInvalid, ChatAdminRequired, @@ -93,7 +93,6 @@ async def admintool_handler(_, message: Message): await message.reply( db_cache.get(f"welcome_text{message.chat.id}"), disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) raise ContinuePropagation diff --git a/modules/admlist.py b/modules/admlist.py index 9811a46..ebfbc1a 100644 --- a/modules/admlist.py +++ b/modules/admlist.py @@ -17,11 +17,10 @@ # import json # from html import escape as t from time import perf_counter -from typing import AsyncGenerator, Optional, List, Union +from typing import AsyncGenerator, List, Optional, Union -from pyrogram import Client, filters # from pyrogram.errors.exceptions.flood_420 import FloodWait -from pyrogram import types, raw, utils, enums +from pyrogram import Client, enums, filters, raw, types, utils from pyrogram.types.object import Object from utils.misc import modules_help, prefix @@ -112,9 +111,7 @@ class Chat(Object): username=user.username, first_name=user.first_name, last_name=user.last_name, - photo=types.ChatPhoto._parse( - client, user.photo, peer_id, user.access_hash - ), + photo=types.ChatPhoto._parse(client, user.photo, peer_id, user.access_hash), restrictions=types.List( [types.Restriction._parse(r) for r in user.restriction_reason] ) @@ -142,7 +139,7 @@ class Chat(Object): has_protected_content=getattr(chat, "noforwards", None), client=client, is_admin=True if getattr(chat, "admin_rights", False) else False, - deactivated=getattr(chat, "deactivated"), + deactivated=chat.deactivated, ) @staticmethod @@ -152,9 +149,11 @@ class Chat(Object): return Chat( id=peer_id, - type=enums.ChatType.SUPERGROUP - if getattr(channel, "megagroup", None) - else enums.ChatType.CHANNEL, + type=( + enums.ChatType.SUPERGROUP + if getattr(channel, "megagroup", None) + else enums.ChatType.CHANNEL + ), is_verified=getattr(channel, "verified", None), is_restricted=getattr(channel, "restricted", None), is_creator=getattr(channel, "creator", None), @@ -234,9 +233,7 @@ class Dialog(Object): self.is_pinned = is_pinned @staticmethod - def _parse( - client, dialog: "raw.types.Dialog", messages, users, chats - ) -> "Dialog": + def _parse(client, dialog: "raw.types.Dialog", messages, users, chats) -> "Dialog": return Dialog( chat=Chat._parse_dialog(client, dialog.peer, users, chats), top_message=messages.get(utils.get_peer_id(dialog.peer)), @@ -275,9 +272,7 @@ async def get_dialogs( if isinstance(message, raw.types.MessageEmpty): continue chat_id = utils.get_peer_id(message.peer_id) - messages[chat_id] = await types.Message._parse( - self, message, users, chats - ) + messages[chat_id] = await types.Message._parse(self, message, users, chats) dialogs = [] for dialog in r.dialogs: if not isinstance(dialog, raw.types.Dialog): @@ -298,9 +293,7 @@ async def get_dialogs( @Client.on_message(filters.command("admlist", prefix) & filters.me) async def admlist(client: Client, message: types.Message): - await message.edit( - "Retrieving information... (it'll take some time)", parse_mode=enums.ParseMode.HTML - ) + await message.edit("Retrieving information... (it'll take some time)") start = perf_counter() try: @@ -311,9 +304,7 @@ async def admlist(client: Client, message: types.Message): chat = dialog.chat if getattr(chat, "deactivated", False): continue - if getattr(chat, "is_creator", False) and getattr( - chat, "username", None - ): + if getattr(chat, "is_creator", False) and getattr(chat, "username", None): owned_usernamed_chats.append(chat) elif getattr(chat, "is_creator", False): owned_chats.append(chat) @@ -333,9 +324,7 @@ async def admlist(client: Client, message: types.Message): text += "\nOwned chats with username:\n" for index, chat in enumerate(owned_usernamed_chats): cid = str(chat.id).replace("-100", "") - text += ( - f"{index + 1}. {chat.title}\n" - ) + text += f"{index + 1}. {chat.title}\n" stop = perf_counter() total_count = ( @@ -347,20 +336,16 @@ async def admlist(client: Client, message: types.Message): f"\nAdminned chats: {len(adminned_chats)}\n" f"Owned chats: {len(owned_chats)}\n" f"Owned chats with username: {len(owned_usernamed_chats)}\n\n" - f"Done at {round(stop - start, 3)} seconds.", - parse_mode=enums.ParseMode.HTML + f"Done in {round(stop - start, 3)} seconds.", ) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) return @Client.on_message(filters.command("admcount", prefix) & filters.me) async def admcount(client: Client, message: types.Message): - await message.edit( - "Retrieving information... (it'll take some time)", - parse_mode=enums.ParseMode.HTML - ) + await message.edit("Retrieving information... (it'll take some time)") start = perf_counter() try: @@ -371,9 +356,7 @@ async def admcount(client: Client, message: types.Message): chat = dialog.chat if getattr(chat, "deactivated", False): continue - if getattr(chat, "is_creator", False) and getattr( - chat, "username", None - ): + if getattr(chat, "is_creator", False) and getattr(chat, "username", None): owned_usernamed_chats += 1 elif getattr(chat, "is_creator", False): owned_chats += 1 @@ -383,20 +366,19 @@ async def admcount(client: Client, message: types.Message): stop = perf_counter() total_count = adminned_chats + owned_chats + owned_usernamed_chats await message.edit( - f"Total: {adminned_chats + owned_chats + owned_usernamed_chats}" + f"Total: {total_count}" f"\nAdminned chats: {adminned_chats}\n" f"Owned chats: {owned_chats}\n" f"Owned chats with username: {owned_usernamed_chats}\n\n" - f"Done at {round(stop - start, 3)} seconds.\n\n" + f"Done in {round(stop - start, 3)} seconds.\n\n" f"Get full list: {prefix}admlist", - parse_mode=enums.ParseMode.HTML ) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) return modules_help["admlist"] = { "admcount": "Get count of adminned and owned chats", "admlist": "Get list of adminned and owned chats", -} \ No newline at end of file +} diff --git a/modules/afk.py b/modules/afk.py index 7312c88..7ab5912 100644 --- a/modules/afk.py +++ b/modules/afk.py @@ -18,36 +18,22 @@ import asyncio from datetime import datetime +import humanize from pyrogram import Client, enums, filters from pyrogram.types import Message from utils.misc import modules_help, prefix -from utils.scripts import import_library +from utils.scripts import import_library, ReplyCheck -humanize = import_library("humanize") - -import humanize +import_library("humanize") +# Variables AFK = False AFK_REASON = "" AFK_TIME = "" USERS = {} GROUPS = {} -# Helpers - - -def ReplyCheck(message: Message): - reply_id = None - - if message.reply_to_message: - reply_id = message.reply_to_message.id - - elif not message.from_user.is_self: - reply_id = message.id - - return reply_id - def GetChatID(message: Message): """Get the group id of the incoming message""" @@ -87,7 +73,6 @@ async def collect_afk_messages(bot: Client, message: Message): chat_id=GetChatID(message), text=text, reply_to_message_id=ReplyCheck(message), - parse_mode=enums.ParseMode.HTML, ) CHAT_TYPE[GetChatID(message)] = 1 return @@ -104,7 +89,6 @@ async def collect_afk_messages(bot: Client, message: Message): chat_id=GetChatID(message), text=text, reply_to_message_id=ReplyCheck(message), - parse_mode=enums.ParseMode.HTML, ) elif CHAT_TYPE[GetChatID(message)] > 50: return @@ -119,7 +103,6 @@ async def collect_afk_messages(bot: Client, message: Message): chat_id=GetChatID(message), text=text, reply_to_message_id=ReplyCheck(message), - parse_mode=enums.ParseMode.HTML, ) CHAT_TYPE[GetChatID(message)] += 1 @@ -153,8 +136,7 @@ async def afk_unset(bot: Client, message: Message): await message.edit( f"While you were away (for {last_seen}), you received {sum(USERS.values()) + sum(GROUPS.values())} " f"messages from {len(USERS) + len(GROUPS)} chats", - parse_mode=enums.ParseMode.HTML - ) +) AFK = False AFK_TIME = "" AFK_REASON = "" @@ -173,8 +155,7 @@ async def auto_afk_unset(bot: Client, message: Message): last_seen = subtract_time(datetime.now(), AFK_TIME).replace("ago", "").strip() reply = await message.reply( f"While you were away (for {last_seen}), you received {sum(USERS.values()) + sum(GROUPS.values())} " - f"messages from {len(USERS) + len(GROUPS)} chats", - parse_mode=enums.ParseMode.HTML, + f"messages from {len(USERS) + len(GROUPS)} chats" ) AFK = False AFK_TIME = "" @@ -189,3 +170,5 @@ modules_help["afk"] = { "afk [reason]": "Go to AFK mode with reason as anything after .afk\nUsage: .afk ", "unafk": "Get out of AFK", } + + diff --git a/modules/antipm.py b/modules/antipm.py index b6c871e..cad3d86 100644 --- a/modules/antipm.py +++ b/modules/antipm.py @@ -14,27 +14,26 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.raw import functions from pyrogram.types import Message +from utils.config import pm_limit from utils.db import db from utils.misc import modules_help, prefix -from utils.config import pm_limit anti_pm_enabled = filters.create( lambda _, __, ___: db.get("core.antipm", "status", False) ) -in_contact_list = filters.create( - lambda _, __, message: message.from_user.is_contact -) +in_contact_list = filters.create(lambda _, __, message: message.from_user.is_contact) is_support = filters.create(lambda _, __, message: message.chat.is_support) message_counts = {} + @Client.on_message( filters.private & ~filters.me @@ -65,10 +64,14 @@ Do not spam further messages else I may have to block you! await client.invoke(functions.messages.ReportSpam(peer=user_info)) if db.get("core.antipm", "block", False): await client.block_user(user_info) - - if db.get("core.antipm", f"disallowusers{id}") == user_id != db.get("core.antipm", f"allowusers{id}") or db.get("core.antipm", f"disallowusers{id}") != user_id != db.get("core.antipm", f"allowusers{id}") : + + if db.get("core.antipm", f"disallowusers{id}") == user_id != db.get( + "core.antipm", f"allowusers{id}" + ) or db.get("core.antipm", f"disallowusers{id}") != user_id != db.get( + "core.antipm", f"allowusers{id}" + ): await client.send_message(message.chat.id, f"{default_text}") - + if user_id in message_counts: message_counts[user_id] += 1 m_n = db.get("core.antipm", "warns") @@ -78,9 +81,12 @@ Do not spam further messages else I may have to block you! message_counts[user_id] = 1 m_n_n = 1 db.set("core.antipm", "warns", m_n_n) - + if message_counts[user_id] > pm_limit: - await client.send_message(message.chat.id, f"Ehm...! That was your Last warn, Bye Bye see you L0L") + await client.send_message( + message.chat.id, + "Ehm...! That was your Last warn, Bye Bye see you L0L", + ) await client.block_user(user_id) del message_counts[user_id] db.set("core.antipm", "warns", 0) @@ -92,21 +98,21 @@ async def anti_pm(_, message: Message): if db.get("core.antipm", "status", False): await message.edit( "Anti-PM status: enabled\n" - f"Disable with: {prefix}antipm disable", parse_mode=enums.ParseMode.HTML + f"Disable with: {prefix}antipm disable" ) else: await message.edit( "Anti-PM status: disabled\n" - f"Enable with: {prefix}antipm enable", parse_mode=enums.ParseMode.HTML + f"Enable with: {prefix}antipm enable" ) elif message.command[1] in ["enable", "on", "1", "yes", "true"]: db.set("core.antipm", "status", True) - await message.edit("Anti-PM enabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Anti-PM enabled!") elif message.command[1] in ["disable", "off", "0", "no", "false"]: db.set("core.antipm", "status", False) - await message.edit("Anti-PM disabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Anti-PM disabled!") else: - await message.edit(f"Usage: {prefix}antipm [enable|disable]", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Usage: {prefix}antipm [enable|disable]") @Client.on_message(filters.command(["antipm_report"], prefix) & filters.me) @@ -115,23 +121,21 @@ async def antipm_report(_, message: Message): if db.get("core.antipm", "spamrep", False): await message.edit( "Spam-reporting enabled.\n" - f"Disable with: {prefix}antipm_report disable", parse_mode=enums.ParseMode.HTML + f"Disable with: {prefix}antipm_report disable" ) else: await message.edit( "Spam-reporting disabled.\n" - f"Enable with: {prefix}antipm_report enable", parse_mode=enums.ParseMode.HTML + f"Enable with: {prefix}antipm_report enable" ) elif message.command[1] in ["enable", "on", "1", "yes", "true"]: db.set("core.antipm", "spamrep", True) - await message.edit("Spam-reporting enabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Spam-reporting enabled!") elif message.command[1] in ["disable", "off", "0", "no", "false"]: db.set("core.antipm", "spamrep", False) - await message.edit("Spam-reporting disabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Spam-reporting disabled!") else: - await message.edit( - f"Usage: {prefix}antipm_report [enable|disable]", parse_mode=enums.ParseMode.HTML - ) + await message.edit(f"Usage: {prefix}antipm_report [enable|disable]") @Client.on_message(filters.command(["antipm_block"], prefix) & filters.me) @@ -140,47 +144,49 @@ async def antipm_block(_, message: Message): if db.get("core.antipm", "block", False): await message.edit( "Blocking users enabled.\n" - f"Disable with: {prefix}antipm_block disable", parse_mode=enums.ParseMode.HTML + f"Disable with: {prefix}antipm_block disable" ) else: await message.edit( "Blocking users disabled.\n" - f"Enable with: {prefix}antipm_block enable", parse_mode=enums.ParseMode.HTML + f"Enable with: {prefix}antipm_block enable" ) elif message.command[1] in ["enable", "on", "1", "yes", "true"]: db.set("core.antipm", "block", True) - await message.edit("Blocking users enabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Blocking users enabled!") elif message.command[1] in ["disable", "off", "0", "no", "false"]: db.set("core.antipm", "block", False) - await message.edit("Blocking users disabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Blocking users disabled!") else: - await message.edit( - f"Usage: {prefix}antipm_block [enable|disable]", parse_mode=enums.ParseMode.HTML - ) + await message.edit(f"Usage: {prefix}antipm_block [enable|disable]") @Client.on_message(filters.command(["a"], prefix) & filters.me) async def add_contact(client: Client, message: Message): - id = message.chat.id + id = message.chat.id + + user = await client.get_users(id) + db.set("core.antipm", f"allowusers{id}", id) + db.set("core.antipm", "warns", 0) + await message.edit("User Approved!") - user = await client.get_users(id) - db.set("core.antipm", f"allowusers{id}", id) - db.set("core.antipm", "warns", 0) - await message.edit("User Approved!") @Client.on_message(filters.command(["d"], prefix) & filters.me) async def del_contact(client: Client, message: Message): - id = message.chat.id + id = message.chat.id + + user = await client.get_users(id) + db.set("core.antipm", f"disallowusers{id}", id) + db.remove("core.antipm", f"allowusers{id}") + await message.edit("User DisApproved!") - user = await client.get_users(id) - db.set("core.antipm", f"disallowusers{id}", id) - db.remove("core.antipm", f"allowusers{id}") - await message.edit("User DisApproved!") modules_help["antipm"] = { "antipm [enable|disable]*": "Enable Pm permit", "antipm_report [enable|disable]*": "Enable spam reporting", "antipm_block [enable|disable]*": "Enable user blocking", "a": "Approve User", - "d": "DisApprove User" + "d": "DisApprove User", } + + diff --git a/modules/clear_notifs.py b/modules/clear_notifs.py index 88f2245..0e32dfc 100644 --- a/modules/clear_notifs.py +++ b/modules/clear_notifs.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.errors import FloodWait from pyrogram.raw import functions, types from pyrogram.types import Message @@ -37,7 +37,7 @@ async def global_mention_clear(client: Client, message: Message): result = await client.invoke(request) except FloodWait as e: await message.edit_text( - f"FloodWait received. Wait {e.x} seconds before trying again", parse_mode=enums.ParseMode.HTML + f"FloodWait received. Wait {e.x} seconds before trying again" ) return await message.delete() @@ -66,7 +66,7 @@ async def global_reaction_clear(client: Client, message: Message): result = await client.invoke(request) except FloodWait as e: await message.edit_text( - f"FloodWait received. Wait {e.x} seconds before trying again", parse_mode=enums.ParseMode.HTML + f"FloodWait received. Wait {e.x} seconds before trying again" ) return await message.delete() diff --git a/modules/direct.py b/modules/direct.py index 7055ab6..7078737 100644 --- a/modules/direct.py +++ b/modules/direct.py @@ -52,7 +52,7 @@ async def direct_link_generator(_, m: Message): elif m.reply_to_message: message = m.reply_to_message.text else: - await m.edit(f"Usage: {prefix}direct [url]", parse_mode=enums.ParseMode.HTML) + await m.edit(f"Usage: {prefix}direct [url]") return reply = "" links = re.findall(r"\bhttps?://.*\.\S+", message) diff --git a/modules/filters.py b/modules/filters.py index 765b663..9f1bb4e 100644 --- a/modules/filters.py +++ b/modules/filters.py @@ -18,18 +18,18 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, ContinuePropagation, errors, enums +from pyrogram import Client, ContinuePropagation, enums, errors, filters from pyrogram.types import ( - Message, + InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo, - InputMediaAudio, + Message, ) +from utils.db import db from utils.misc import modules_help, prefix from utils.scripts import format_exc -from utils.db import db def get_filters_chat(chat_id): @@ -52,11 +52,9 @@ contains = filters.create(contains_filter) async def filters_main_handler(client: Client, message: Message): value = get_filters_chat(message.chat.id)[message.text.lower()] try: - await client.get_messages( - int(value["CHAT_ID"]), int(value["MESSAGE_ID"]) - ) - except errors.RPCError: - raise ContinuePropagation + await client.get_messages(int(value["CHAT_ID"]), int(value["MESSAGE_ID"])) + except errors.RPCError as exc: + raise ContinuePropagation from exc if value.get("MEDIA_GROUP"): messages_grouped = await client.get_media_group( @@ -87,9 +85,7 @@ async def filters_main_handler(client: Client, message: Message): ) elif _.video.thumbs: media_grouped_list.append( - InputMediaVideo( - _.video.file_id, _.video.thumbs[0].file_id - ) + InputMediaVideo(_.video.file_id, _.video.thumbs[0].file_id) ) else: media_grouped_list.append(InputMediaVideo(_.video.file_id)) @@ -112,9 +108,7 @@ async def filters_main_handler(client: Client, message: Message): ) else: media_grouped_list.append( - InputMediaDocument( - _.document.file_id, _.caption.HTML - ) + InputMediaDocument(_.document.file_id, _.caption.HTML) ) elif _.document.thumbs: media_grouped_list.append( @@ -123,14 +117,9 @@ async def filters_main_handler(client: Client, message: Message): ) ) else: - media_grouped_list.append( - InputMediaDocument(_.document.file_id) - ) + media_grouped_list.append(InputMediaDocument(_.document.file_id)) await client.send_media_group( - message.chat.id, - media_grouped_list, - reply_to_message_id=message.id, - parse_mode=enums.ParseMode.HTML, + message.chat.id, media_grouped_list, reply_to_message_id=message.id ) else: await client.copy_message( @@ -147,16 +136,16 @@ async def filter_handler(client: Client, message: Message): try: if len(message.text.split()) < 2: return await message.edit( - f"Usage: {prefix}filter [name] (Reply required)", parse_mode=enums.ParseMode.HTML + f"Usage: {prefix}filter [name] (Reply required)" ) name = message.text.split(maxsplit=1)[1].lower() chat_filters = get_filters_chat(message.chat.id) if name in chat_filters.keys(): return await message.edit( - f"Filter {name} already exists.", parse_mode=enums.ParseMode.HTML + f"Filter {name} already exists." ) if not message.reply_to_message: - return await message.edit("Reply to message please.", parse_mode=enums.ParseMode.HTML) + return await message.edit("Reply to message please.") try: chat = await client.get_chat(db.get("core.notes", "chat_id", 0)) @@ -182,7 +171,7 @@ async def filter_handler(client: Client, message: Message): ) except errors.ChatForwardsRestricted: await message.edit( - "Forwarding messages is restricted by chat admins", parse_mode=enums.ParseMode.HTML + "Forwarding messages is restricted by chat admins" ) return filter_ = { @@ -206,27 +195,24 @@ async def filter_handler(client: Client, message: Message): set_filters_chat(message.chat.id, chat_filters) return await message.edit( f"Filter {name} has been added.", - parse_mode=enums.ParseMode.HTML ) except Exception as e: - return await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + return await message.edit(format_exc(e)) @Client.on_message(filters.command(["filters"], prefix) & filters.me) async def filters_handler(client: Client, message: Message): try: text = "" - for index, a in enumerate( - get_filters_chat(message.chat.id).items(), start=1 - ): + for index, a in enumerate(get_filters_chat(message.chat.id).items(), start=1): key, item = a key = key.replace("<", "").replace(">", "") text += f"{index}. {key}\n" text = f"Your filters in current chat:\n\n" f"{text}" text = text[:4096] - return await message.edit(text, parse_mode=enums.ParseMode.HTML) + return await message.edit(text) except Exception as e: - return await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + return await message.edit(format_exc(e)) @Client.on_message( @@ -237,23 +223,20 @@ async def filter_del_handler(client: Client, message: Message): if len(message.text.split()) < 2: return await message.edit( f"Usage: {prefix}fdel [name]", - parse_mode=enums.ParseMode.HTML ) name = message.text.split(maxsplit=1)[1].lower() chat_filters = get_filters_chat(message.chat.id) if name not in chat_filters.keys(): return await message.edit( f"Filter {name} doesn't exists.", - parse_mode=enums.ParseMode.HTML ) del chat_filters[name] set_filters_chat(message.chat.id, chat_filters) return await message.edit( f"Filter {name} has been deleted.", - parse_mode=enums.ParseMode.HTML ) except Exception as e: - return await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + return await message.edit(format_exc(e)) @Client.on_message(filters.command(["fsearch"], prefix) & filters.me) @@ -262,22 +245,19 @@ async def filter_search_handler(client: Client, message: Message): if len(message.text.split()) < 2: return await message.edit( f"Usage: {prefix}fsearch [name]", - parse_mode=enums.ParseMode.HTML ) name = message.text.split(maxsplit=1)[1].lower() chat_filters = get_filters_chat(message.chat.id) if name not in chat_filters.keys(): return await message.edit( f"Filter {name} doesn't exists.", - parse_mode=enums.ParseMode.HTML ) return await message.edit( f"Trigger:\n{name}\nAnswer:\n{chat_filters[name]}", - parse_mode=enums.ParseMode.HTML, + f">\nAnswer:\n{chat_filters[name]}" ) except Exception as e: - return await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + return await message.edit(format_exc(e)) modules_help["filters"] = { @@ -285,4 +265,4 @@ modules_help["filters"] = { "filters": "List of all triggers", "fdel [name]": "Delete filter by name", "fsearch [name]": "Info filter by name", -} \ No newline at end of file +} diff --git a/modules/help.py b/modules/help.py index e0bc82a..81d2e5f 100644 --- a/modules/help.py +++ b/modules/help.py @@ -38,13 +38,11 @@ async def help_cmd(_, message: Message): await message.reply( text, disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) else: await message.edit( text, disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) msg_edited = True text = "" @@ -53,16 +51,15 @@ async def help_cmd(_, message: Message): if msg_edited: await message.reply( - text, disable_web_page_preview=True, parse_mode=enums.ParseMode.HTML + text, disable_web_page_preview=True ) else: await message.edit( - text, disable_web_page_preview=True, parse_mode=enums.ParseMode.HTML + text, disable_web_page_preview=True ) elif message.command[1].lower() in modules_help: await message.edit( - format_module_help(message.command[1].lower(), prefix), - parse_mode=enums.ParseMode.HTML, + format_module_help(message.command[1].lower(), prefix) ) else: command_name = message.command[1].lower() @@ -77,10 +74,9 @@ async def help_cmd(_, message: Message): f"{prefix}{cmd[0]}" f"{' ' + cmd[1] + '' if len(cmd) > 1 else ''}" f" — {cmd_desc}", - parse_mode=enums.ParseMode.HTML, ) await message.edit( - f"Module {command_name} not found", parse_mode=enums.ParseMode.HTML + f"Module {command_name} not found" ) # TODO: refactor this cringe command_name = message.command[1].lower() @@ -95,10 +91,9 @@ async def help_cmd(_, message: Message): f"{prefix}{cmd[0]}" f"{' ' + cmd[1] + '' if len(cmd) > 1 else ''}" f" — {cmd_desc}", - parse_mode=enums.ParseMode.HTML, ) await message.edit( - f"Module {command_name} not found", parse_mode=enums.ParseMode.HTML + f"Module {command_name} not found" ) diff --git a/modules/loader.py b/modules/loader.py index f54a371..ffe55a1 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -35,15 +35,13 @@ async def get_mod_hash(_, message: Message): resp = requests.get(url) if not resp.ok: await message.edit( - f"Troubleshooting with downloading module {url}", - parse_mode=enums.ParseMode.HTML, + f"Troubleshooting with downloading module {url}" ) return await message.edit( f"Module hash: {hashlib.sha256(resp.content).hexdigest()}\n" f"Link: {url}\nFile: {url.split('/')[-1]}", - parse_mode=enums.ParseMode.HTML, ) @@ -57,9 +55,7 @@ async def loadmod(_, message: Message): ) and len(message.command) == 1 ): - await message.edit( - "Specify module to download", parse_mode=enums.ParseMode.HTML - ) + await message.edit("Specify module to download") return if len(message.command) > 1: @@ -81,7 +77,6 @@ async def loadmod(_, message: Message): if not resp.ok: await message.edit( f"Troubleshooting with downloading module {url}", - parse_mode=enums.ParseMode.HTML, ) return @@ -92,17 +87,13 @@ async def loadmod(_, message: Message): "" "custom_modules repository are supported!", disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) module_name = url.split("/")[-1].split(".")[0] resp = requests.get(url) if not resp.ok: - await message.edit( - f"Module {module_name} is not found", - parse_mode=enums.ParseMode.HTML, - ) + await message.edit(f"Module {module_name} is not found") return if not os.path.exists(f"{BASE_PATH}/modules/custom_modules"): @@ -129,15 +120,11 @@ async def loadmod(_, message: Message): "" "custom_modules repository are supported!", disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML ) else: os.rename(file_name, f"./modules/custom_modules/{module_name}.py") - await message.edit( - f"The module {module_name} is loaded!", - parse_mode=enums.ParseMode.HTML, - ) + await message.edit(f"The module {module_name} is loaded!") restart() @@ -155,26 +142,19 @@ async def unload_mods(_, message: Message): if os.path.exists(f"{BASE_PATH}/modules/custom_modules/{module_name}.py"): os.remove(f"{BASE_PATH}/modules/custom_modules/{module_name}.py") - await message.edit( - f"The module {module_name} removed!", - parse_mode=enums.ParseMode.HTML, - ) + await message.edit(f"The module {module_name} removed!") restart() elif os.path.exists(f"{BASE_PATH}/modules/{module_name}.py"): await message.edit( - "It is forbidden to remove built-in modules, it will disrupt the updater", - parse_mode=enums.ParseMode.HTML, + "It is forbidden to remove built-in modules, it will disrupt the updater" ) else: - await message.edit( - f"Module {module_name} is not found", - parse_mode=enums.ParseMode.HTML, - ) + await message.edit(f"Module {module_name} is not found") @Client.on_message(filters.command(["loadallmods"], prefix) & filters.me) async def load_all_mods(_, message: Message): - await message.edit("Fetching info...", parse_mode=enums.ParseMode.HTML) + await message.edit("Fetching info...") if not os.path.exists(f"{BASE_PATH}/modules/custom_modules"): os.mkdir(f"{BASE_PATH}/modules/custom_modules") @@ -191,23 +171,22 @@ async def load_all_mods(_, message: Message): continue new_modules[module_info["name"][:-3]] = module_info["download_url"] if not new_modules: - return await message.edit("All modules already loaded", parse_mode=enums.ParseMode.HTML) + return await message.edit("All modules already loaded") - await message.edit(f'Loading new modules: {" ".join(new_modules.keys())}', parse_mode=enums.ParseMode.HTML) + await message.edit(f'Loading new modules: {" ".join(new_modules.keys())}') for name, url in new_modules.items(): with open(f"./modules/custom_modules/{name}.py", "wb") as f: f.write(requests.get(url).content) await message.edit( f'Successfully loaded new modules: {" ".join(new_modules.keys())}', - parse_mode=enums.ParseMode.HTML ) restart() @Client.on_message(filters.command(["updateallmods"], prefix) & filters.me) async def updateallmods(_, message: Message): - await message.edit("Updating modules...", parse_mode=enums.ParseMode.HTML) + await message.edit("Updating modules...") if not os.path.exists(f"{BASE_PATH}/modules/custom_modules"): os.mkdir(f"{BASE_PATH}/modules/custom_modules") @@ -215,7 +194,7 @@ async def updateallmods(_, message: Message): modules_installed = list(os.walk("modules/custom_modules"))[0][2] if not modules_installed: - return await message.edit("You don't have any modules installed", parse_mode=enums.ParseMode.HTML) + return await message.edit("You don't have any modules installed") for module_name in modules_installed: if not module_name.endswith(".py"): @@ -231,7 +210,7 @@ async def updateallmods(_, message: Message): with open(f"./modules/custom_modules/{module_name}", "wb") as f: f.write(resp.content) - await message.edit(f"Successfully updated {len(modules_installed)} modules", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Successfully updated {len(modules_installed)} modules") modules_help["loader"] = { @@ -243,3 +222,4 @@ modules_help["loader"] = { "loadallmods": "Load all custom modules (use it at your own risk)", "updateallmods": "Update all custom modules", } + diff --git a/modules/notes.py b/modules/notes.py index f4b0096..e5fbc17 100644 --- a/modules/notes.py +++ b/modules/notes.py @@ -14,17 +14,17 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, errors, enums +from pyrogram import Client, enums, errors, filters from pyrogram.types import Message from utils.db import db -from utils.misc import modules_help, prefix from utils.handlers import NoteSendHandler +from utils.misc import modules_help, prefix @Client.on_message(filters.command(["save"], prefix) & filters.me) async def save_note(client: Client, message: Message): - await message.edit("Loading...", parse_mode=enums.ParseMode.HTML) + await message.edit("Loading...") try: chat = await client.get_chat(db.get("core.notes", "chat_id", 0)) @@ -55,7 +55,6 @@ async def save_note(client: Client, message: Message): except errors.ChatForwardsRestricted: await message.edit( "Forwarding messages is restricted by chat admins", - parse_mode=enums.ParseMode.HTML ) return note = { @@ -64,9 +63,9 @@ async def save_note(client: Client, message: Message): "CHAT_ID": str(chat_id), } db.set("core.notes", f"note{note_name}", note) - await message.edit(f"Note {note_name} saved", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Note {note_name} saved") else: - await message.edit("This note already exists", parse_mode=enums.ParseMode.HTML) + await message.edit("This note already exists") else: checking_note = db.get("core.notes", f"note{note_name}", False) if not checking_note: @@ -80,9 +79,9 @@ async def save_note(client: Client, message: Message): "CHAT_ID": str(chat_id), } db.set("core.notes", f"note{note_name}", note) - await message.edit(f"Note {note_name} saved", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Note {note_name} saved") else: - await message.edit("This note already exists", parse_mode=enums.ParseMode.HTML) + await message.edit("This note already exists") elif len(message.text.split()) >= 3: note_name = message.text.split(maxsplit=1)[1].split()[0] checking_note = db.get("core.notes", f"note{note_name}", False) @@ -96,31 +95,30 @@ async def save_note(client: Client, message: Message): "CHAT_ID": str(chat_id), } db.set("core.notes", f"note{note_name}", note) - await message.edit(f"Note {note_name} saved", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Note {note_name} saved") else: - await message.edit("This note already exists", parse_mode=enums.ParseMode.HTML) + await message.edit("This note already exists") else: await message.edit( f"Example: {prefix}save note_name", - parse_mode=enums.ParseMode.HTML ) + @Client.on_message(filters.command("note", prefix) & filters.me) async def note_send(client: Client, message: Message): handler = NoteSendHandler(client, message) await handler.handle_note_send() - @Client.on_message(filters.command(["notes"], prefix) & filters.me) async def notes(_, message: Message): - await message.edit("Loading...", parse_mode=enums.ParseMode.HTML) + await message.edit("Loading...") text = "Available notes:\n\n" collection = db.get_collection("core.notes") for note in collection.keys(): if note[:4] == "note": text += f"{note[4:]}\n" - await message.edit(text, parse_mode=enums.ParseMode.HTML) + await message.edit(text) @Client.on_message(filters.command(["clear"], prefix) & filters.me) @@ -130,14 +128,11 @@ async def clear_note(_, message: Message): find_note = db.get("core.notes", f"note{note_name}", False) if find_note: db.remove("core.notes", f"note{note_name}") - await message.edit(f"Note {note_name} deleted", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Note {note_name} deleted") else: - await message.edit("There is no such note", parse_mode=enums.ParseMode.HTML) + await message.edit("There is no such note") else: - await message.edit( - f"Example: {prefix}clear note_name", - parse_mode=enums.ParseMode.HTML - ) + await message.edit(f"Example: {prefix}clear note_name") modules_help["notes"] = { @@ -145,4 +140,4 @@ modules_help["notes"] = { "note [name]*": "Get saved note", "notes": "Get note list", "clear [name]*": "Delete note", -} \ No newline at end of file +} diff --git a/modules/ping.py b/modules/ping.py index fb0ffca..c36bfe0 100644 --- a/modules/ping.py +++ b/modules/ping.py @@ -13,7 +13,7 @@ from time import perf_counter # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -27,10 +27,10 @@ from utils.misc import modules_help, prefix @Client.on_message(filters.command(["ping", "p"], prefix) & filters.me) async def ping(_, message: Message): start = perf_counter() - await message.edit("Pong!", parse_mode=enums.ParseMode.HTML) + await message.edit("Pong!") end = perf_counter() await message.edit( - f"Pong! {round(end - start, 3)}s", parse_mode=enums.ParseMode.HTML + f"Pong! {round(end - start, 3)}s" ) diff --git a/modules/prefix.py b/modules/prefix.py index ce3270e..e2fbf62 100644 --- a/modules/prefix.py +++ b/modules/prefix.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message from utils.db import db @@ -30,13 +30,12 @@ async def setprefix(_, message: Message): pref = message.command[1] db.set("core.main", "prefix", pref) await message.edit( - f"Prefix [ {pref} ] is set!", - parse_mode=enums.ParseMode.HTML, + f"Prefix [ {pref} ] is set!" ) restart() else: await message.edit( - "The prefix must not be empty!", parse_mode=enums.ParseMode.HTML + "The prefix must not be empty!" ) diff --git a/modules/purge.py b/modules/purge.py index d6a6659..b65f729 100644 --- a/modules/purge.py +++ b/modules/purge.py @@ -15,7 +15,7 @@ # along with this program. If not, see . import asyncio -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix diff --git a/modules/python.py b/modules/python.py index cbb2131..c5f5d24 100644 --- a/modules/python.py +++ b/modules/python.py @@ -21,7 +21,7 @@ from contextlib import redirect_stdout from io import StringIO -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message # noinspection PyUnresolvedReferences @@ -38,7 +38,7 @@ from utils.scripts import format_exc async def user_exec(client: Client, message: Message): if len(message.command) == 1: await message.edit( - "Code to execute isn't provided", parse_mode=enums.ParseMode.HTML + "Code to execute isn't provided" ) return @@ -47,7 +47,7 @@ async def user_exec(client: Client, message: Message): code = message.text.split(maxsplit=1)[1] stdout = StringIO() - await message.edit("Executing...", parse_mode=enums.ParseMode.HTML) + await message.edit("Executing...") try: with redirect_stdout(stdout): @@ -59,18 +59,18 @@ async def user_exec(client: Client, message: Message): f"{stdout.getvalue()}" ) if message.command[0] == "exnoedit": - await message.reply(text, parse_mode=enums.ParseMode.HTML) + await message.reply(text) else: - await message.edit(text, parse_mode=enums.ParseMode.HTML) + await message.edit(text) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) # noinspection PyUnusedLocal @Client.on_message(filters.command(["ev", "eval"], prefix) & filters.me) async def user_eval(client: Client, message: Message): if len(message.command) == 1: - await message.edit("Code to eval isn't provided", parse_mode=enums.ParseMode.HTML) + await message.edit("Code to eval isn't provided") return reply = message.reply_to_message @@ -83,11 +83,10 @@ async def user_eval(client: Client, message: Message): "Expression:\n" f"{code}\n\n" "Result:\n" - f"{result}", - parse_mode=enums.ParseMode.HTML, + f"{result}" ) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) modules_help["python"] = { diff --git a/modules/removebg.py b/modules/removebg.py index e7fbbb8..5bcff70 100644 --- a/modules/removebg.py +++ b/modules/removebg.py @@ -152,7 +152,7 @@ async def rmbg(client: Client, message: Message): @Client.on_message(filters.command("rebg", prefix) & filters.me) async def rembg(client: Client, message: Message): - await message.edit("Processing...", parse_mode=enums.ParseMode.HTML) + await message.edit("Processing...") chat_id = message.chat.id try: try: @@ -162,7 +162,7 @@ async def rembg(client: Client, message: Message): photo_data = await message.reply_to_message.download() except ValueError: await message.edit( - "File not found", parse_mode=enums.ParseMode.HTML + "File not found" ) return background_removed_data = remove_background(photo_data) diff --git a/modules/safone.py b/modules/safone.py index 3d22b08..9f38eeb 100644 --- a/modules/safone.py +++ b/modules/safone.py @@ -3,7 +3,7 @@ import requests import aiofiles import base64 -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message, InputMediaPhoto from pyrogram.errors import MediaCaptionTooLong, MessageTooLong @@ -156,7 +156,7 @@ async def tsearch(client: Client, message: Message): link_results = await telegraph(title="Search Results", user_name=message.from_user.first_name, content=all_results_content) - if coverImage_url != None: + if coverImage_url is not None: coverImage = requests.get(url=coverImage_url).content async with aiofiles.open('coverImage.jpg', mode='wb') as f: await f.write(coverImage) @@ -177,12 +177,12 @@ async def tsearch(client: Client, message: Message): await client.send_media_group( chat_id, [ - InputMediaPhoto('coverImage.jpg', caption=f"Title: {title}\nCategory: {category}\nLanguage: {Language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here") + InputMediaPhoto('coverImage.jpg', caption=f"Title: {title}\nCategory: {category}\nLanguage: {language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here") ]) except MessageTooLong: description = description[:150] - await message.edit_text(f"Title: {title}\nCategory: {category}\nLanguage: {Language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here", disable_web_page_preview=True) + await message.edit_text(f"Title: {title}\nCategory: {category}\nLanguage: {language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here", disable_web_page_preview=True) except Exception as e: await message.edit_text(format_exc(e)) diff --git a/modules/say.py b/modules/say.py index d9c6f99..6ccd962 100644 --- a/modules/say.py +++ b/modules/say.py @@ -18,7 +18,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -29,7 +29,7 @@ async def say(_, message: Message): if len(message.command) == 1: return command = " ".join(message.command[1:]) - await message.edit(f"{command}", parse_mode=enums.ParseMode.HTML) + await message.edit(f"{command}") modules_help["say"] = { diff --git a/modules/sendmod.py b/modules/sendmod.py index 68ec59f..ba97826 100644 --- a/modules/sendmod.py +++ b/modules/sendmod.py @@ -7,7 +7,7 @@ # (at your option) any later version. import os -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -26,12 +26,11 @@ from utils.scripts import format_exc, format_module_help, format_small_module_he async def sendmod(client: Client, message: Message): if len(message.command) == 1: await message.edit( - "Module name to send is not provided", - parse_mode=enums.ParseMode.HTML, + "Module name to send is not provided" ) return - await message.edit("Dispatching...", parse_mode=enums.ParseMode.HTML) + await message.edit("Dispatching...") try: module_name = message.command[1].lower() if module_name in modules_help: @@ -50,12 +49,9 @@ async def sendmod(client: Client, message: Message): ) await message.delete() else: - await message.edit( - f"Module {module_name} not found!", - parse_mode=enums.ParseMode.HTML, - ) + await message.edit(f"Module {module_name} not found!") except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) modules_help["sendmod"] = { diff --git a/modules/sessionkiller.py b/modules/sessionkiller.py index 3a8ee00..c74a3b4 100644 --- a/modules/sessionkiller.py +++ b/modules/sessionkiller.py @@ -20,7 +20,7 @@ import time from datetime import datetime from html import escape -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram import ContinuePropagation from pyrogram.errors import RPCError from pyrogram.raw.functions.account import GetAuthorizations, ResetAuthorization @@ -30,7 +30,6 @@ from pyrogram.types import Message from utils.db import db from utils.misc import modules_help, prefix from textwrap import dedent -from datetime import datetime auth_hashes = db.get("core.sessionkiller", "auths_hashes", []) @@ -91,7 +90,7 @@ async def sessions_list(client: Client, message: Message): answer = "" chunk.clear() if len(chunk): - await message.reply("\n\n".join(chunk), parse_mode=enums.ParseMode.HTML) + await message.reply("\n\n".join(chunk)) await message.delete() @@ -103,16 +102,16 @@ async def sessionkiller(client: Client, message: Message): if db.get("core.sessionkiller", "enabled", False): await message.edit( "Sessionkiller status: enabled\n" - f"You can disable it with {prefix}sessionkiller disable", parse_mode=enums.ParseMode.HTML + f"You can disable it with {prefix}sessionkiller disable" ) else: await message.edit( "Sessionkiller status: disabled\n" - f"You can enable it with {prefix}sessionkiller enable", parse_mode=enums.ParseMode.HTML + f"You can enable it with {prefix}sessionkiller enable" ) elif message.command[1] in ["enable", "on", "1", "yes", "true"]: db.set("core.sessionkiller", "enabled", True) - await message.edit("Sessionkiller enabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Sessionkiller enabled!") db.set( "core.sessionkiller", "auths_hashes", @@ -126,10 +125,10 @@ async def sessionkiller(client: Client, message: Message): elif message.command[1] in ["disable", "off", "0", "no", "false"]: db.set("core.sessionkiller", "enabled", False) - await message.edit("Sessionkiller disabled!", parse_mode=enums.ParseMode.HTML) + await message.edit("Sessionkiller disabled!") else: await message.edit( - f"Usage: {prefix}sessionkiller [enable|disable]", parse_mode=enums.ParseMode.HTML + f"Usage: {prefix}sessionkiller [enable|disable]" ) @@ -189,7 +188,7 @@ async def check_new_login( # schedule sending report message so user will get notification schedule_date = int(time.time() + 15) await client.send_message( - "me", full_report, schedule_date=schedule_date, parse_mode=enums.ParseMode.HTML + "me", full_report, schedule_date=schedule_date ) return diff --git a/modules/sgb.py b/modules/sgb.py index 36f23da..08c0ad4 100644 --- a/modules/sgb.py +++ b/modules/sgb.py @@ -13,7 +13,7 @@ async def sg(client: Client, message: Message): if message.reply_to_message and message.reply_to_message.from_user: user_id = message.reply_to_message.from_user.id else: - await message.edit(f"Usage: {prefix}sgb [id]", parse_mode=enums.ParseMode.HTML) + await message.edit(f"Usage: {prefix}sgb [id]") return try: await client.send_message("@SangMata_beta_bot","/start", parse_mode=enums.ParseMode.MARKDOWN) diff --git a/modules/shell.py b/modules/shell.py index d0c76f5..0ee9fec 100644 --- a/modules/shell.py +++ b/modules/shell.py @@ -18,7 +18,7 @@ from subprocess import Popen, PIPE, TimeoutExpired import os from time import perf_counter -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -27,7 +27,7 @@ from utils.misc import modules_help, prefix @Client.on_message(filters.command(["shell", "sh"], prefix) & filters.me) async def shell(_, message: Message): if len(message.command) < 2: - return await message.edit("Specify the command in message text", parse_mode=enums.ParseMode.HTML) + return await message.edit("Specify the command in message text") cmd_text = message.text.split(maxsplit=1)[1] cmd_obj = Popen( cmd_text, @@ -40,7 +40,7 @@ async def shell(_, message: Message): char = "#" if os.getuid() == 0 else "$" text = f"{char} {cmd_text}\n\n" - await message.edit(text + "Running...", parse_mode=enums.ParseMode.HTML) + await message.edit(text + "Running...") try: start_time = perf_counter() stdout, stderr = cmd_obj.communicate(timeout=60) @@ -53,7 +53,7 @@ async def shell(_, message: Message): if stderr: text += f"Error:\n{stderr}\n\n" text += f"Completed in {round(stop_time - start_time, 5)} seconds with code {cmd_obj.returncode}" - await message.edit(text, parse_mode=enums.ParseMode.HTML) + await message.edit(text) cmd_obj.kill() diff --git a/modules/spam.py b/modules/spam.py index be1bc5e..deb8431 100644 --- a/modules/spam.py +++ b/modules/spam.py @@ -16,7 +16,7 @@ import asyncio -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -33,11 +33,11 @@ async def spam(client: Client, message: Message): await message.delete() - for msg in range(amount): + for _msg in range(amount): if message.reply_to_message: - sent = await message.reply_to_message.reply(text, parse_mode=enums.ParseMode.HTML) + sent = await message.reply_to_message.reply(text) else: - sent = await client.send_message(message.chat.id, text, parse_mode=enums.ParseMode.HTML) + sent = await client.send_message(message.chat.id, text) if message.command[0] == "statspam": await asyncio.sleep(0.1) diff --git a/modules/squotes.py b/modules/squotes.py index 44ac4c7..d516286 100644 --- a/modules/squotes.py +++ b/modules/squotes.py @@ -19,7 +19,7 @@ import os from io import BytesIO import requests -from pyrogram import Client, filters, errors, types, enums +from pyrogram import Client, filters, errors, types from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -65,9 +65,9 @@ async def quote_cmd(client: Client, message: Message): if send_for_me: await message.delete() - message = await client.send_message("me", "Generating...", parse_mode=enums.ParseMode.HTML) + message = await client.send_message("me", "Generating...") else: - await message.edit("Generating...", parse_mode=enums.ParseMode.HTML) + await message.edit("Generating...") url = "https://quotes.fl1yd.su/generate" params = { @@ -83,20 +83,20 @@ async def quote_cmd(client: Client, message: Message): response = requests.post(url, json=params) if not response.ok: return await message.edit( - f"Quotes API error!\n" f"{response.text}", parse_mode=enums.ParseMode.HTML + f"Quotes API error!\n" f"{response.text}" ) resized = resize_image( BytesIO(response.content), img_type="PNG" if is_png else "WEBP" ) - await message.edit("Sending...", parse_mode=enums.ParseMode.HTML) + await message.edit("Sending...") try: func = client.send_document if is_png else client.send_sticker chat_id = "me" if send_for_me else message.chat.id await func(chat_id, resized) except errors.RPCError as e: # no rights to send stickers, etc - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) else: await message.delete() @@ -117,7 +117,7 @@ async def fake_quote_cmd(client: Client, message: types.Message): ) if not fake_quote_text: - return await message.edit("Fake quote text is empty", parse_mode=enums.ParseMode.HTML) + return await message.edit("Fake quote text is empty") q_message = await client.get_messages( message.chat.id, message.reply_to_message.id @@ -129,9 +129,9 @@ async def fake_quote_cmd(client: Client, message: types.Message): if send_for_me: await message.delete() - message = await client.send_message("me", "Generating...", parse_mode=enums.ParseMode.HTML) + message = await client.send_message("me", "Generating...") else: - await message.edit("Generating...", parse_mode=enums.ParseMode.HTML) + await message.edit("Generating...") url = "https://quotes.fl1yd.su/generate" params = { @@ -143,20 +143,20 @@ async def fake_quote_cmd(client: Client, message: types.Message): response = requests.post(url, json=params) if not response.ok: return await message.edit( - f"Quotes API error!\n{response.text}", parse_mode=enums.ParseMode.HTML + f"Quotes API error!\n{response.text}" ) resized = resize_image( BytesIO(response.content), img_type="PNG" if is_png else "WEBP" ) - await message.edit("Sending...", parse_mode=enums.ParseMode.HTML) + await message.edit("Sending...") try: func = client.send_document if is_png else client.send_sticker chat_id = "me" if send_for_me else message.chat.id await func(chat_id, resized) except errors.RPCError as e: # no rights to send stickers, etc - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) else: await message.delete() diff --git a/modules/stickers.py b/modules/stickers.py index e10865a..6b4c32d 100644 --- a/modules/stickers.py +++ b/modules/stickers.py @@ -32,13 +32,13 @@ from utils.scripts import ( @Client.on_message(filters.command("kang", prefix) & filters.me) @with_reply async def kang(client: Client, message: types.Message): - await message.edit("Please wait...", parse_mode=enums.ParseMode.HTML) + await message.edit("Please wait...") if len(message.command) < 2: await message.edit( "No arguments provided\n" f"Usage: {prefix}kang [pack]* [emoji]", - parse_mode=enums.ParseMode.HTML + ) return @@ -54,12 +54,12 @@ async def kang(client: Client, message: types.Message): result = await interact_with(await client.send_message("@stickers", pack, parse_mode=enums.ParseMode.MARKDOWN)) if ".TGS" in result.text: - await message.edit("Animated packs aren't supported", parse_mode=enums.ParseMode.HTML) + await message.edit("Animated packs aren't supported") return if "StickerExample.psd" not in result.text: await message.edit( "Stickerpack doesn't exitst. Create it using @Stickers bot (via /newpack command)", - parse_mode=enums.ParseMode.HTML + ) return @@ -68,7 +68,7 @@ async def kang(client: Client, message: types.Message): except ValueError: await message.edit( "Replied message doesn't contain any downloadable media", - parse_mode=enums.ParseMode.HTML + ) return @@ -84,10 +84,10 @@ async def kang(client: Client, message: types.Message): await client.delete_messages("@stickers", interact_with_to_delete) await message.edit( f"Sticker added to pack", - parse_mode=enums.ParseMode.HTML + ) else: - await message.edit("Something went wrong. Check history with @stickers", parse_mode=enums.ParseMode.HTML) + await message.edit("Something went wrong. Check history with @stickers") interact_with_to_delete.clear() @@ -95,7 +95,7 @@ async def kang(client: Client, message: types.Message): @with_reply async def stick2png(client: Client, message: types.Message): try: - await message.edit("Downloading...", parse_mode=enums.ParseMode.HTML) + await message.edit("Downloading...") path = await message.reply_to_message.download() with open(path, "rb") as f: @@ -108,7 +108,7 @@ async def stick2png(client: Client, message: types.Message): await client.send_document(message.chat.id, file_io, parse_mode=enums.ParseMode.MARKDOWN) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) else: await message.delete() @@ -117,7 +117,7 @@ async def stick2png(client: Client, message: types.Message): @with_reply async def resize_cmd(client: Client, message: types.Message): try: - await message.edit("Downloading...", parse_mode=enums.ParseMode.HTML) + await message.edit("Downloading...") path = await message.reply_to_message.download() resized = resize_image(path) @@ -127,7 +127,7 @@ async def resize_cmd(client: Client, message: types.Message): await client.send_document(message.chat.id, resized, parse_mode=enums.ParseMode.MARKDOWN) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) else: await message.delete() diff --git a/modules/support.py b/modules/support.py index a4f02f5..4a4e898 100644 --- a/modules/support.py +++ b/modules/support.py @@ -13,7 +13,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message import random import datetime @@ -28,7 +28,7 @@ async def support(_, message: Message): commands_count = 0.0 for module in modules_help: - for cmd in module: + for _cmd in module: commands_count += 1 await message.edit( @@ -45,7 +45,6 @@ async def support(_, message: Message): f"Modules count: {len(modules_help) / 1}\n" f"Commands count: {commands_count}", disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) @@ -81,7 +80,6 @@ async def version(client: Client, message: Message): + f"Commit: " f"{gitrepo.head.commit.hexsha[:7]} by {gitrepo.head.commit.author.name}\n" f"Commit time: {commit_time}", - parse_mode=enums.ParseMode.HTML, ) diff --git a/modules/updater.py b/modules/updater.py index e9900cd..fb5f9d8 100644 --- a/modules/updater.py +++ b/modules/updater.py @@ -18,7 +18,7 @@ import os import sys import subprocess -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix, requirements_list @@ -39,11 +39,11 @@ async def restart_cmd(_, message: Message): ) if "LAVHOST" in os.environ: - await message.edit("Your lavHost is restarting...", parse_mode=enums.ParseMode.HTML) + await message.edit("Your lavHost is restarting...") os.system("lavhost restart") return - await message.edit("Restarting...", parse_mode=enums.ParseMode.HTML) + await message.edit("Restarting...") restart() @@ -60,11 +60,11 @@ async def update(_, message: Message): ) if "LAVHOST" in os.environ: - await message.edit("Your lavHost is updating...", parse_mode=enums.ParseMode.HTML) + await message.edit("Your lavHost is updating...") os.system("lavhost update") return - await message.edit("Updating...", parse_mode=enums.ParseMode.HTML) + await message.edit("Updating...") try: subprocess.run([sys.executable, "-m", "pip", "install", "-U", "pip"]) subprocess.run(["git", "pull"]) @@ -84,10 +84,10 @@ async def update(_, message: Message): [sys.executable, "-m", "pip", "install", "-U", *requirements_list] ) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) db.remove("core.updater", "restart_info") else: - await message.edit("Updating: done! Restarting...", parse_mode=enums.ParseMode.HTML) + await message.edit("Updating: done! Restarting...") restart() diff --git a/modules/upl.py b/modules/upl.py index 089e190..c8ad194 100644 --- a/modules/upl.py +++ b/modules/upl.py @@ -1,6 +1,6 @@ import os -from pyrogram import Client, enums, filters +from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix @@ -15,27 +15,25 @@ async def upl(client: Client, message: Message): link = message.reply_to_message.text else: await message.edit( - f"Usage: {prefix}upl [filepath to upload]", - parse_mode=enums.ParseMode.HTML, + f"Usage: {prefix}upl [filepath to upload]" ) return # Ensure that the link is an absolute path to a file on your local machine if not os.path.isfile(link): await message.edit( - f"Error: {link} is not a valid file path.", - parse_mode=enums.ParseMode.HTML, + f"Error: {link} is not a valid file path." ) return try: - await message.edit("Uploading Now...", parse_mode=enums.ParseMode.HTML) + await message.edit("Uploading Now...") await client.send_document( - message.chat.id, link, parse_mode=enums.ParseMode.HTML + message.chat.id, link ) await message.delete() except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) @Client.on_message(filters.command("uplr", prefix) & filters.me) @@ -46,27 +44,25 @@ async def uplr(client: Client, message: Message): link = message.reply_to_message.text else: await message.edit( - f"Usage: {prefix}upl [filepath to upload]", - parse_mode=enums.ParseMode.HTML, + f"Usage: {prefix}upl [filepath to upload]" ) return # Ensure that the link is an absolute path to a file on your local machine if not os.path.isfile(link): await message.edit( - f"Error: {link} is not a valid file path.", - parse_mode=enums.ParseMode.HTML, + f"Error: {link} is not a valid file path." ) return try: - await message.edit("Uploading Now...", parse_mode=enums.ParseMode.HTML) + await message.edit("Uploading Now...") await client.send_document( - message.chat.id, link, parse_mode=enums.ParseMode.HTML + message.chat.id, link ) await message.delete() except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) finally: if os.path.exists(link): os.remove(link) diff --git a/modules/url.py b/modules/url.py index e2282f1..9ac631f 100644 --- a/modules/url.py +++ b/modules/url.py @@ -55,15 +55,13 @@ async def short(_, message: Message): link = message.reply_to_message.text else: await message.edit( - f"Usage: {prefix}short [url to short]", - parse_mode=enums.ParseMode.HTML, + f"Usage: {prefix}short [url to short]" ) return r = http.request("GET", "https://clck.ru/--?url=" + link) await message.edit( r.data.decode().replace("https://", "Shortened Url:"), disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, ) @@ -77,8 +75,7 @@ async def urldl(client: Client, message: Message): link = message.reply_to_message.text else: await message.edit( - f"Usage: {prefix}urldl [url to download]", - parse_mode=enums.ParseMode.HTML, + f"Usage: {prefix}urldl [url to download]" ) return @@ -187,20 +184,19 @@ async def upload_cmd(_, message: Message): ) except ValueError: await message.edit( - "File to upload not found", parse_mode=enums.ParseMode.HTML + "File to upload not found" ) return if os.path.getsize(file_name) > max_size: await message.edit( - f"Files longer than {max_size_mb}MB isn't supported", - parse_mode=enums.ParseMode.HTML, + f"Files longer than {max_size_mb}MB isn't supported" ) if os.path.exists(file_name): os.remove(file_name) return - await message.edit("Uploading...", parse_mode=enums.ParseMode.HTML) + await message.edit("Uploading...") with open(file_name, "rb") as f: response = requests.post( "https://x0.at", @@ -216,13 +212,11 @@ async def upload_cmd(_, message: Message): url = response.text.replace("https://", "") await message.edit( f"Your URL: {url}\nYour file will remain live for {file_age} days", - disable_web_page_preview=True, - parse_mode=enums.ParseMode.HTML, + disable_web_page_preview=True ) else: await message.edit( - f"API returned an error!\n" f"{response.text}\n Not allowed", - parse_mode=enums.ParseMode.HTML, + f"API returned an error!\n" f"{response.text}\n Not allowed" ) print(response.text) if os.path.exists(file_name): @@ -241,8 +235,7 @@ async def webshot(client: Client, message: Message): url = "https://" + message.text.split(maxsplit=1)[1] else: await message.edit_text( - f"Usage: {prefix}webshot/{prefix}ws [url/reply to url]", - parse_mode=enums.ParseMode.HTML, + f"Usage: {prefix}webshot/{prefix}ws [url/reply to url]" ) return diff --git a/modules/user_info.py b/modules/user_info.py index d0b8a4a..a03a8f9 100644 --- a/modules/user_info.py +++ b/modules/user_info.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from pyrogram import Client, filters, enums +from pyrogram import Client, filters from pyrogram.raw import functions from pyrogram.types import Message @@ -50,12 +50,12 @@ async def get_user_inf(client: Client, message: Message): |-Deleted: {user.deleted} |-BIO: {about} """ - await message.edit(user_info, parse_mode=enums.ParseMode.HTML) + await message.edit(user_info) @Client.on_message(filters.command("inffull", prefix) & filters.me) async def get_full_user_inf(client: Client, message: Message): - await message.edit("Receiving the information...", parse_mode=enums.ParseMode.HTML) + await message.edit("Receiving the information...") try: if len(message.command) >= 2: @@ -73,7 +73,7 @@ async def get_full_user_inf(client: Client, message: Message): await client.unblock_user("@creationdatebot") try: response = await interact_with( - await client.send_message("creationdatebot", f"/id {user.id}", parse_mode=enums.ParseMode.HTML) + await client.send_message("creationdatebot", f"/id {user.id}") ) except RuntimeError: creation_date = "None" @@ -104,9 +104,9 @@ async def get_full_user_inf(client: Client, message: Message): |-Phone calls available: {full_user.phone_calls_available} |-Phone calls private: {full_user.phone_calls_private} |-Blocked: {full_user.blocked}""" - await message.edit(user_info, parse_mode=enums.ParseMode.HTML) + await message.edit(user_info) except Exception as e: - await message.edit(format_exc(e), parse_mode=enums.ParseMode.HTML) + await message.edit(format_exc(e)) modules_help["user_info"] = { "inf [reply|id|username]": "Get brief information about user", diff --git a/utils/handlers.py b/utils/handlers.py index bf9da2b..456b293 100644 --- a/utils/handlers.py +++ b/utils/handlers.py @@ -1,35 +1,37 @@ import re -from datetime import timedelta, datetime +from datetime import datetime, timedelta from typing import Dict, Union from pyrogram import Client, enums from pyrogram.errors import ( - UserAdminInvalid, ChatAdminRequired, PeerIdInvalid, + RPCError, + UserAdminInvalid, UsernameInvalid, ) from pyrogram.raw import functions, types from pyrogram.types import ( - Message, ChatPermissions, ChatPrivileges, - InputMediaPhoto, - InputMediaVideo, InputMediaAudio, InputMediaDocument, + InputMediaPhoto, + InputMediaVideo, + Message, ) from pyrogram.utils import ( - get_channel_id, - MAX_USER_ID, - MIN_CHAT_ID, MAX_CHANNEL_ID, + MAX_USER_ID, MIN_CHANNEL_ID, + MIN_CHAT_ID, + get_channel_id, ) from utils.db import db -from utils.scripts import text, format_exc from utils.misc import prefix +from utils.scripts import format_exc, text + async def check_username_or_id(data: Union[str, int]) -> str: data = str(data) @@ -54,6 +56,7 @@ async def check_username_or_id(data: Union[str, int]) -> str: raise ValueError(f"Peer id invalid: {peer_id}") + async def get_user_and_name(message): if message.reply_to_message.from_user: return ( @@ -66,6 +69,7 @@ async def get_user_and_name(message): message.reply_to_message.sender_chat.title, ) + class BanHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -93,7 +97,11 @@ class BanHandler: if len(self.cause.split()) > 1: user_to_ban = await self.get_user_to_ban() if user_to_ban: - self.name = user_to_ban.first_name if getattr(user_to_ban, "first_name", None) else user_to_ban.title + self.name = ( + user_to_ban.first_name + if getattr(user_to_ban, "first_name", None) + else user_to_ban.title + ) await self.ban_user(user_to_ban.id) async def get_user_to_ban(self): @@ -144,10 +152,10 @@ class BanHandler: ) await self.message.edit( f"{self.name} banned!" - + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}", - parse_mode=enums.ParseMode.HTML, + + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}" ) + class UnbanHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -175,7 +183,11 @@ class UnbanHandler: if len(self.cause.split()) > 1: user_to_unban = await self.get_user_to_unban() if user_to_unban: - self.name = user_to_unban.first_name if getattr(user_to_unban, "first_name", None) else user_to_unban.title + self.name = ( + user_to_unban.first_name + if getattr(user_to_unban, "first_name", None) + else user_to_unban.title + ) await self.unban_user(user_to_unban.id) async def get_user_to_unban(self): @@ -209,10 +221,10 @@ class UnbanHandler: ) await self.message.edit( f"{self.name} unbanned!" - + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}", - parse_mode=enums.ParseMode.HTML, + + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}" ) + class KickHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -242,7 +254,11 @@ class KickHandler: if len(self.cause.split()) > 1: user_to_kick = await self.get_user_to_kick() if user_to_kick: - self.name = user_to_kick.first_name if getattr(user_to_kick, "first_name", None) else user_to_kick.title + self.name = ( + user_to_kick.first_name + if getattr(user_to_kick, "first_name", None) + else user_to_kick.title + ) await self.kick_user(user_to_kick.id) else: await self.message.edit("user_id or username") @@ -304,10 +320,10 @@ class KickHandler: ) await self.message.edit( f"{self.name} kicked!" - + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}", - parse_mode=enums.ParseMode.HTML, + + f"\n{'Cause: ' + text_c.split(maxsplit=1)[1] + '' if len(text_c.split()) > 1 else ''}" ) + class KickDeletedAccountsHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -326,19 +342,17 @@ class KickDeletedAccountsHandler: return await self.message.edit(format_exc(e)) await self.message.edit( f"Successfully kicked {self.kicked_count} deleted account(s)", - parse_mode=enums.ParseMode.HTML ) async def kick_member(self, user_id): try: await self.client.ban_chat_member( - self.chat_id, - user_id, - datetime.now() + timedelta(seconds=31) + self.chat_id, user_id, datetime.now() + timedelta(seconds=31) ) except Exception as e: await self.message.edit(f"Failed to kick user {user_id}: {format_exc(e)}") + class TimeMuteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -366,7 +380,6 @@ class TimeMuteHandler: await self.message.edit( f"{name} in tmute" + f"\n{'Cause: ' + self.cause.split(maxsplit=1)[1] + '' if len(self.cause.split()) > 1 else ''}", - parse_mode=enums.ParseMode.HTML ) async def handle_non_reply_tmute(self): @@ -374,19 +387,21 @@ class TimeMuteHandler: if len(self.cause.split()) > 1: user_to_tmute = await self.get_user_to_tmute() if user_to_tmute: - name = user_to_tmute.first_name if getattr(user_to_tmute, "first_name", None) else user_to_tmute.title + name = ( + user_to_tmute.first_name + if getattr(user_to_tmute, "first_name", None) + else user_to_tmute.title + ) if user_to_tmute.id not in self.tmuted_users: self.tmuted_users.append(user_to_tmute.id) db.set("core.ats", f"c{self.chat_id}", self.tmuted_users) await self.message.edit( f"{name} in tmute" + f"\n{'Cause: ' + self.cause.split(maxsplit=2)[2] + '' if len(self.cause.split()) > 2 else ''}", - parse_mode=enums.ParseMode.HTML ) else: await self.message.edit( f"{name} already in tmute", - parse_mode=enums.ParseMode.HTML ) else: await self.message.edit("user_id or username") @@ -401,6 +416,7 @@ class TimeMuteHandler: await self.message.edit("Invalid user type") return None + class TimeUnmuteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -428,7 +444,6 @@ class TimeUnmuteHandler: await self.message.edit( f"{name} tunmuted" + f"\n{'Cause: ' + self.cause.split(maxsplit=1)[1] + '' if len(self.cause.split()) > 1 else ''}", - parse_mode=enums.ParseMode.HTML ) async def handle_non_reply_tunmute(self): @@ -436,11 +451,14 @@ class TimeUnmuteHandler: if len(self.cause.split()) > 1: user_to_tunmute = await self.get_user_to_tunmute() if user_to_tunmute: - name = user_to_tunmute.first_name if getattr(user_to_tunmute, "first_name", None) else user_to_tunmute.title + name = ( + user_to_tunmute.first_name + if getattr(user_to_tunmute, "first_name", None) + else user_to_tunmute.title + ) if user_to_tunmute.id not in self.tmuted_users: await self.message.edit( f"{name} not in tmute", - parse_mode=enums.ParseMode.HTML ) else: self.tmuted_users.remove(user_to_tunmute.id) @@ -448,7 +466,6 @@ class TimeUnmuteHandler: await self.message.edit( f"{name} tunmuted" + f"\n{'Cause: ' + self.cause.split(maxsplit=2)[2] + '' if len(self.cause.split()) > 2 else ''}", - parse_mode=enums.ParseMode.HTML ) else: await self.message.edit("user_id or username") @@ -463,6 +480,7 @@ class TimeUnmuteHandler: await self.message.edit("Invalid user type") return None + class TimeMuteUsersHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -486,7 +504,7 @@ class TimeMuteUsersHandler: await self.message.edit("No users in tmute") else: text += f"\nTotal users in tmute {count}" - await self.message.edit(text, parse_mode=enums.ParseMode.HTML) + await self.message.edit(text) else: await self.message.edit("Unsupported") @@ -511,6 +529,7 @@ class TimeMuteUsersHandler: except PeerIdInvalid: return None + class UnmuteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -589,6 +608,7 @@ class UnmuteHandler: except Exception as e: await self.message.edit(format_exc(e)) + class MuteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -611,7 +631,9 @@ class MuteHandler: mute_seconds = self.calculate_mute_seconds() try: await self.mute_user(user_for_mute.id, mute_seconds) - await self.message.edit(self.construct_mute_message(user_for_mute, mute_seconds)) + await self.message.edit( + self.construct_mute_message(user_for_mute, mute_seconds) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -629,7 +651,9 @@ class MuteHandler: mute_seconds = self.calculate_mute_seconds() try: await self.mute_user(user_to_mute.id, mute_seconds) - await self.message.edit(self.construct_mute_message(user_to_mute, mute_seconds)) + await self.message.edit( + self.construct_mute_message(user_to_mute, mute_seconds) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -702,6 +726,7 @@ class MuteHandler: message_text = message_text.replace(" ", " ") return message_text + class DemoteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -736,7 +761,9 @@ class DemoteHandler: if user_for_demote: try: await self.demote_user(user_for_demote.id) - await self.message.edit(self.construct_demote_message(user_for_demote)) + await self.message.edit( + self.construct_demote_message(user_for_demote) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -753,7 +780,9 @@ class DemoteHandler: if user_to_demote: try: await self.demote_user(user_to_demote.id) - await self.message.edit(self.construct_demote_message(user_to_demote)) + await self.message.edit( + self.construct_demote_message(user_to_demote) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -791,6 +820,7 @@ class DemoteHandler: + f"\n{'Cause: ' + self.cause.split(' ', maxsplit=2)[2] + '' if len(self.cause.split()) > 2 else ''}" ) + class PromoteHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -818,7 +848,9 @@ class PromoteHandler: if user_for_promote: try: await self.promote_user(user_for_promote.id) - await self.message.edit(self.construct_promote_message(user_for_promote)) + await self.message.edit( + self.construct_promote_message(user_for_promote) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -835,7 +867,9 @@ class PromoteHandler: if user_to_promote: try: await self.promote_user(user_to_promote.id) - await self.message.edit(self.construct_promote_message(user_to_promote)) + await self.message.edit( + self.construct_promote_message(user_to_promote) + ) except UserAdminInvalid: await self.message.edit("No rights") except ChatAdminRequired: @@ -880,6 +914,7 @@ class PromoteHandler: + f"\n{'Prefix: ' + self.cause.split(' ', maxsplit=1)[1] + '' if len(self.cause.split()) > 1 else ''}" ) + class AntiChannelsHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -900,7 +935,9 @@ class AntiChannelsHandler: elif command[1] in ["disable", "off", "0", "no", "false"]: await self.disable_anti_channels() else: - await self.message.edit(f"Usage: {self.prefix}antich [enable|disable]") + await self.message.edit( + f"Usage: {self.prefix}antich [enable|disable]" + ) async def toggle_anti_channels_status(self): current_status = db.get("core.ats", f"antich{self.chat_id}", False) @@ -924,6 +961,7 @@ class AntiChannelsHandler: db.set("core.ats", f"antich{self.chat_id}", False) await self.message.edit("Blocking channels in this chat disabled.") + class DeleteHistoryHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -960,7 +998,11 @@ class DeleteHistoryHandler: try: user_to_delete = await self.get_user_to_delete() if user_to_delete: - name = user_to_delete.first_name if getattr(user_to_delete, "first_name", None) else user_to_delete.title + name = ( + user_to_delete.first_name + if getattr(user_to_delete, "first_name", None) + else user_to_delete.title + ) await self.delete_user_history(user_to_delete.id, name) else: await self.message.edit("User is not found") @@ -1003,6 +1045,7 @@ class DeleteHistoryHandler: except Exception as e: await self.message.edit(format_exc(e)) + class AntiRaidHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -1053,6 +1096,7 @@ class AntiRaidHandler: else: await self.message.edit("Anti-raid mode disabled") + class NoteSendHandler: def __init__(self, client: Client, message: Message): self.client = client @@ -1062,26 +1106,24 @@ class NoteSendHandler: async def handle_note_send(self): if len(self.message.text.split()) >= 2: - await self.message.edit("Loading...", parse_mode=enums.ParseMode.HTML) + await self.message.edit("Loading...") note_name = self.message.text.split(maxsplit=1)[1] find_note = db.get("core.notes", f"note{note_name}", False) if find_note: try: await self.send_note(find_note) - except errors.RPCError: + except RPCError: await self.message.edit( "Sorry, but this note is unavailable.\n\n" f"You can delete this note with " - f"{self.prefix}clear {note_name}", - parse_mode=enums.ParseMode.HTML + f"{self.prefix}clear {note_name}" ) else: - await self.message.edit("There is no such note", parse_mode=enums.ParseMode.HTML) + await self.message.edit("There is no such note") else: await self.message.edit( f"Example: {self.prefix}note note_name", - parse_mode=enums.ParseMode.HTML ) async def send_note(self, find_note): @@ -1102,12 +1144,9 @@ class NoteSendHandler: self.message.chat.id, media_grouped_list, reply_to_message_id=self.message.reply_to_message.id, - parse_mode=enums.ParseMode.HTML, ) else: - await self.client.send_media_group( - self.message.chat.id, media_grouped_list - ) + await self.client.send_media_group(self.message.chat.id, media_grouped_list) async def copy_message(self, find_note): if self.message.reply_to_message: @@ -1154,7 +1193,9 @@ class NoteSendHandler: else: return InputMediaVideo(message.video.file_id, message.caption.markdown) elif message.video.thumbs: - return InputMediaVideo(message.video.file_id, message.video.thumbs[0].file_id) + return InputMediaVideo( + message.video.file_id, message.video.thumbs[0].file_id + ) else: return InputMediaVideo(message.video.file_id) @@ -1173,8 +1214,12 @@ class NoteSendHandler: message.caption.markdown, ) else: - return InputMediaDocument(message.document.file_id, message.caption.markdown) + return InputMediaDocument( + message.document.file_id, message.caption.markdown + ) elif message.document.thumbs: - return InputMediaDocument(message.document.file_id, message.document.thumbs[0].file_id) + return InputMediaDocument( + message.document.file_id, message.document.thumbs[0].file_id + ) else: - return InputMediaDocument(message.document.file_id) \ No newline at end of file + return InputMediaDocument(message.document.file_id) diff --git a/utils/scripts.py b/utils/scripts.py index 941cb0e..0012d7f 100644 --- a/utils/scripts.py +++ b/utils/scripts.py @@ -14,24 +14,23 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import logging +import asyncio +import importlib import math -import time import os import re -import sys -import asyncio -import traceback -import importlib +import shlex import subprocess +import sys +import time +import traceback from io import BytesIO from types import ModuleType from typing import Dict, Tuple -import shlex from PIL import Image +from pyrogram import Client, errors, types from pyrogram.errors import FloodWait, MessageNotModified -from pyrogram import Client, errors, types, enums from pyrogram.types import Message from .misc import modules_help, prefix, requirements_list @@ -39,6 +38,7 @@ from .misc import modules_help, prefix, requirements_list META_COMMENTS = re.compile(r"^ *# *meta +(\S+) *: *(.*?)\s*$", re.MULTILINE) interact_with_to_delete = [] + def time_formatter(milliseconds: int) -> str: """Time Formatter""" seconds, milliseconds = divmod(int(milliseconds), 1000) @@ -54,11 +54,12 @@ def time_formatter(milliseconds: int) -> str: ) return tmp[:-2] + def humanbytes(size): """Convert Bytes To Bytes So That Human Can Read It""" if not size: return "" - power = 2 ** 10 + power = 2**10 raised_to_pow = 0 dict_power_n = {0: "", 1: "Ki", 2: "Mi", 3: "Gi", 4: "Ti"} while size > power: @@ -66,20 +67,20 @@ def humanbytes(size): raised_to_pow += 1 return str(round(size, 2)) + " " + dict_power_n[raised_to_pow] + "B" + async def edit_or_send_as_file( text: str, message: Message, client: Client, - caption: str = "`Result!`", + caption: str = "Result!", file_name: str = "result", - parse_mode=enums.ParseMode.MARKDOWN, ): """Send As File If Len Of Text Exceeds Tg Limit Else Edit Message""" if not text: - await message.edit("`Wait, What?`", parse_mode=enums.ParseMode.MARKDOWN) + await message.edit("Wait, What?") return if len(text) > 1024: - await message.edit("`OutPut is Too Large, Sending As File!`", parse_mode=enums.ParseMode.MARKDOWN) + await message.edit("OutPut is Too Large, Sending As File!") file_names = f"{file_name}.text" open(file_names, "w").write(text) await client.send_document(message.chat.id, file_names, caption=caption) @@ -88,7 +89,8 @@ async def edit_or_send_as_file( os.remove(file_names) return else: - return await message.edit(text, parse_mode=parse_mode) + return await message.edit(text) + def get_text(message: Message) -> [None, str]: """Extract Text From Commands""" @@ -103,6 +105,7 @@ def get_text(message: Message) -> [None, str]: else: return None + async def progress(current, total, message, start, type_of_ps, file_name=None): """Progress Bar For Showing Progress While Uploading / Downloading File - Normal""" now = time.time() @@ -126,7 +129,7 @@ async def progress(current, total, message, start, type_of_ps, file_name=None): if file_name: try: await message.edit( - "{}\n**File Name:** `{}`\n{}".format(type_of_ps, file_name, tmp, parse_mode=enums.ParseMode.MARKDOWN) + "{}\nFile Name: {}\n{}".format(type_of_ps, file_name, tmp) ) except FloodWait as e: await asyncio.sleep(e.x) @@ -134,12 +137,13 @@ async def progress(current, total, message, start, type_of_ps, file_name=None): pass else: try: - await message.edit("{}\n{}".format(type_of_ps, tmp), parse_mode=enums.ParseMode.MARKDOWN) + await message.edit("{}\n{}".format(type_of_ps, tmp)) except FloodWait as e: await asyncio.sleep(e.x) except MessageNotModified: pass + async def run_cmd(prefix: str) -> Tuple[str, str, int, int]: """Run Commands""" args = shlex.split(prefix) @@ -154,6 +158,7 @@ async def run_cmd(prefix: str) -> Tuple[str, str, int, int]: process.pid, ) + def mediainfo(media): xx = str((str(media)).split("(", maxsplit=1)[0]) m = "" @@ -188,13 +193,15 @@ def mediainfo(media): m = "web" return m -async def edit_or_reply(message, text, parse_mode=enums.ParseMode.MARKDOWN): + +async def edit_or_reply(message, text): """Edit Message If Its From Self, Else Reply To Message""" if not message: - return await message.edit(text, parse_mode=parse_mode) + return await message.edit(text) if not message.from_user: - return await message.edit(text, parse_mode=parse_mode) - return await message.edit(text, parse_mode=parse_mode) + return await message.edit(text) + return await message.edit(text) + def text(message: types.Message) -> str: """Find text in `types.Message` object""" @@ -213,16 +220,13 @@ def format_exc(e: Exception, suffix="") -> str: f"Telegram API error!\n" f"[{e.CODE} {e.ID or e.NAME}] — {e.MESSAGE.format(value=e.value)}\n\n{suffix}" ) - return ( - f"Error!\n" - f"{err}" - ) + return f"Error!\n" f"{err}" def with_reply(func): async def wrapped(client: Client, message: types.Message): if not message.reply_to_message: - await message.edit("Reply to message is required", parse_mode=enums.ParseMode.HTML) + await message.edit("Reply to message is required") else: return await func(client, message) @@ -243,10 +247,7 @@ async def interact_with(message: types.Message) -> types.Message: await asyncio.sleep(1) # noinspection PyProtectedMember response = [ - msg - async for msg in message._client.get_chat_history( - message.chat.id, limit=1 - ) + msg async for msg in message._client.get_chat_history(message.chat.id, limit=1) ] seconds_waiting = 0 @@ -259,9 +260,7 @@ async def interact_with(message: types.Message) -> types.Message: # noinspection PyProtectedMember response = [ msg - async for msg in message._client.get_chat_history( - message.chat.id, limit=1 - ) + async for msg in message._client.get_chat_history(message.chat.id, limit=1) ] interact_with_to_delete.append(message.id) @@ -274,9 +273,7 @@ def format_module_help(module_name: str, full=True): commands = modules_help[module_name] help_text = ( - f"Help for |{module_name}|\n\nUsage:\n" - if full - else "Usage:\n" + f"Help for |{module_name}|\n\nUsage:\n" if full else "Usage:\n" ) for command, desc in commands.items(): @@ -295,13 +292,11 @@ def format_small_module_help(module_name: str, full=True): if full else "Commands list:\n" ) - for command, desc in commands.items(): + for command, _desc in commands.items(): cmd = command.split(maxsplit=1) args = " " + cmd[1] + "" if len(cmd) > 1 else "" help_text += f"{prefix}{cmd[0]}{args}\n" - help_text += ( - f"\nGet full usage: {prefix}help {module_name}" - ) + help_text += f"\nGet full usage: {prefix}help {module_name}" return help_text @@ -319,15 +314,14 @@ def import_library(library_name: str, package_name: str = None): try: return importlib.import_module(library_name) - except ImportError: + except ImportError as exc: completed = subprocess.run( [sys.executable, "-m", "pip", "install", package_name] ) if completed.returncode != 0: raise AssertionError( - f"Failed to install library {package_name} (pip exited with code {completed.returncode})", - parse_mode=enums.ParseMode.HTML - ) + f"Failed to install library {package_name} (pip exited with code {completed.returncode})" + ) from exc return importlib.import_module(library_name) @@ -384,10 +378,7 @@ async def load_module( raise if message: - await message.edit( - f"Installing requirements: {' '.join(packages)}", - parse_mode=enums.ParseMode.HTML - ) + await message.edit(f"Installing requirements: {' '.join(packages)}") proc = await asyncio.create_subprocess_exec( sys.executable, @@ -401,10 +392,7 @@ async def load_module( await asyncio.wait_for(proc.wait(), timeout=120) except asyncio.TimeoutError: if message: - await message.edit( - "Timeout while installed requirements. Try to install them manually", - parse_mode=enums.ParseMode.HTML - ) + await message.edit("Timeout while installed requirements. Try to install them manually") raise TimeoutError("timeout while installing requirements") from e if proc.returncode != 0: @@ -412,14 +400,13 @@ async def load_module( await message.edit( f"Failed to install requirements (pip exited with code {proc.returncode}). " f"Check logs for futher info", - parse_mode=enums.ParseMode.HTML ) raise RuntimeError("failed to install requirements") from e module = importlib.import_module(path) - for name, obj in vars(module).items(): - if type(getattr(obj, "handlers", [])) == list: + for _name, obj in vars(module).items(): + if isinstance(getattr(obj, "handlers", []), list): for handler, group in getattr(obj, "handlers", []): client.add_handler(handler, group) @@ -435,7 +422,7 @@ async def unload_module(module_name: str, client: Client) -> bool: module = importlib.import_module(path) - for name, obj in vars(module).items(): + for _name, obj in vars(module).items(): for handler, group in getattr(obj, "handlers", []): client.remove_handler(handler, group) @@ -451,4 +438,15 @@ def parse_meta_comments(code: str) -> Dict[str, str]: except AttributeError: return {} - return {groups[i]: groups[i + 1] for i in range(0, len(groups), 2)} \ No newline at end of file + return {groups[i]: groups[i + 1] for i in range(0, len(groups), 2)} + +def ReplyCheck(message: Message): + reply_id = None + + if message.reply_to_message: + reply_id = message.reply_to_message.id + + elif not message.from_user.is_self: + reply_id = message.id + + return reply_id