【问题标题】:discord py bot triggers twice on_member_update functiondiscord py bot 触发两次 on_member_update 函数
【发布时间】:2020-07-30 09:26:14
【问题描述】:

我正在用 Python 编写一个不和谐的机器人,但遇到了一个我目前无法修复的相当愚蠢的错误。 该机器人应该通过允许用户注册基于昵称的字符来补充在线笔和纸 rpgs,这些字符可以滚动支票等。

如果玩家上线,机器人应该检查该玩家是否在其所有者键下的角色数据库中。如果是这种情况,机器人应该为用户分配一个特定的角色,这允许进一步的命令。 出于持久性原因,在服务器(也就是我的机器)上为每个注册角色创建一个文件,并且一个用户可以拥有多个角色(因为我同时与同一个人玩多个活动)。您可以看到这是一长串根据在线、离线、昵称等自动分配和撤销角色的第一步。

我只为此编写了代码的基础,但遇到了一个令我困惑且似乎无法解决的问题。

我的代码:

# on_member_update the bot recognizes if someone comes online and their name shows up in the character database
# if so the bot should assign them the role "Spieler" on the server. Right now prints to console for testing.
@bot.event
async def on_member_update(before,after):
    if before.status == discord.Status.offline and str(after) in characters:
        print("Rollenwechsel!")
    else:
        print("Studenten verteilen Flugblätter. Nichts geschieht.")

如果我在我的电脑或笔记本电脑上运行它,它会在状态更改时触发两次,在昵称或角色等更改时触发一次。

如何停止双重触发?额外问题:为什么要这样做?

提前致谢。

ps:如果需要,请询问更多代码。 pps:我对编码很陌生。记住这一点。 ppps:如果其他地方已经回答了这个问题,我深表歉意。经过大约一个小时的激烈谷歌搜索后,我写了这篇文章。

【问题讨论】:

  • 对我来说,在这两种情况下,发布的代码只触发一次。您还有其他正在处理的事件吗?也许将您的代码剥离为仅此事件并验证双重触发?
  • 将其简化为仅此事件。对我来说仍然是双重触发。

标签: python discord.py


【解决方案1】:

会员更新会针对用户所在的每个公会触发。它会触发两次,因为您的机器人位于 2 个服务器中,并且它会为每个服务器中的用户检测更新。它是同一个用户,但不是同一个成员。 它不会在昵称或角色更改时触发两次,因为它们是特定于每个公会的。

您可以使用 on user update 来避免这种情况: https://discordpy.readthedocs.io/en/latest/api.html#discord.on_user_update

不幸的是,与 on_member_update 不同,on_user_update 不检查状态更新等。但是您可以使用它来检查公会中的昵称更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 2021-06-15
    • 2021-09-20
    • 1970-01-01
    • 2021-06-04
    • 2021-02-07
    • 2021-04-24
    • 2021-11-10
    相关资源
    最近更新 更多