Discord机器人角色分配报错:'Bot'对象无add_roles属性
解决Discord.py中
AttributeError: 'Bot' object has no attribute 'add_roles'的问题 嘿,这个问题我之前折腾Discord机器人的时候也碰到过!核心原因是Discord.py版本更新后,角色分配的方法位置发生了变化:在v1.0之前的旧版本里,确实是通过client.add_roles()来给用户添加角色,但从v1.0版本开始,这个方法被迁移到了Member对象(也就是你代码里的user)身上,所以直接调用client.add_roles()自然会触发属性不存在的错误。
修改后的正确代码
@client.command(pass_context=True) async def Role(ctx): user = ctx.author # 获取上下文里的用户(Member对象) role = get(user.guild.roles, name="testrole") # 获取指定名称的角色 await user.add_roles(role) # 直接通过Member对象调用add_roles方法
额外要注意的几个点
- 确保你的机器人账号拥有管理角色的权限,不然执行命令时会触发权限不足的报错。
- 目标角色(比如你代码里的
testrole)在服务器角色列表中的位置必须低于机器人角色的位置,否则机器人没有权限给用户分配这个角色。 - 如果你用的是Discord.py v2.x及以上的最新版本,
pass_context=True其实已经没必要写了,因为上下文是默认传递的,可以简化成:
@client.command() async def role(ctx): user = ctx.author role = get(user.guild.roles, name="testrole") await user.add_roles(role)
这样调整后,你的测试命令应该就能正常给用户分配角色啦!
内容的提问来源于stack exchange,提问作者Myronaz
相关产品推荐
相关产品推荐

