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

Discord py出现AttributeError: 'str' has no attribute 'remove_roles'如何解决

错误原因

你代码中member = after.name这一行将member变量赋值为字符串类型的用户名,而remove_roles是discord.py中Member类的专属方法,字符串对象没有该方法,所以触发了属性报错。事件参数里的after本身就是对应用户的Member类实例,直接使用它操作身份组即可。

修正后可运行代码

@client.event
async def on_member_update(before, after):
    if len(before.roles) < len(after.roles):
        new_role = next(role for role in after.roles if role not in before.roles)
        if new_role.name == "verified":
            remove_role = discord.utils.get(after.roles, name="Newbie")
            # 先判断成员确实持有Newbie身份组再执行移除,避免空值报错
            if remove_role:
                await after.remove_roles(remove_role)

额外注意事项

  • 如果你想通过身份组ID来获取要移除的角色,正确写法为remove_role = after.guild.get_role(替换为Newbie身份组的数字ID)
  • 要确保你的机器人账号拥有管理身份组权限,且机器人自身的身份组在服务器的排序高于verified和Newbie身份组,否则身份组操作会无响应或抛出权限报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:57:02