Discord bot仍然在一个事件上回答多次

时间:2018-06-27 13:27:23

标签: javascript node.js discord.js

已经找到same issue,但是那里没有答案:C

使用Discord.js库,我的问题是相同的,这是我的代码:

 client.on('message', msg => {
     var splittedMessage = msg.content.split("#");
     if (msg.channel.type == "dm") {
         if (msg.content === "booya") {
             msg.channel.send('Hello there, ' + msg.author.username)
                 .then(msg => console.log('Sent #' + msg.id + ': ' + msg.content))
                 .catch(console.error);
             return
         } else {
             msg.channel.send('No query found')
                 .then(msg => console.log('Sent #' + msg.id + ': ' + msg.content))
                 .catch(console.error);
             return
         }
     }
 });

这是结果:Screenshot

2 个答案:

答案 0 :(得分:1)

事件message会在所有消息上触发,甚至是机器人发送的消息:

  

在创建消息时发出。

https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-message

因此,您通过发送消息不断触发事件。

解决方案是始终检查作者(如果它与bot本身不同)(bot-user属性为bot.userhttps://discord.js.org/#/docs/main/stable/class/Client?scrollTo=user

答案 1 :(得分:0)

首先,如果您使用的是Visual Studio Code,则可以运行同一程序/机器人的多个实例。 Visual Studio代码中的终端:
the terminal in Visual Studio Code

因此,每次编辑然后启动脚本时,它将创建一个“新”终端(另一个实例)。这些实例所在的位置:
where these instances are located

因此,然后在所有实例上按下回收按钮(在下拉菜单旁边)。然后再次启动脚本-应该没问题。