如何通过aiogram机器人查询用户在Telegram群组中的权限

0 投票
1 回答
27 浏览
提问于 2025-04-11 23:43

如何通过一个aiogram机器人查看用户在Telegram群组中的权限?我正在使用最新版本的aiogram 3.4.1。

1 个回答

0

Telegram Bot API 有一个特别的方法可以获取聊天成员的信息:GetChatMember(在 Aiogram 中表示为 bot.get_chat_member(chat_id, user_id))。

这个方法会返回一个继承自 ChatMember 对象的对象。根据 文档,聊天成员有6种类型,但我们只关心 ChatMemberAdministratorChatMemberRestricted,因为 ChatMemberOwner 拥有所有权限,ChatMemberMember 除了全局聊天设置外没有任何额外的权限或限制,而 ChatMemberLeftChatMemberBanned 就更简单了:他们不在聊天中,自然没有任何权限或限制。

所以我们首先需要检查这个成员对象是否是 ChatMemberAdministratorChatMemberRestricted 类的实例:

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;如果是 ChatMemberLeftChatMemberBanned 类型,就把所有值设为 False

不过,要注意这个方法不包括全局聊天设置,使用这个类的实例时要记得这一点。

撰写回答