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
相关产品推荐
相关产品推荐

