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

Posted

技术标签:

【中文标题】Discord.js 如何使用机器人提及和设置前缀作为前缀【英文标题】:Discord.js how to use bot mention and a set prefix as prefixes 【发布时间】:2020-11-25 13:51:27 【问题描述】:

我想这样做,如果我这样做[prefix] [command],它会产生与[mention bot] [command] 相同的效果,但我创建命令和参数的方式使这变得困难:

前缀存储为var prefix = '!3';

这就是我创建命令的方式:

bot.on('message', msg => 

    if (!msg.content.startsWith(prefix) || msg.author.bot)
        return;

  //the first message after '!13 '
        //!
    let args = msg.content.toLowerCase().substring(prefix.length).split(" ");
                           //^
          //any capitalisation is allowed (ping,Ping,pIng etc.)

switch(args[1]) 
      case 'ping': //if user inputs '!3 ping'
            msg.channel.send('Pong!') //send a message to the channel 'Pong!'
//switch (command) ends here
;//event listener ends here

【问题讨论】:

【参考方案1】:

您可以拥有一个预定义前缀列表并循环遍历该列表以确定味精是否具有该列表中的前缀。

let prefixList = ['!31 ', '!asdf ', `<@$bot.user.id> `, `<@!$bot.user.id> `]

function hasPrefix(str) 
    for(let pre of prefixList)
        if(str.startsWith(pre))
            return true;
    return false;

&lt;@$bot.user.id&gt; &lt;@!$bot.user.id&gt; 将设置机器人提及作为前缀。

【讨论】:

好答案 :D 也帮助了我 我必须补充一点,我不建议使用 bot 提及作为命令的主要前缀,因为很明显 Discord 创建了一个与您的 bot 同名的角色。用户很容易不小心提到角色而不是机器人。我上面提供的代码不包括作为前缀的角色提及。 这是我收到的错误 ``` ['!3', ' ', ' '] ^ 类型错误:无法读取 null ``` 的属性 'id' 我建议你将那部分代码放在 bot.on('message', ...) 或 bot.on('read', ...) 中【参考方案2】:

这是secretlyrice's 答案的简短版本:

const startsWithPrefix = (command) => 
['!prefix1 ', '!prefix2', <@botId>, <@!botId>].some(p => command.startsWith(p))

【讨论】:

请在您的答案中添加一些解释,以便其他人可以从中学习

以上是关于Discord.js 如何使用机器人提及和设置前缀作为前缀的主要内容,如果未能解决你的问题,请参考以下文章

(discord.js) 如何提及对机器人消息做出反应的用户?

discord.js 如何在不提及已记录用户的情况下记录用户名以供将来使用?

如果消息以前缀 + 使用 discord.js 的命令开头,如何使 if 语句起作用

如何从提及 discord.js 添加角色

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

Discord.js Bots // 尝试在主文件中添加多个机器人,设置状态,随机化欢迎消息,多个前缀