无法使用多个前缀来处理 discord.js我该如何重写它以便它识别两个前缀?

问题描述

标题不言自明的。尝试弄乱以下代码的差异迭代。此版本识别 firstPrefix,但不识别 secondPrefix。我只希望我的 djs bot 能够识别两个前缀并相应地运行 Args 拆分。

const firstPrefix = '!test ';
const secondPrefix = '!testtwo ';

//Prefix
bot.on('message',message => {
    message.content = message.content.toLowerCase();
    if (message.author.bot || !message.content.startsWith(firstPrefix || secondPrefix))  {
        return;
    }

//Args split
    if (message.content.startsWith(firstPrefix)) {
        console.log("A")
        var args = message.content.slice(firstPrefix.length).split(/ +/);
    }
    else if (message.content.startsWith(secondPrefix)) {
        console.log("B")
        var args = message.content.slice(secondPrefix.length).split(/ +/);
    } 

我尝试过:

if (message.author.bot || !message.content.startsWith(firstPrefix) || !message.content.startsWith(secondPrefix))

但这根本不起作用。在这里很难过,任何帮助都会很棒。谢谢。

解决方法

您可以将前缀存储在一个数组中,然后使用 Array#some()

检查内容是否以任一前缀开头
const prefixes = ['!test ','!testtwo '];

bot.on('message',message => {
   ...
   if (prefixes.some(prefix => message.content.startsWith(prefix)) {
      ...
   }
});
,

您当前的代码(第二个代码块)将不起作用,就好像它以一个前缀开头,而不以另一个前缀开头,导致它产生一个真 if 语句,并且不执行您的命令。

在第一个代码块中,由于 firstPrefixsecondPrefix 都定义了值,因此 firstPrefix || secondPrefix 的计算结果为 firstPrefix

由于您想同时包含 firstPrefix AND secondPrefix,您应该这样做:

if (
  message.author.bot || /* if it is a bot */
  (!message.content.startsWith(firstPrefix) && /* does not start with first */
  !message.content.startsWith(secondPrefix))) /* and does not start with second */ {
  return;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...