You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用aiogram 3.4.1机器人查询Telegram群组用户权限

在aiogram 3.4.1中查询Telegram群组用户权限的方法

要查询Telegram群组内用户的权限,核心是利用aiogram提供的ChatMember对象——它包含了用户在群组中的状态和具体权限配置。注意:机器人必须是群组的成员(最好是管理员),否则无法获取成员权限信息。

一、查询当前消息发送者的权限

通过当前消息的上下文,直接获取发送者的ChatMember信息,然后解析其状态和权限:

from aiogram import Router, types
from aiogram.filters import Command

router = Router()

@router.message(Command("my_perm"))
async def check_my_permission(message: types.Message):
    # 获取当前发送者在群组中的成员信息
    chat_member = await message.chat.get_member(message.from_user.id)
    
    # 判断用户状态
    if chat_member.status == "creator":
        await message.answer("你是这个群组的创建者,拥有所有权限")
    elif chat_member.status == "administrator":
        # 管理员的具体权限示例
        perm_details = [
            "删除消息" if chat_member.can_delete_messages else "",
            "管理群组" if chat_member.can_manage_chat else "",
            "邀请新成员" if chat_member.can_invite_users else ""
        ]
        # 过滤空字符串
        perm_details = [p for p in perm_details if p]
        await message.answer(f"你是群组管理员,拥有权限:\n" + "\n".join(perm_details))
    elif chat_member.status == "member":
        # 普通成员的权限示例
        perm_details = [
            "发送文本消息" if chat_member.can_send_messages else "",
            "发送媒体内容" if chat_member.can_send_media_messages else "",
            "发起投票" if chat_member.can_send_polls else ""
        ]
        perm_details = [p for p in perm_details if p]
        await message.answer(f"你是普通成员,拥有权限:\n" + "\n".join(perm_details))
    elif chat_member.status == "restricted":
        await message.answer(f"你是受限成员,当前可发送消息:{chat_member.can_send_messages}")
    else:
        await message.answer("你不是这个群组的成员")

二、查询指定用户的权限

如果需要查询特定用户(通过ID或@用户名)的权限,可以按以下方式实现:

@router.message(Command("check_user"))
async def check_specific_user(message: types.Message):
    # 检查是否传入了目标用户标识
    if len(message.text.split()) < 2:
        await message.answer("请指定用户ID或@用户名,格式:/check_user @username 或 /check_user 123456789")
        return
    
    target = message.text.split()[1]
    try:
        # 处理用户ID
        if target.isdigit():
            user_id = int(target)
            chat_member = await message.chat.get_member(user_id)
        # 处理@用户名
        else:
            username = target.lstrip("@")
            user = await message.bot.get_user(username)
            if not user:
                await message.answer("未找到该用户")
                return
            chat_member = await message.chat.get_member(user.id)
        
        # 整理权限信息
        result = [f"用户:{chat_member.user.full_name} (@{chat_member.user.username})"]
        result.append(f"状态:{chat_member.status}")
        
        if chat_member.status in ["creator", "administrator"]:
            admin_perms = [
                "删除消息" if chat_member.can_delete_messages else "",
                "禁言成员" if chat_member.can_restrict_members else "",
                "置顶消息" if chat_member.can_pin_messages else ""
            ]
            admin_perms = [p for p in admin_perms if p]
            result.append("权限:" + "\n".join(admin_perms))
        elif chat_member.status == "member":
            member_perms = [
                "发送消息" if chat_member.can_send_messages else "",
                "发送贴纸/表情" if chat_member.can_send_other_messages else ""
            ]
            member_perms = [p for p in member_perms if p]
            result.append("权限:" + "\n".join(member_perms))
        
        await message.answer("\n".join(result))
    except Exception as e:
        await message.answer(f"查询失败:{str(e)}")

关键说明

  • ChatMember的不同状态对应不同的类:
    • ChatMemberCreator:群组创建者,拥有全部权限
    • ChatMemberAdministrator:管理员,包含can_delete_messages、can_manage_chat等专属权限属性
    • ChatMemberMember:普通成员,权限属性以can_send_*为主
    • ChatMemberRestricted:受限成员,需查看is_member和具体的受限权限
  • 机器人权限限制:如果机器人不是群组管理员,可能无法获取部分敏感权限信息,甚至调用get_member方法会报错
  • 异常处理:务必捕获调用过程中的异常(比如用户不在群组、机器人权限不足等情况)

内容的提问来源于stack exchange,提问作者Olimpiia_ ART

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:16:26