gpt4 book ai didi

python - discord py bot 触发两次 on_member_update 函数

转载 作者:行者123 更新时间:2023-12-04 04:13:17 26 4
gpt4 key购买 nike

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

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

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

我的代码:

# 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:如果这已经在其他任何地方得到回答,我道歉。经过大约一个小时的疯狂谷歌搜索,我写了这篇文章。

最佳答案

on member update 为用户所在的每个公会触发。它触发两次,因为您的机器人在 2 个服务器中,并且它在每个服务器中检测用户的更新。它是同一个用户,但不是同一个成员。
它不会在昵称或角色更改时触发两次,因为这些都是特定于每个公会的。
您可以使用用户更新来避免这种情况:
https://discordpy.readthedocs.io/en/latest/api.html#discord.on_user_update
不幸的是,与 on_member_update 不同,on_user_update 不检查状态更新以及其他一些事情。但是您可以使用它来检查公会中的昵称更改。

关于python - discord py bot 触发两次 on_member_update 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61262111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com