如何通过aiogram机器人查询用户在Telegram群组中的权限
如何通过一个aiogram机器人查看用户在Telegram群组中的权限?我正在使用最新版本的aiogram 3.4.1。
1 个回答
0
Telegram Bot API 有一个特别的方法可以获取聊天成员的信息:GetChatMember(在 Aiogram 中表示为 bot.get_chat_member(chat_id, user_id)
)。
这个方法会返回一个继承自 ChatMember 对象的对象。根据 文档,聊天成员有6种类型,但我们只关心 ChatMemberAdministrator 和 ChatMemberRestricted,因为 ChatMemberOwner 拥有所有权限,ChatMemberMember 除了全局聊天设置外没有任何额外的权限或限制,而 ChatMemberLeft 和 ChatMemberBanned 就更简单了:他们不在聊天中,自然没有任何权限或限制。
所以我们首先需要检查这个成员对象是否是 ChatMemberAdministrator
或 ChatMemberRestricted
类的实例:
from aiogram import Bot, Dispatcher
from aiogram.types import Message, ChatMemberAdministrator, ChatMemberRestricted
bot = Bot(token="TOKEN")
dp = Dispatcher()
@dp.message()
async def test(message: Message):
member = await bot.get_chat_member(message.chat.id, message.from_user.id)
if isinstance(member, ChatMemberAdministrator):
...
elif isinstance(member, ChatMemberRestricted):
...
else:
...
dp.run_polling(bot)
因为这两种类有不同的权限和限制,我会创建一个结合它们的类,并且所有字段都有默认值(用户权限默认 = True
,管理员权限默认 = False
),然后创建这个类的实例,并根据成员类型传入权限值。记得如果成员对象是 ChatMemberOwner
类型,就把所有值设为 True
;如果是 ChatMemberLeft
或 ChatMemberBanned
类型,就把所有值设为 False
。
不过,要注意这个方法不包括全局聊天设置,使用这个类的实例时要记得这一点。