我的机器人正在回答一些我未编写的命令。 这是我的代码:
else if (!command === 'cctech' || 'tomorrow'){
client.commands.get('advance01').execute(message, args);
我尝试穿上它:
const command = client.commands.get(command);
if (!command) return message.channel.send("Invalid Command.");
但这并不能解决问题。
答案 0 :(得分:1)
似乎是一个问题:
if (!command === 'cctech' || 'tomorrow'){
尝试一下...
if (!command === 'cctech' && !command === 'tomorrow'){
答案 1 :(得分:0)
问题出在这行代码中:
if (!command === 'cctech' || 'tomorrow')
首先,!command === 'cctech'
基本上是在写command
的对数是否等于'cctech'
。检查两个值是否相等的正确方法是使用!==
。
第二,如果两个输入之一为真,则逻辑||
运算符将返回true
。单独的字符串,例如tomorrow
,将永远是真实的。
if ('random string') console.log("'random string' is truthy");
const str = 'something'
if (str === 'hello' || 'goodbye')
console.log('Even though the first expression is falsy, the second input is a stand alone string, which returns `true`')
不幸的是,我们不能采用这样的快捷方式,我们必须将整个表达式写两次。另外,您应该使用逻辑&&
运算符,因为在这种情况下,两者输入均应为真。
if (command !== 'cctech' && !command !== 'tomorrow
但是,即使您的方法不是可行的快捷方式,我们仍然可以通过几种方法来简化此方法。想到的两种最主要的方式是Array.prototype.includes
()和RegEx.prototype.test()
。这是一个示例:
const str = 'something';
if (str !== 'hello' && str !== 'goodbye')
console.log('This will work');
// if one of the array elements is the command
if (!['hello', 'goodbye'].includes(str))
console.log('This will work too');
// test a RegEx against the command string
if (!/hello|goodbye/.test(str))
console.log('This will work as well');