【问题标题】:Discord py - AttributeError: 'str' object has no attribute 'remove_roles'Discord py - AttributeError:“str”对象没有属性“remove_roles”
【发布时间】:2021-11-29 08:36:21
【问题描述】:

我已经搜索了几个小时的 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)

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

removeRole = &lt;id&gt;

removeRole = (id=&lt;id&gt;)

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

await member.remove_roles(&lt;id&gt;)

这是完整的错误

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'

任何帮助将不胜感激!

【问题讨论】:

  • 欢迎来到 Stack Overflow!您的代码中的问题是 member 被定义为字符串,而不是实际的 Member 对象,因此没有属性为 remove_roleson_member_update 事件已经为您提供了一个成员对象。因此,您现在可以将 member 定义为 member = after 并在 Member 对象上调用 remove_rolesmember.remove_roles(removeRole)
  • 感谢@Yeti 修复它!

标签: python discord discord.py attributeerror


【解决方案1】:

我会做的是:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2021-10-04
    • 2019-12-02
    • 2021-09-25
    相关资源
    最近更新 更多