我正计划在我的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语句吗?
答案 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);