From 99ad91f62c45c41d083eec99af336a2761ea55a1 Mon Sep 17 00:00:00 2001 From: xtaodada Date: Sat, 23 Jul 2022 11:46:17 +0800 Subject: [PATCH] =?UTF-8?q?unban=20=E8=A7=A3=E9=99=A4=E5=B0=81=E7=A6=81?= =?UTF-8?q?=E4=B8=80=E4=BD=8D=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- list.json | 10 +++++++ unban/main.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 unban/main.py diff --git a/list.json b/list.json index 8b63350..795bab4 100644 --- a/list.json +++ b/list.json @@ -449,6 +449,16 @@ "supported": true, "des-short": "查询天气。", "des": "查询天气。指令:,weather_lite" + }, + { + "name": "unban", + "version": "1.0", + "section": "chat", + "maintainer": "xtaodada", + "size": "2.5 kb", + "supported": true, + "des-short": "解除封禁一位用户。", + "des": "解除封禁一位用户。指令:,unban" } ] } diff --git a/unban/main.py b/unban/main.py new file mode 100644 index 0000000..2a253ed --- /dev/null +++ b/unban/main.py @@ -0,0 +1,72 @@ +from pyrogram.enums import ChatMemberStatus +from pyrogram.errors import ChatAdminRequired, FloodWait, PeerIdInvalid, UsernameInvalid, UserNotParticipant +from pyrogram.types import Chat + +from pagermaid import bot +from pagermaid.listener import listener +from pagermaid.single_utils import Message +from pagermaid.utils import lang + + +async def check_uid(chat: Chat, uid: str): + member = None + try: + uid = int(uid) + member = await bot.get_chat_member(chat.id, uid) + except ValueError: + try: + chat = await bot.get_chat(uid) + uid = chat.id + except PeerIdInvalid: + member = await bot.get_chat_member(chat.id, uid) + uid = member.user.id + if not member: + member = await bot.get_chat_member(chat.id, uid) + return uid, member + + +async def get_uid(chat: Chat, message: Message): + uid = None + member = None + if reply := message.reply_to_message: + if sender := reply.from_user: + uid = sender.id + if sender := reply.sender_chat: + uid = sender.id + member = await bot.get_chat_member(chat.id, uid) + elif len(message.parameter) == 1: + uid, member = await check_uid(chat, message.arguments) + return uid, member + + +@listener(command="unban", + description="解除封禁一位用户", + need_admin=True, + groups_only=True, + parameters="") +async def unban(message: Message): + chat = message.chat + try: + uid, member = await get_uid(chat, message) + except (ValueError, PeerIdInvalid, UsernameInvalid, FloodWait): + return await message.edit(lang("arg_error")) + except UserNotParticipant: + return await message.edit("此用户未被限制。") + if not uid: + return await message.edit(lang("arg_error")) + if uid == chat.id: + return await message.edit(lang("arg_error")) + try: + if not member: + member = await bot.get_chat_member(chat.id, uid) + if member.status in [ChatMemberStatus.RESTRICTED, ChatMemberStatus.BANNED]: + await message.bot.unban_chat_member(chat.id, uid) + else: + return await message.edit("此用户未被限制。") + except UserNotParticipant: + return await message.edit("此用户未被限制。") + except ChatAdminRequired: + return await message.edit(lang("sb_no_per")) + except Exception as e: + return await message.edit(f"出现错误:{e}") + await message.edit("已解封此用户。")