首页 > 解决方案 > Discord.js client.on guildMemberAdd 多次触发

问题描述

正如标题所解释的,我在 discord.js (v12) bot 上有一个功能,它负责欢迎用户,并对他们施加特定的角色,这个:

client.on("guildMemberAdd", member => {
    member.roles.add('604250195001081859');
    member.guild.channels.cache.get("707323130523418686").send(`Hi ${member.user} blabla`);
    console.log(member.user.id + ' is in da house');
});

现在,我有一个问题:每次有人加入服务器时,就像这个事件被一遍又一遍地触发多次,淹没了频道。

显然,如果我设置“client.once”,则不会发生这种情况,但在这种情况下,该消息仅在用户第一次访问时给出,第二个不再收到它。

我一直在到处寻找答案,但我似乎是唯一遇到这个问题的人,我希望有人能帮助我。

ps 我想澄清一下,该机器人没有其他活动实例,并且它托管在一个小型 vultr 的 vps 上。

标签: javascriptnode.jsdiscorddiscord.jsbots

解决方案


好吧,过了一会儿我发现了问题......如果你在整个项目中遇到这个检查以找到这个方法调用:

client.login(<token>)

如果在 keepalive 函数中调用它,或者在任何情况下在服务器启动之后/之外多次调用的函数中调用它,它会创建一个新的 bot 实例,并且每个实例都会响应事件,从而有效地创建大量消息(在聊天消息的情况,但函数内部的任何操作都会根据创建的实例数重复)。

简而言之,login() 方法只需调用一次即可避免创建新实例。

是的,你现在可以把所有你想要的烂番茄都扔给我。


推荐阅读