diff --git a/modules/admintool.py b/modules/admintool.py index 64727d5..7ca2ae5 100644 --- a/modules/admintool.py +++ b/modules/admintool.py @@ -16,6 +16,7 @@ from contextlib import suppress +from pyrogram.enums import ChatType from pyrogram import Client, ContinuePropagation, filters from pyrogram.errors import ( UserAdminInvalid, @@ -234,7 +235,7 @@ async def unpin(_, message: Message): @Client.on_message(filters.command("ro", prefix) & filters.me) async def ro(client: Client, message: Message): - if message.chat.type != "supergroup": + if message.chat.type not in [ChatType.GROUP, ChatType.SUPERGROUP]: await message.edit("Invalid chat type") return @@ -266,7 +267,7 @@ async def ro(client: Client, message: Message): @Client.on_message(filters.command("unro", prefix) & filters.me) async def unro(client: Client, message: Message): - if message.chat.type != "supergroup": + if message.chat.type not in [ChatType.GROUP, ChatType.SUPERGROUP]: await message.edit("Invalid chat type") return @@ -308,7 +309,7 @@ async def antiraid(client: Client, message: Message): @Client.on_message(filters.command(["welcome", "wc"], prefix) & filters.me) async def welcome(_, message: Message): - if message.chat.type != "supergroup": + if message.chat.type not in [ChatType.GROUP, ChatType.SUPERGROUP]: return await message.edit("Unsupported chat type") if len(message.command) > 1: diff --git a/utils/handlers.py b/utils/handlers.py index f5da869..cdf97e4 100644 --- a/utils/handlers.py +++ b/utils/handlers.py @@ -19,6 +19,7 @@ from datetime import datetime, timedelta from typing import Dict, Union from pyrogram import Client +from pyrogram.enums import ChatType from pyrogram.errors import ( ChatAdminRequired, PeerIdInvalid, @@ -103,7 +104,7 @@ class BanHandler: await self.message.edit("Unsupported") async def handle_reply_ban(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_ban, self.name = await get_user_and_name(self.message) await self.ban_user(user_for_ban) @@ -190,7 +191,7 @@ class UnbanHandler: await self.message.edit("Unsupported") async def handle_reply_unban(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_unban, self.name = await get_user_and_name(self.message) await self.unban_user(user_for_unban) @@ -260,14 +261,15 @@ class KickHandler: await self.message.edit("Unsupported") async def handle_reply_kick(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if self.message.reply_to_message.from_user: + self.name = self.message.reply_to_message.from_user.first_name await self.kick_user(self.message.reply_to_message.from_user.id) else: await self.message.edit("Reply on user msg") async def handle_non_reply_kick(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_kick = await self.get_user_to_kick() if user_to_kick: @@ -299,11 +301,7 @@ class KickHandler: self.channel = await self.client.resolve_peer(self.message.chat.id) self.user_id = await self.client.resolve_peer(user_id) await self.handle_additional_actions() - await self.client.unban_chat_member( - self.message.chat.id, - user_id, - datetime.now() + timedelta(minutes=1), - ) + await self.client.unban_chat_member(self.message.chat.id, user_id) await self.edit_message() except UserAdminInvalid: await self.message.edit("No rights") @@ -386,7 +384,7 @@ class TimeMuteHandler: await self.message.edit("Unsupported") async def handle_reply_tmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_tmute, name = await get_user_and_name(self.message) if user_for_tmute in self.tmuted_users: await self.message.edit(f"{name} already in tmute") @@ -399,7 +397,7 @@ class TimeMuteHandler: ) async def handle_non_reply_tmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_tmute = await self.get_user_to_tmute() if user_to_tmute: @@ -449,7 +447,7 @@ class TimeUnmuteHandler: await self.message.edit("Unsupported") async def handle_reply_tunmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_tunmute, name = await get_user_and_name(self.message) if user_for_tunmute not in self.tmuted_users: await self.message.edit(f"{name} not in tmute") @@ -462,7 +460,7 @@ class TimeUnmuteHandler: ) async def handle_non_reply_tunmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_tunmute = await self.get_user_to_tunmute() if user_to_tunmute: @@ -503,7 +501,7 @@ class TimeMuteUsersHandler: self.tmuted_users = db.get("core.ats", f"c{self.chat_id}", []) async def list_tmuted_users(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: text = f"All users {self.message.chat.title} who are now in tmute\n\n" count = 0 for user in self.tmuted_users: @@ -561,7 +559,7 @@ class UnmuteHandler: await self.message.edit("Unsupported") async def handle_reply_unmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_unmute = self.message.reply_to_message.from_user if user_for_unmute: try: @@ -580,7 +578,7 @@ class UnmuteHandler: await self.message.edit("Reply on user msg") async def handle_non_reply_unmute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_unmute = await self.get_user_to_unmute() if user_to_unmute: @@ -638,7 +636,7 @@ class MuteHandler: await self.message.edit("Unsupported") async def handle_reply_mute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_mute = self.message.reply_to_message.from_user if user_for_mute: mute_seconds = self.calculate_mute_seconds() @@ -657,7 +655,7 @@ class MuteHandler: await self.message.edit("Reply on user msg") async def handle_non_reply_mute(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_mute = await self.get_user_to_mute() if user_to_mute: @@ -734,8 +732,7 @@ class MuteHandler: f" {((str(mute_time['minutes']) + ' minute') if mute_time['minutes'] > 0 else '') + ('s' if mute_time['minutes'] > 1 else '')}" + f"\n{'Cause: ' + self.cause.split(' ', maxsplit=2)[2] + '' if len(self.cause.split()) > 2 else ''}" ) - while " " in message_text: - message_text = message_text.replace(" ", " ") + message_text = " ".join(message_text.split()) return message_text @@ -768,7 +765,7 @@ class DemoteHandler: await self.message.edit("Unsupported") async def handle_reply_demote(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_demote = self.message.reply_to_message.from_user if user_for_demote: try: @@ -786,7 +783,7 @@ class DemoteHandler: await self.message.edit("Reply on user msg") async def handle_non_reply_demote(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_demote = await self.get_user_to_demote() if user_to_demote: @@ -822,6 +819,10 @@ class DemoteHandler: user_id, privileges=ChatPrivileges(**self.common_privileges_demote), ) + except UserAdminInvalid: + raise UserAdminInvalid() + except ChatAdminRequired: + raise ChatAdminRequired() except Exception as e: await self.message.edit(format_exc(e)) @@ -854,7 +855,7 @@ class PromoteHandler: await self.message.edit("Unsupported") async def handle_reply_promote(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: user_for_promote = self.message.reply_to_message.from_user if user_for_promote: try: @@ -872,7 +873,7 @@ class PromoteHandler: await self.message.edit("Reply on user msg") async def handle_non_reply_promote(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if len(self.cause.split()) > 1: user_to_promote = await self.get_user_to_promote() if user_to_promote: @@ -914,6 +915,10 @@ class PromoteHandler: user_id, self.cause.split(maxsplit=1)[1], ) + except UserAdminInvalid: + raise UserAdminInvalid() + except ChatAdminRequired: + raise ChatAdminRequired() except Exception as e: await self.message.edit(format_exc(e)) @@ -932,7 +937,7 @@ class AntiChannelsHandler: self.prefix = prefix async def handle_anti_channels(self): - if self.message.chat.type != "group": + if self.message.chat.type not in [ChatType.GROUP, ChatType.SUPERGROUP]: await self.message.edit("Not supported in non-group chats") return @@ -980,7 +985,7 @@ class DeleteHistoryHandler: self.prefix = prefix async def handle_delete_history(self): - if self.message.chat.type not in ["private", "channel"]: + if self.message.chat.type not in [ChatType.PRIVATE, ChatType.CHANNEL]: if self.message.reply_to_message: await self.handle_reply_delete_history() elif not self.message.reply_to_message: