【问题标题】:Discord.js client.on guildMemberAdd firing multiple timesDiscord.js client.on guildMemberAdd 多次触发
【发布时间】:2021-01-21 19:48:47
【问题描述】:

正如标题所解释的,我在 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”显然不会发生这种情况,但在这种情况下,消息仅在用户第一次访问时给出,第二次不再接收。

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

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

【问题讨论】:

    标签: javascript node.js discord discord.js bots


    【解决方案1】:

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

    【讨论】:

    • 好吧...我已经尝试按照您说的做...在第一个实例中似乎可以正常工作,但是几天后,一个人加入了服务器并且洪水再次发生。您的解决方案似乎对我不起作用:(
    • 在 discord:ItIsN3RD#4113 上加我,您能通过 discord 将您的代码发送给我,以便我查看。生成新令牌后,您是否对代码进行了任何更改并重新启动了您的机器人?
    • 我加你我是 Nerdomante#4529,但是我没有做任何更改并重新启动机器人(也因为如果我不这样做,不接受更改,它开始了永远的模块)
    【解决方案2】:

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

    client.login(<token>)
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 2021-02-02
      • 1970-01-01
      • 2021-11-12
      • 2021-10-02
      • 1970-01-01
      • 2022-12-14
      • 2022-01-09
      • 2021-09-04
      相关资源
      最近更新 更多