【问题标题】:List all bot commands from specific category列出特定类别的所有机器人命令
【发布时间】:2021-10-09 21:16:18
【问题描述】:

我有一些来自特定类别的命令,我想在用户执行命令时列出它们! 例如我的一个命令:

const Discord = require('discord.js')
const { MessageEmbed } = require('discord.js')

module.exports = {
    name: "ping",
    description: "Bot websocket ping",
    category: "general",
    run: async (Raphy, message, args) => {
      message.channel.send(`${Raphy.ws.ping} ws ping`);
    }
}

如果用户执行!commands General,我想列出General 类别中的命令,我该怎么做?

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    一个简单的过滤器就可以了:

    let categoryCmds = message.client.commands.filter(c => c.category === args[0].toLowerCase())
    message.reply(categoryCmds.map(c => c.name).join(" **|** "))
    

    这是非常短的语法,很容易根据自己的喜好进行修改。

    【讨论】:

      【解决方案2】:

      为了使事情更清洁,请使用 Collection#filter()Collection#map(),这适用于 v12 和 v13。但是,请确保您运行的是 Node 14 或更高版本。

      const category = args[0].toLowerCase?.() || 'unspecified';
      const commandList = message.client.commands
         .filter(cmd => cmd.category == category)
         ?.map(cmd => cmd.name)
         ?.join(', ');
      if (!commandList) {
         message.reply(`Commands with category ${category} not found`);
      } else {  
         message.channel.send(`${category} command list: ${commandList}`);
      }
      

      Array-Like Methods for Collections

      【讨论】:

        【解决方案3】:

        要在变量中列出来自特定类别的所有命令,您可以使用以下代码:

        v12

        if(args[0]) {
        let list = ` `;
        let commands = message.client.commands.array();
        commands.forEach((cmd) => {
        if(cmd.category == args[0].toLowerCase()) {
        list = list.toString() + " **|** " + cmd.name.toString()
        }
        })
        if (list == ` `) {
        message.reply("Any commands in category or category does not exist!")
        } else {
        list = list.toString() + " **|**"
        message.channel.send(`${args[0].toLowerCase()} category commands list: ${list}`)
        }
        }
        

        v13

        if(args[0]) {
        let list = ` `;
        message.client.commands.each((cmd) => {
        if(cmd.category == args[0].toLowerCase()) {
        list = list.toString() + " **|** " + cmd.name.toString()
        }
        })
        if (list == ` `) {
        message.reply("Any commands in category or category does not exist!")
        } else {
        list = list.toString() + " **|**"
        message.channel.send(`${args[0].toLowerCase()} category commands list: ${list}`)
        }
        }
        

        【讨论】:

          猜你喜欢
          • 2021-04-21
          • 2021-08-09
          • 2018-11-03
          • 2020-10-26
          • 2021-04-30
          • 2021-02-02
          • 2010-10-31
          • 2021-04-05
          • 2021-06-20
          相关资源
          最近更新 更多