You need to enable JavaScript to run this app. 如何通过discord.py获取指定Guild内机器人的全部权限
优惠活动
大模型
产品
解决方案
定价
更多

如何通过discord.py获取指定Guild内机器人的全部权限

discord.py 获取指定Guild内机器人权限的实现方法

拿到对应Guild对象之后,不用绕路查API,直接基于内置属性就能完成权限查询,核心逻辑是先定位机器人在该服务器的成员身份,再读取绑定在成员身份上的权限值,具体操作如下:

  • 第一步:直接调用Guild对象内置的me属性,拿到机器人在当前服务器的Member实例
    这个属性是框架自带的缓存值,不需要额外发起异步查询,在v1.x、v2.x全版本通用,直接写成bot_member = target_guild.me即可。
  • 第二步:根据场景选择对应权限查询方式
    • 如果需要获取机器人的全局服务器权限(即叠加所有分配给机器人的角色权限后的总权限,不受单个频道的权限覆写规则影响),直接读取bot_member.guild_permissions属性,返回的是标准的Permissions对象,每一个权限项都可以通过属性名直接判断状态,比如通过bot_member.guild_permissions.manage_channels可以直接判断有没有管理频道的权限。
    • 如果需要获取机器人在某特定频道内的实际生效权限(即叠加角色权限、频道权限覆写规则后的最终可执行权限),调用bot_member.permissions_in(target_channel)方法,传入对应的频道对象即可拿到计算后的权限结果。

可直接复用的示例代码

# 已提前获取到的目标Guild对象 target_guild
bot_member = target_guild.me
# 读取机器人在该服务器的全局权限
bot_global_perms = bot_member.guild_permissions

# 遍历输出所有权限状态
for perm_name, has_perm in bot_global_perms:
    status = "已开启" if has_perm else "未开启"
    print(f"[{perm_name}] 权限状态: {status}")

常见踩坑提醒

  • 权限是绑定在服务器成员/角色上的属性,Guild对象本身不会存储机器人的权限值,不要尝试在Guild的属性列表里找权限相关字段。
  • 如果机器人被授予了Discord的服务器管理员权限,所有权限项都会被判定为开启状态,这是Discord平台本身的权限判定逻辑,不是代码读取异常。
  • 分片运行的机器人不需要额外手动匹配成员身份,guild.me会自动匹配当前运行实例的机器人账号对应的成员记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 21:06:10