使用switch语句向消息添加响应

时间:2020-08-13 02:37:41

标签: node.js switch-statement discord discord.js

我正计划在我的discord机器人中添加多个反应命令(因为它是出于娱乐目的而创建的,所以我希望人们能通过它找到有趣的东西),并且希望将其转换为切换语句,以便我可以正确地进行操作看看哪去了,没有大量的if语句。这是我的代码当前与if语句的外观,以及与switch语句一起使用的效果,尽管效果不尽如人意。 (尽管具有不同的include和emoji表情,但是这使我目前所拥有的非常尴尬)

if (message.content.includes('test')) {
        message.react("?")
    switch (message.content.toLowerCase()) {
        case 'test':
            message.react("?")
            break;
}

有点奏效,尽管大写,但对仅包含“ test”一词的任何东西都有反应,但是对于这个机器人,我希望它能够检测消息中任何地方的单词,所以我决定尝试:

    switch (message.content.includes()) {
        case 'test': 
            message.react("?")
            break;

但这最终根本不起作用

关于如何使用switch语句的任何建议,或者尽管需要大量语句,我还是应该坚持使用if语句吗?

3 个答案:

答案 0 :(得分:0)

类似的东西吗?

const reactToMessage = message => {
  const messageTriggers = {
    'cat': () => {
      message.react('?')
    },
    'dog': () => {
      message.react('?')
    },
    'cow': () => {
      message.react('?')
    }
  }

  Object.keys(messageTriggers).forEach(trigger => {
    message.toLowerCase().includes(trigger) && messageTriggers[trigger]()
  })
}

// Usage
reactToMessage('Cat and dog goes to Cow!')

答案 1 :(得分:0)

首先,includes()返回一个布尔值,因此大小写必须为True或False。我会将您的开关包装在一个函数中,并将其包装在一个for循环中:

triggerArray = ["test", "this", "that"];
triggerArray.forEach(myFunc);
function myFunc(item){
  switch (message.content.includes()) {
    case 'test': 
        message.react("?")
        break;
  }
}

答案 2 :(得分:0)

const messageToLower = message.content.toLowerCase(); 

switch(true) {
    case messageToLower.includes('test'): message.react("?");break;
}

应该起作用,因为includes()需要具有一个值。 如果您想检查多个值,我建议。

var item=[{id:"test",message:"?"},{id:"stuff",message:"?"}, 
{id:"t",message:"?"}];
function message(item,messageToLower){
    for(var i=0; i< item.length; i++){
        if(item[i].id==messageToLower){
           message.react(item[i].message);
           break;
        }
    }
}

const messageToLower = message.content.toLowerCase(); 
message(messageToLower);