【问题标题】:Discord.py not seeing updates to User/Member rolesDiscord.py 没有看到用户/成员角色的更新
【发布时间】:2021-02-18 17:25:08
【问题描述】:

使用 discord.py 运行 Discord 机器人时,如果编辑了用户的角​​色,机器人将无法看到信息。例如:

1: 用户 A(不是角色 R)使用“加入”命令。 Bot 将用户添加到 R。

用户 A(现在是角色 R)使用“离开”命令。 Bot 认为用户不在 R 中并抱怨。

2: 用户 A(角色 R)使用“离开”命令。 Bot 从 R 中删除用户

用户 A(不是角色 R)使用“加入”命令。 Bot 认为用户已经在 R 中并抱怨。

如果我使用调试器并检查给定的用户,该角色似乎永远不会被添加/删除。 虽然角色更改确实出现在 Discord 本身中。重新启动机器人允许在它中断之前再次更新,所以它让我认为当用户的角色更改时某些内容没有更新。

代码也很简单:

async def giveRole(user, wantedRole, message):
    role = getRoleToAdd(wantedRole) # some logic to get the role to leave/join, verified to work

    if role in user.roles:
        await message.channel.send("You've already joined that role")

    else:
        await user.add_roles(role)

“离开”逻辑只是翻转了,使用 user.remove_roles(role) 代替。

【问题讨论】:

  • 你升级 discord.py 到 1.5 并添加了intents
  • 我想到了使用意图,但并不是说我是个傻瓜并且有一个过时的 Discord.py。我会尝试更新并从那里开始,谢谢!

标签: discord.py


【解决方案1】:

虽然您必须更新和添加默认意图,但我认为您的用例不需要intents.members

我确实遇到过类似的问题,虽然我一直启用Intents.members,但我的问题是我在分配新角色之前和之后重复使用相同的成员对象来检查角色。

roles_before = [role.name for role in updated_roles_member.roles]
await assignRolesToUser(roleList, mentioned_user, message.guild)
updated_roles_member = await mentioned_user.guild.fetch_member(mentioned_user.id)
roles_now = [role.name for role in updated_roles_member.roles]

这给了我新的角色列表

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 2021-06-12
    • 2021-06-29
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2021-10-16
    相关资源
    最近更新 更多