拥有Discord服务器管理员权限的Bot无法添加身份组、修改昵称报错
解决Discord Bot已获管理员权限仍报
missing permissions的方案 - 优先检查角色层级优先级
Discord角色权限优先级由服务器角色列表的上下排列顺序决定,即便Bot拥有管理员权限,只要Bot自身的角色位置低于以下两类角色,就会触发权限报错:
- 你要分配给用户的目标角色
new role1 - 你要修改昵称的目标用户(含测试小号)的最高等级角色
修复方法:进入服务器设置-角色页面,将Bot对应的角色拖动到高于new role1、以及所有需要操作的用户的最高角色之上,保存设置即可生效。
- 你要分配给用户的目标角色
- 检查Discord开发者后台的特权意图开启状态
目前Discord v10及以上版本API要求,所有操作服务器成员的功能必须开启特权意图。操作路径:进入Discord开发者后台的对应Bot管理页,找到Privileged Gateway Intents板块,开启Server Members Intent权限,保存后重启Bot即可。 - 排查特殊场景限制
- 平台固有规则限制Bot无法修改服务器所有者的昵称,即便Bot拥有管理员权限也不例外
- 代码中
discord.utils.get如果未匹配到new role1对应的角色会返回None,部分版本的discord.py传入None调用add_roles时会抛出权限类错误,建议先补充判空逻辑,参考代码如下:isp = "new role1" lis = [0, 'ingame_name', 'Real_first_name'] target_role = discord.utils.get(message.author.guild.roles, name=isp) if not target_role: await message.channel.send("目标角色不存在") return await message.author.add_roles(target_role) await message.author.edit(nick=f"{lis[1]} ({lis[2]})")
- 检查Bot邀请链接的权限位
生成Bot邀请链接时,建议勾选Manage Roles、Manage Nicknames两个核心权限位,避免后续权限覆盖异常。
内容的提问来源于stack exchange,提问作者Роберт
相关产品推荐
相关产品推荐

