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

拥有管理员权限的discord.py调用add_role()仍提示权限缺失错误

问题排查与解决方案

针对你遇到的机器人添加角色时权限拒绝问题,按以下步骤排查:

  • 确认机器人角色层级位置
    Discord角色权限遵循层级排序规则,机器人的角色在服务器角色列表中的位置必须高于timeout角色。即使机器人有管理员权限,如果角色层级在timeout之下,也无法为用户添加该角色。前往服务器设置→角色页面,将机器人的角色拖动到timeout角色的上方。

  • 验证角色获取是否成功
    代码中通过角色名获取timeout角色时,可能出现名称大小写不匹配或角色不存在的情况,导致后续操作失败。添加判断逻辑确认角色存在:

    @client.event
    async def on_message(message):
        if message.author == client.user:
            return
        
        stopchecks = False
        if message.author not in moderationwhitelist:
            
            if message.mention_everyone:
                await message.reply("off to timeout with you")
                timeout = get(message.guild.roles, name="timeout")
                # 新增角色存在判断
                if not timeout:
                    await message.reply("未找到timeout角色")
                    return
                await message.author.add_roles(timeout)
                stopchecks = True
    
  • 检查目标用户角色层级
    确保被操作的小号用户的最高角色层级低于机器人的角色层级,否则机器人无法为其添加或修改角色。

  • 确认Discord开发者门户的Intents设置
    即使代码中使用了discord.Intents.all(),仍需前往Discord开发者门户→机器人页面,开启服务器成员特权网关意图和消息内容特权网关意图,这两个权限是处理成员角色操作和消息事件的必要条件。

  • 重新确认机器人权限
    虽然你已授予管理员权限,仍可再次检查机器人角色是否拥有管理角色(Manage Roles)权限,避免因权限设置异常导致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:33:26