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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:32:54