from random import choice from traceback import format_exc from pyrogram import enums from pyrogram.errors import (ChatAdminRequired, PeerIdInvalid, RightForbidden, RPCError, UserAdminInvalid, UserNotParticipant) from pyrogram.filters import regex from pyrogram.types import (CallbackQuery, ChatPrivileges, InlineKeyboardButton, InlineKeyboardMarkup, Message) from Powers import LOGGER, MESSAGE_DUMP, OWNER_ID from Powers.bot_class import Gojo from Powers.supports import get_support_staff from Powers.utils.caching import ADMIN_CACHE, admin_cache_reload from Powers.utils.custom_filters import command, restrict_filter from Powers.utils.extract_user import extract_user from Powers.utils.extras import BAN_GIFS, KICK_GIFS from Powers.utils.parser import mention_html from Powers.utils.string import extract_time @Gojo.on_message(command("tban") & restrict_filter) async def tban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() try: user_id, user_first_name, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to ban") return if user_id == c.me.id: await m.reply_text("WTF?? Why would I ban myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() r_id = m.reply_to_message.id if m.reply_to_message else m.id if m.reply_to_message and len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] elif not m.reply_to_message and len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] else: await m.reply_text("Read /help !!") return if not reason: await m.reply_text("You haven't specified a time to ban this user for!") return split_reason = reason.split(None, 1) time_val = split_reason[0].lower() reason = split_reason[1] if len(split_reason) > 1 else "" bantime = await extract_time(m, time_val) if not bantime: return try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() try: admin = await mention_html(m.from_user.first_name, m.from_user.id) banned = await mention_html(user_first_name, user_id) chat_title = m.chat.title await m.chat.ban_member( user_id, until_date=bantime) t_t = f"{admin} banned {banned} in {chat_title}!", txt = t_t if type(t_t) is tuple: txt = t_t[ 0] # Done this bcuz idk why t_t is tuple type data. SO now if it is tuple this will get text from it if reason: txt += f"\nReason: {reason}" if time_val: txt += f"\nBanned for:{time_val}" keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Unban", callback_data=f"unban_={user_id}", ), ], ], ) anim = choice(BAN_GIFS) try: await m.reply_animation( reply_to_message_id=r_id, animation=str(anim), caption=txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) except Exception: await m.reply_text( reply_to_message_id=r_id, text=txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) await c.send_message(MESSAGE_DUMP, f"#REMOVE from BAN_GFIS\n{anim}") # await m.reply_text(txt, reply_markup=keyboard, # reply_to_message_id=r_id) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except UserNotParticipant: await m.reply_text("User is not part of the group") except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except RPCError as ef: await m.reply_text( ( f"""Some error occured, report it using `/bug` Error: {ef}""" ) ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("stban") & restrict_filter) async def stban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() try: user_id, _, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to ban") return if user_id == c.me.id: await m.reply_text("What the heck? Why would I ban myself?") await m.stop_propagation() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() if m.reply_to_message and len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] elif not m.reply_to_message and len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] else: await m.reply_text("Read /help !!") return if not reason: await m.reply_text("You haven't specified a time to ban this user for!") return split_reason = reason.split(None, 1) time_val = split_reason[0].lower() reason = split_reason[1] if len(split_reason) > 1 else "" bantime = await extract_time(m, time_val) if not bantime: return try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() try: await m.chat.ban_member(user_id, until_date=bantime) await m.delete() if m.reply_to_message: await m.reply_to_message.delete() return return except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except UserNotParticipant: await m.reply_text("User is not part of the group") except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("dtban") & restrict_filter) async def dtban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() if not m.reply_to_message: await m.reply_text( "Reply to a message with this command to temp ban and delete the message.", ) await m.stop_propagation() user_id = m.reply_to_message.from_user.id user_first_name = m.reply_to_message.from_user.first_name if not user_id: await m.reply_text("Cannot find user to ban") return if user_id == c.me.id: await m.reply_text("Huh, why would I ban myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text(text="I am not going to ban one of my support staff") await m.stop_propagation() if m.reply_to_message and len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] elif not m.reply_to_message and len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] else: await m.reply_text("Read /help !!") return if not reason: await m.reply_text("You haven't specified a time to ban this user for!") return split_reason = reason.split(None, 1) time_val = split_reason[0].lower() reason = split_reason[1] if len(split_reason) > 1 else "" bantime = await extract_time(m, time_val) if not bantime: return try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() try: admin = await mention_html(m.from_user.first_name, m.from_user.id) banned = await mention_html(user_first_name, user_id) chat_title = m.chat.title await m.chat.ban_member(user_id, until_date=bantime) await m.reply_to_message.delete() txt = f"{admin} banned {banned} in {chat_title}!" if reason: txt += f"\nReason: {reason}" if bantime: txt += f"\nBanned for: {time_val}" keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Unban", callback_data=f"unban_={user_id}", ), ], ], ) anim = choice(BAN_GIFS) try: await m.reply_animation( animation=str(anim), caption=txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) except Exception: await m.reply_text( txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) await c.send_message(MESSAGE_DUMP, f"#REMOVE from BAN_GFIS\n{anim}") # await c.send_message(m.chat.id, txt, reply_markup=keyboard) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("kick") & restrict_filter) async def kick_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't kick nothing!") return reason = None if m.reply_to_message: r_id = m.reply_to_message.id if len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] else: r_id = m.id if len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] try: user_id, user_first_name, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to kick") return if user_id == c.me.id: await m.reply_text("Huh, why would I kick myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "kick") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot kick them!") await m.stop_propagation() try: admin = await mention_html(m.from_user.first_name, m.from_user.id) kicked = await mention_html(user_first_name, user_id) chat_title = m.chat.title await m.chat.ban_member(user_id) txt = f"{admin} kicked {kicked} in {chat_title}!" if reason: txt += f"\nReason: {reason}" # await m.reply_text(txt, reply_to_message_id=r_id) kickk = choice(KICK_GIFS) try: await m.reply_animation( reply_to_message_id=r_id, animation=str(kickk), caption=txt, parse_mode=enums.ParseMode.HTML, ) except Exception: await m.reply_text( reply_to_message_id=r_id, text=txt, parse_mode=enums.ParseMode.HTML, ) await c.send_message(MESSAGE_DUMP, f"#REMOVE from KICK_GFIS\n{kickk}") await m.chat.unban_member(user_id) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except UserNotParticipant: await m.reply_text("User is not part of the group") except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("skick") & restrict_filter) async def skick_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't kick nothing!") return try: user_id, _, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to kick") return if user_id == c.me.id: await m.reply_text("Nuh Hu, why would I kick myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "kick") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot kick them!") await m.stop_propagation() try: await m.chat.ban_member(user_id) await m.delete() if m.reply_to_message: await m.reply_to_message.delete() await m.chat.unban_member(user_id) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except UserNotParticipant: await m.reply_text("User is not part of the group") except RightForbidden: await m.reply_text(text="I don't have enough rights to kick this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("dkick") & restrict_filter) async def dkick_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") return if not m.reply_to_message: return await m.reply_text("Reply to a message to delete it and kick the user!") reason = None user_id = m.reply_to_message.from_user.id user_first_name = m.reply_to_message.from_user.first_name if not user_id: await m.reply_text("Cannot find user to kick") return if user_id == c.me.id: await m.reply_text("Huh, why would I kick myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "kick") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot kick them!") await m.stop_propagation() try: await m.reply_to_message.delete() await m.chat.ban_member(user_id) admin = await mention_html(m.from_user.first_name, m.from_user.id) kicked = await mention_html(user_first_name, user_id) chat_title = m.chat.title txt = f"{admin} kicked {kicked} in {chat_title}!" if reason: txt += f"\nReason: {reason}" kickk = choice(KICK_GIFS) try: await m.reply_animation( animation=str(kickk), caption=txt, parse_mode=enums.ParseMode.HTML, ) except Exception: await m.reply_text( txt, parse_mode=enums.ParseMode.HTML, ) await c.send_message(MESSAGE_DUMP, f"#REMOVE from KICK_GFIS\n{kickk}") await m.chat.unban_member(user_id) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except RightForbidden: await m.reply_text(text="I don't have enough rights to kick this user.") except UserNotParticipant: await m.reply_text("User is not part of the group") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("unban") & restrict_filter) async def unban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't unban nothing!") await m.stop_propagation() if m.reply_to_message and not m.reply_to_message.from_user: user_id, user_first_name = ( m.reply_to_message.sender_chat.id, m.reply_to_message.sender_chat.title, ) else: try: user_id, user_first_name, _ = await extract_user(c, m) except Exception: return if m.reply_to_message and len(m.text.split()) >= 2: reason = m.text.split(None, 2)[1] elif not m.reply_to_message and len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] else: reason = None try: statu = (await m.chat.get_member(user_id)).status if statu not in [enums.ChatMemberStatus.BANNED, enums.ChatMemberStatus.RESTRICTED]: await m.reply_text("User is not banned in this chat\nOr using this command as reply to his message") return except Exception as e: LOGGER.error(e) LOGGER.exception(format_exc()) try: await m.chat.unban_member(user_id) admin = m.from_user.mention unbanned = await mention_html(user_first_name, user_id) chat_title = m.chat.title txt = f"{admin} unbanned {unbanned} in chat {chat_title}!" if reason: txt += f"\nReason: {reason}" await m.reply_text(txt) except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except RightForbidden: await m.reply_text(text="I don't have enough rights to unban this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("sban") & restrict_filter) async def sban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() if m.reply_to_message and not m.reply_to_message.from_user: user_id = m.reply_to_message.sender_chat.id else: try: user_id, _, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to ban") return if user_id == m.chat.id: await m.reply_text("That's an admin!") await m.stop_propagation() if user_id == c.me.id: await m.reply_text("Huh, why would I ban myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() try: await m.chat.ban_member(user_id) await m.delete() if m.reply_to_message: await m.reply_to_message.delete() except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except UserNotParticipant: await m.reply_text("User is not part of the group") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("dban") & restrict_filter) async def dban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() if not m.reply_to_message: return await m.reply_text("Reply to a message to delete it and ban the user!") if not m.reply_to_message.from_user: user_id, user_first_name = ( m.reply_to_message.sender_chat.id, m.reply_to_message.sender_chat.title, ) else: user_id, user_first_name = ( m.reply_to_message.from_user.id, m.reply_to_message.from_user.first_name, ) if not user_id: await m.reply_text("Cannot find user to ban") return if user_id == m.chat.id: await m.reply_text("That's an admin!") await m.stop_propagation() if user_id == c.me.id: await m.reply_text("Huh, why would I ban myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() reason = m.text.split(None, 1)[1] if len(m.text.split()) >= 2 else None try: await m.reply_to_message.delete() await m.chat.ban_member(user_id) txt = f"{m.from_user.mention} banned {m.reply_to_message.from_user.mention} in {m.chat.title}!" if reason: txt += f"\nReason: {reason}" keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Unban", callback_data=f"unban_={user_id}", ), ], ], ) animm = choice(BAN_GIFS) try: await c.send_animation( m.chat.id, animation=str(animm), caption=txt, reply_markup=keyboard ) except Exception: await c.send_message(m.chat.id, txt, enums.ParseMode.HTML, reply_markup=keyboard) await c.send_messagea(MESSAGE_DUMP, f"#REMOVE from BAN_GIFS\n{animm}") except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except UserNotParticipant: await m.reply_text("User is not part of the group") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_message(command("ban") & restrict_filter) async def ban_usr(c: Gojo, m: Message): if len(m.text.split()) == 1 and not m.reply_to_message: await m.reply_text(text="I can't ban nothing!") await m.stop_propagation() if m.reply_to_message and not m.reply_to_message.from_user: user_id, user_first_name = ( m.reply_to_message.sender_chat.id, m.reply_to_message.sender_chat.title, ) else: try: user_id, user_first_name, _ = await extract_user(c, m) except Exception: return if not user_id: await m.reply_text("Cannot find user to ban") await m.stop_propagation() if user_id == m.chat.id: await m.reply_text("That's an admin!") await m.stop_propagation() if user_id == c.me.id: await m.reply_text("Huh, why would I ban myself?") await m.stop_propagation() SUPPORT_STAFF = get_support_staff() if user_id in SUPPORT_STAFF: await m.reply_text( text="This user is in my support staff, cannot restrict them." ) await m.stop_propagation() try: admins_group = {i[0] for i in ADMIN_CACHE[m.chat.id]} except KeyError: admins_group = await admin_cache_reload(m, "ban") if user_id in admins_group: await m.reply_text(text="This user is an admin, I cannot ban them!") await m.stop_propagation() reason = None if m.reply_to_message: r_id = m.reply_to_message.id if len(m.text.split()) >= 2: reason = m.text.split(None, 1)[1] else: r_id = m.id if len(m.text.split()) >= 3: reason = m.text.split(None, 2)[2] try: await m.chat.ban_member(user_id) banned = await mention_html(user_first_name, user_id) txt = f"{m.from_user.mention} banned {banned} in {m.chat.title}!" if reason: txt += f"\nReason: {reason}" keyboard = InlineKeyboardMarkup( [ [ InlineKeyboardButton( "Unban", callback_data=f"unban_={user_id}", ), ], ], ) anim = choice(BAN_GIFS) try: await m.reply_animation( reply_to_message_id=r_id, animation=str(anim), caption=txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) except Exception: await m.reply_text( reply_to_message_id=r_id, text=txt, reply_markup=keyboard, parse_mode=enums.ParseMode.HTML, ) await c.send_message(MESSAGE_DUMP, f"#REMOVE from BAN_GFIS\n{anim}") except ChatAdminRequired: await m.reply_text(text="I'm not admin or I don't have rights.") except PeerIdInvalid: await m.reply_text( "I have not seen this user yet...!\nMind forwarding one of their message so I can recognize them?", ) except UserNotParticipant: await m.reply_text("User is not part of the group") except UserAdminInvalid: await m.reply_text( text="Cannot act on this user, maybe I wasn't the one who changed their permissions." ) except RightForbidden: await m.reply_text(text="I don't have enough rights to ban this user.") except RPCError as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) LOGGER.error(ef) LOGGER.error(format_exc()) return @Gojo.on_callback_query(regex("^unban_")) async def unbanbutton(c: Gojo, q: CallbackQuery): splitter = (str(q.data).replace("unban_", "")).split("=") user_id = int(splitter[1]) user = await q.message.chat.get_member(q.from_user.id) if not user: await q.answer( "You don't have enough permission to do this!\nStay in your limits!", show_alert=True, ) return elif not user.privileges.can_restrict_members and q.from_user.id != OWNER_ID: await q.answer( "You don't have enough permission to do this!\nStay in your limits!", show_alert=True, ) return whoo = await c.get_chat(user_id) doneto = whoo.first_name or whoo.title try: await q.message.chat.unban_member(user_id) except RPCError as e: await q.message.edit_text(f"Error: {e}") return await q.message.edit_text(f"{q.from_user.mention} unbanned {doneto}!") return @Gojo.on_message(command("kickme")) async def kickme(c: Gojo, m: Message): reason = m.text.split(None, 1)[1] if len(m.text.split()) >= 2 else None try: mem = await c.get_chat_member(m.chat.id, m.from_user.id) if mem.status in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER]: try: await c.promote_chat_member( m.chat.id, m.from_user.id, ChatPrivileges(can_manage_chat=False) ) except Exception: await m.reply_text("I can't demote you so I can't ban you") return await m.chat.ban_member(m.from_user.id) txt = "Why not let me help you!" if reason: txt += f"\nReason: {reason}" await m.reply_animation(animation=str(choice(KICK_GIFS)), caption=txt) await m.chat.unban_member(m.from_user.id) except RPCError as ef: if "400 USER_ADMIN_INVALID" in ef: await m.reply_text("Looks like I can't kick you (⊙_⊙)") return elif "400 CHAT_ADMIN_REQUIRED" in ef: await m.reply_text("Look like I don't have rights to ban peoples here T_T") return else: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) except Exception as ef: await m.reply_text( text=f"""Some error occured, report it using `/bug` Error: {ef}""" ) return __PLUGIN__ = "bans" _DISABLE_CMDS_ = ["kickme"] __alt_name__ = [ "ban", "unban", "kickme", "kick", "tban", ] __HELP__ = """ **Bans** **Admin only:** • /kick: Kick the user replied or tagged. • /skick: Kick the user replied or tagged and delete your messsage. • /dkick: Kick the user replied and delete their message. • /ban: Bans the user replied to or tagged. • /sban: Bans the user replied or tagged and delete your messsage. • /dban: Bans the user replied and delete their message. • /tban x(m/h/d): Bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days. • /stban x(m/h/d): Silently bans a user for x time. (via handle, or reply). m = minutes, h = hours, d = days. • /dtban x(m/h/d): Silently bans a user for x time and delete the replied message. (via reply). m = minutes, h = hours, d = days. • /unban: Unbans the user replied to or tagged. **Example:** `/ban @username`: this bans a user in the chat."""