【问题标题】:discord.js bot replies to itselfdiscord.js 机器人回复自己
【发布时间】:2018-02-19 18:32:49
【问题描述】:

我目前正在编写我的第一个 discord 机器人,它已经可以播放 YouTube 音乐。

if (message.content.includes("Good Job") || 
    message.content.includes("good job")) {
    message.channel.sendMessage("Good Job everyone :smirk:");
}

如您所见,如果有人输入“干得好”(这只是一个示例),那么机器人会回复“每个人都干得好:smirk:),但随后就会开始垃圾邮件:机器人会读取自己的消息并回复它。

如何防止机器人自己回答?

【问题讨论】:

  • 查看邮件的发件人?如果机器人发送消息不要回复。
  • 检查用户或用户ID...
  • 始终在检查之前先将消息转换为小写/大写,而不是在 if 语句中检查消息的两个版本。只是给你一个提示!
  • @zGeek 我如何将 if (message.content = "xx") {} 中的消息转换为小写?
  • @gitgudgithub 创建一个像这样的变量:var msg = message.content.toLowerCase(); 然后使用 msg 变量进行字符串匹配。

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


【解决方案1】:

如果作者是机器人,您可以使用此代码来避免做任何事情:

if(message.author.bot) return;

【讨论】:

    【解决方案2】:

    你的机器人回复你自己的原因是因为你放的地方:

    if (message.content.includes("Good Job") || 
        message.content.includes("good job"))
    

    如果一段文本包含“干得好”或“干得好”的话,基本上就是检查聊天。当您的机器人发送时:

    message.channel.sendMessage("Good Job everyone :smirk:");
    

    作为答案,它创建了一个循环,因为该消息包含单词 “干得好”,基本上是一次又一次地运行代码。

    当然,解决此问题的最简单方法是让您更改它给出的答案,使其不包含 Good Job 字样,但有更好的解决方案来确保它不会发生您可能会发出的所有命令。

    正如@Jörmungandr 所说,在消息事件下包括:

    if (message.author.bot) return;
    

    以确保它不会发生。它本质上检查消息的作者是否是机器人,如果是,它会忽略它。

    【讨论】:

      【解决方案3】:
      // In message event
      if(message.author.id === client.user.id) return;
      
      // I would recommend a variable like this for splits on words
      // const args = message.content.trim().split(/\s+/g); 
      // You could also .slice() off a prefix if you have one
      
      if(/good job/i.test(message.content)) {
        message.channel.send('Good job everyone :smirk:'); // sendMessage is deprecated, use send instead
      }
      

      【讨论】:

        【解决方案4】:

        您可以简单地检查发送消息的用户是否是机器人。例如:

        if (!msg.author.bot) {
            <Your code to execute if the user is not a bot.>
        } 
        

        希望对您有所帮助,谢谢!

        【讨论】:

          【解决方案5】:

          在消息事件中使用它:

          if (message.author.bot) return;
          

          更多信息: https://anidiotsguide.gitbooks.io/discord-js-bot-guide/coding-guides/a-basic-command-handler.html

          【讨论】:

          • 我还想提一下:每当机器人“看到”一条新消息时,都会调用收到的消息处理程序。 (并且该消息包括来自机器人本身的消息!)这同样适用于您的帐户!尝试在您自己的服务器中 ping @everyone,您将看到弹出黄色高亮条,即使是您自己的消息。
          • 没想到!我通常有一个代码块(如果发件人不是机器人)围绕消息事件中的所有代码,并且所有内容都在其中,需要过滤。
          • if(message.author.username === client.user.username) {return;} 会更好,这样您也可以回复机器人。
          猜你喜欢
          • 2020-10-11
          • 2017-10-31
          • 2023-03-25
          • 1970-01-01
          • 2020-09-14
          • 2020-10-03
          • 1970-01-01
          • 2021-08-09
          • 2019-11-16
          相关资源
          最近更新 更多