from pagermaid.single_utils import sqlite from pagermaid.listener import listener from pagermaid.group_manager import add_permission_for_group, Permission, remove_permission_for_group, \ add_user_to_group, remove_user_from_group, add_permission_for_user, remove_permission_for_user, \ permissions from pagermaid.enums import Client, Message from pagermaid.utils import lang, edit_delete, _status_sudo from pagermaid.single_utils import get_sudo_list def from_msg_get_sudo_id(message: Message) -> int: if reply := message.reply_to_message: return reply.from_user.id if reply.from_user else reply.sender_chat.id else: return message.chat.id @listener(is_plugin=False, command="sudo", need_admin=True, parameters="{on|off|add|remove|gaddp|gaddu|gdelp|gdelu|glist|uaddp|udelp|list}", description=lang('sudo_des')) async def sudo_change(client: Client, message: Message): """ To enable or disable sudo of your userbot. """ input_str = message.arguments sudo = get_sudo_list() if input_str == "on": if _status_sudo(): return await edit_delete(message, lang('sudo_has_enabled')) sqlite["sudo_enable"] = True text = f"__{lang('sudo_enable')}__\n" if len(sudo) != 0: return await message.edit( text, ) text += f"**{lang('sudo_no_sudo')}**" return await message.edit( text, ) elif input_str == "off": if _status_sudo(): del sqlite["sudo_enable"] text = f"__{lang('sudo_disable')}__\n" if len(sudo) != 0: return await message.edit( text, ) text += f"**{lang('sudo_no_sudo')}**" return await message.edit( text, ) await edit_delete(message, lang('sudo_has_disabled')) elif input_str == "add": from_id = from_msg_get_sudo_id(message) if from_id in sudo: return await edit_delete(message, f"__{lang('sudo_add')}__") sudo.append(from_id) sqlite["sudo_list"] = sudo add_user_to_group(str(from_id), "default") # 添加到默认组 if from_id > 0: await message.edit(f"__{lang('sudo_add')}__") else: await message.edit(f"__{lang('sudo_add_chat')}__") elif input_str == "remove": from_id = from_msg_get_sudo_id(message) if from_id not in sudo: return await edit_delete(message, f"__{lang('sudo_no')}__") sudo.remove(from_id) sqlite["sudo_list"] = sudo if from_id > 0: await message.edit(f"__{lang('sudo_remove')}__") else: await message.edit(f"__{lang('sudo_remove_chat')}__") elif input_str == "list": if len(sudo) == 0: return await edit_delete(message, f"__{lang('sudo_no_one')}__") text = f"**{lang('sudo_list')}**\n\n" for i in sudo: try: if i > 0: user = await client.get_users(i) text += f"• {user.mention()} - {' '.join(permissions.get_roles_for_user(str(i)))}\n" else: chat = await client.get_chat(i) text += f"• {chat.title} - {' '.join(permissions.get_roles_for_user(str(i)))}\n" for j in permissions.get_permissions_for_user(str(i)): text += f" • {'-' if j[2] == 'ejection' else ''}{j[1]}\n" except Exception: text += f"• `{i}` - {' '.join(permissions.get_roles_for_user(str(i)))}\n" await message.edit(text) elif len(message.parameter) > 0: if len(message.parameter) == 2: from_id = from_msg_get_sudo_id(message) if message.parameter[0] == "glist": if not ( data := permissions.get_permissions_for_user( str(message.parameter[1]) ) ): return await edit_delete(message, f"__{lang('sudo_group_list')}__") text = f"**{message.parameter[1]} {lang('sudo_group_list')}**\n\n" for i in data: text += f" • `{'-' if i[2] == 'ejection' else ''}{i[1]}`\n" return await message.edit(text) if from_id not in sudo: return await edit_delete(message, f"__{lang('sudo_no')}__") elif message.parameter[0] == "gaddu": add_user_to_group(str(from_id), message.parameter[1]) return await message.edit(lang("sudo_group_add_user")) elif message.parameter[0] == "gdelu": remove_user_from_group(str(from_id), message.parameter[1]) return await message.edit(lang("sudo_group_del_user")) elif message.parameter[0] == "uaddp": add_permission_for_user(str(from_id), Permission(message.parameter[1])) return await message.edit(lang("sudo_user_add_per")) elif message.parameter[0] == "udelp": remove_permission_for_user(str(from_id), Permission(message.parameter[1])) return await message.edit(lang("sudo_user_del_per")) else: return await edit_delete(message, lang('arg_error')) if len(message.parameter) == 3: if message.parameter[0] == "gaddp": add_permission_for_group(message.parameter[1], Permission(message.parameter[2])) return await message.edit(lang("sudo_group_add_per")) elif message.parameter[0] == "gdelp": remove_permission_for_group(message.parameter[1], Permission(message.parameter[2])) return await message.edit(lang("sudo_group_del_per")) else: return await edit_delete(message, lang('arg_error')) else: await edit_delete(message, lang('arg_error')) else: await edit_delete(message, lang('arg_error'))