Discord.py 制作指定消息触发授身份组机器人遇Unknown Role报错如何解决
排查解决步骤
- 优先检查机器人的角色层级与权限:首先确认机器人已经被授予管理角色权限,其次在服务器的角色列表中,机器人自身的角色排序必须高于你想要分配的目标角色排序,Discord的角色权限规则不允许低层级角色对高层级角色执行任何操作,这是触发未知角色报错的最常见原因。
- 修正代码的参数错误:你当前调用
add_roles方法时传参有误,add_roles是用户对象的内置方法,不需要额外传入用户对象作为第一个参数,将原代码的await message.author.add_roles(message.author, role)修改为await message.author.add_roles(role)即可。 - 补充角色获取的空值校验逻辑:
get方法没有找到对应角色时会返回None,你当前的代码没有做校验,建议补充判断逻辑,方便排查问题,参考修改后的代码:
@client.event async def on_message(message): if message.author == client.user: return if message.content == 'give me admin': # 此处替换为你实际的角色名称 role = get(message.guild.roles, name='role') if not role: await message.channel.send("未找到匹配的角色") return await message.author.add_roles(role)
- 替换为角色ID获取角色:如果确认角色名称完全一致还是获取失败,可以改用角色ID获取,避免名称包含不可见字符、大小写识别偏差的问题。开启Discord开发者模式后右键对应角色复制ID,使用
role = message.guild.get_role(你复制的角色ID)来获取角色即可。
内容的提问来源于stack exchange,提问作者John Persuro
相关产品推荐
相关产品推荐

