正如标题所解释的,我在discord.js(v12)机器人上具有一个函数,该函数负责欢迎用户并在其上施加特定角色,这是这样的:
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上。
答案 0 :(得分:0)
对我来说,这很常见,请访问discord dev门户并生成一个新令牌,然后将新令牌粘贴到您的代码中。由于某种原因,它可以同时运行您的机器人的多个实例并生成一个新令牌,从而可以解决该问题。我知道您说您没有正在运行的多个实例,但是您将无法看到这些实例,这是一个奇怪的错误。
答案 1 :(得分:0)
好的,过了一会儿我发现了问题......如果你在整个项目中遇到这个检查来找到这个方法调用:
client.login(<token>)
如果在 keepalive 函数中调用它,或者在任何情况下在服务器启动之后/之外多次调用的函数中调用它,它会创建一个新的机器人实例,每个实例都会响应事件,从而有效地创建大量消息(在聊天消息的情况下,但函数内部的任何操作都会根据创建的实例数量重复)。
简而言之,login() 方法只需要调用一次就可以避免创建新实例。
是的,你现在可以把所有你想要的烂番茄都扔给我。