【问题标题】:Discord bot still answering multiple times on one eventDiscord 机器人仍然在一个事件上多次回答
【发布时间】:2018-12-06 10:10:22
【问题描述】:

已经找到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

【问题讨论】:

  • 是否有可能client.on('message') 也被调用以获取机器人本身发送的消息?你试过console.log(message) 看看发生了什么吗?
  • @AKX 例如,这段代码只能正常工作一次:https://pastebin.com/3e9K6S16

标签: javascript node.js discord.js


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

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

每当创建消息时发出。

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

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

解决方案是始终检查作者是否与机器人本身不同(bot-user 属性为 bot.user : https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=user

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2020-01-25
    • 2020-07-08
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多