首页 > 解决方案 > Discord py - AttributeError:“str”对象没有属性“remove_roles”

问题描述

我已经搜索了几个小时的 stackoverflow 问题,但似乎无法弄清楚我哪里出错了。我正在尝试制作在用户获得“已验证”角色后删除“新手”角色的不和谐机器人。

@client.event
async def on_member_update(before, after):
    if len(before.roles) < len(after.roles):
        newRole = next(role for role in after.roles if role not in before.roles)
        member = after.name
        currentRoles = after.roles

        if newRole.name == "verified":
            removeRole = discord.utils.get(currentRoles, name="Newbie")
            await member.remove_roles(removeRole)

我尝试了很多不同的组合,也搜索了不和谐但似乎无法获得语法。

removeRole = <id>

removeRole = (id=<id>)

remove_role = get(after.roles, name="Newbie")

await member.remove_roles(<id>)

这是完整的错误

Ignoring exception in on_member_update
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "security.py", line 117, in on_member_update
    await member.remove_roles(removeRole)
AttributeError: 'str' object has no attribute 'remove_roles'

任何帮助将不胜感激!

标签: pythondiscorddiscord.pyattributeerror

解决方案


我要做的是:

user = self.client.get_user(after.id)

这样,用户实际上是一个对象,而不是名称。

如果这不起作用,请尝试:

user = self.client.get_user(after.id)
if user is None:
     user = await self.client.fetch_user(after.id)

推荐阅读