无法获得多个前缀来使用 discord.js。我怎样才能重写它以便它识别两个前缀?

Posted

技术标签:

【中文标题】无法获得多个前缀来使用 discord.js。我怎样才能重写它以便它识别两个前缀?【英文标题】:Can't get multiple prefixes to work with discord.js. How can I rewrite this so that it recognizes both prefixes? 【发布时间】:2021-06-04 18:25:40 【问题描述】:

标题是不言自明的。尝试弄乱以下代码的差异迭代。此版本识别 firstPrefix,但不识别 secondPrefix。我只是希望我的 djs 机器人能够识别这两个前缀并相应地运行 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))

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

【问题讨论】:

【参考方案1】:

您可以将前缀存储在数组中,然后使用 Array#some() 检查内容是否以任一前缀开头

const prefixes = ['!test ', '!testtwo '];

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

【讨论】:

【参考方案2】:

您当前的代码(第二个代码块)将不起作用,就好像它以一个前缀开头,而不以另一个前缀开头,导致它产生一个真 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;

【讨论】:

以上是关于无法获得多个前缀来使用 discord.js。我怎样才能重写它以便它识别两个前缀?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 中的多个前缀

无法使用 discord.js 获得角色

如何让 discord.js 机器人在不包含前缀和命令名称的情况下重复用户的消息?

Discord bot 更改前缀命令出错 (discord.js)

Discord.js 如何使用机器人提及和设置前缀作为前缀

Discord.js - 在前缀和命令之后获取信息