NodeJS Discord.js client.on guildMemberAdd多次触发

brvekthn  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(94)

正如标题所解释的,我在我的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”,就不会发生这种情况,但在这种情况下,消息只在用户第一次访问时发送给他们,后续用户不会收到它。
我到处寻找答案,但似乎我是唯一一个遇到这个问题的人。我希望有人能帮助我。
P.S.我想澄清的是,我没有任何其他活跃的机器人示例,它托管在一个小Vultr VPS上。

qzwqbdag

qzwqbdag1#

过了一段时间,我终于找到了问题所在。如果遇到此问题,请检查整个项目以找到此方法调用:

client.login(<token>)

如果它是在keepalive函数中调用的,或者在任何情况下,在服务器启动之后或之外多次调用的函数中调用的,它将创建一个新的bot示例。每个示例都将响应事件,从而导致大量消息(在聊天消息的情况下)或对每个创建的示例重复函数内的任何操作。
总之,login()方法只需要调用一次就可以防止创建新示例。
是的,如果你愿意,你现在可以把所有的烂番茄扔给我。

vm0i2vca

vm0i2vca2#

我经常遇到这种情况,去discord开发门户网站,生成一个新的令牌,并将新令牌粘贴到代码中。出于某种原因,它同时运行多个机器人示例并生成一个新令牌应该可以解决这个问题。我知道你说你没有多个示例运行,但你将无法看到的示例,这是一个奇怪的错误。

相关问题