Bot命令没有按预期工作

时间:2017-01-15 06:24:32

标签: javascript arrays node.js discord.js

我已经在3小时的大部分时间内完成了这项工作,而且我即将把这部分扔掉,但我仍然想知道如何修复它。

免责声明 - 我是节点新手,我还在教自己js。这个机器人是我的第一个主要工作项目。

基本上我希望这个机器人根据所说的内容从数组中随机回答。

所以前四个阵列是用户会说的东西+机器人的名字。 (马科斯)

接下来的5个阵列是机器人应该随机选择的潜在响应。每个阵列有大约20个响应,因此我不会包含响应。

如果前四个数组中的所有单词都不与" Markos"一起使用,则应使用MENTION数组。

现在,只访问MENTION数组,我不知道为什么。洞察力会很棒。如果你能指出我正确的方向/解释我为什么做错了,我会非常感激。

let posGreet = ["hi", "hello", "hey", "yo", "greetings", "hallo", "Grüße"]
let posBye = ["bye", "goodbye", "later", "peace", "cya", "see you later", "tschüss", "auf wiedersehen", "bis später"]
let posThanks = ["thanks", "thank you", "vielen dank", "danke", "gracias"]
let posInsults = ["insults"]

let GREETINGS = ["too many to list"]
let THANKS = ["too many to list"]
let BYE = ["too many to list"]
let MENTION = ["too many to list"]
let INSULTS = ["too many to list"]

else if (message.content.toLowerCase().includes("markos")) {
    if (message.content.toLowerCase().includes(posGreet)) {
      message.reply(GREETINGS[Math.floor(Math.random() * GREETINGS.length)]);
    } else if (message.content.toLowerCase().includes(posThanks)) {
      message.reply(THANKS[Math.floor(Math.random() * THANKS.length)]);
    } else if (message.content.toLowerCase().includes(posBye)) {
      message.reply(BYE[Math.floor(Math.random() * BYE.length)]);
    } else if (message.content.toLowerCase().includes(posInsults)) {
      message.reply(INSULTS[Math.floor(Math.random() * INSULTS.length)]);
    } else { 
      message.reply(MENTION[Math.floor(Math.random() * MENTION.length)]);
    }
  }

1 个答案:

答案 0 :(得分:1)

包括期望子字符串,而不是数组。

请参阅String.prototype.includes()

在您的程序中,您将数组传递给包而不是子字符串。因此它将返回一个假值并将转到最后一个else子句 - 从MENTION数组打印。

如果要检查message.content是否包含数组中的任何字符串,则必须为其编写自定义逻辑。您可以参考Javascript. Checking if string contains text from an array of substrings