如何使我的机器人只回答我编写的命令?

时间:2020-09-27 06:53:47

标签: javascript discord discord.js

我的机器人正在回答一些我未编写的命令。 这是我的代码:

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.");

但这并不能解决问题。

2 个答案:

答案 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');