所以我试图使一个动态的帮助命令,将能够响应特定类别的命令。例如,当有人使用!help
时,我希望机器人能够这样响应。选择一个类别来显示他们的命令:
Cat1
Cat2
Cat3
因此,如果有人决定要查看Cat2的命令,它就会显示该特定类别中的命令列表。
到目前为止,我发现的关于创建动态帮助命令的信息只涉及显示每个命令。如何在指定的子文件夹中显示命令?
有一种方法,如果你有一个命令处理程序(一种方法,使你有一个文件夹的多个命令文件,并在你的主文件中使用它们的方法),你可以把不同的命令类别在每个文件。例如,像这样的文件:
module.exports = {
name : "dosomething",
description : "will do some stuff"
run : (client,message,args) =>{
// stuff
}
您可以添加category
键,以便在特定类别中定义bot上的每个命令:
module.exports = {
name : "dosomething",
description : "will do some stuff",
category : "useful"
run : (client,message,args) =>{
// stuff
}
这样,每个命令都有它自己的类别。在这种情况下,您必须为属于它的每个命令设置完全相同的类别。
然后,如果您想显示它们,您可以在命令数组上使用.filter
函数,以便您只显示属于特定类别的命令
let args = message.content.split(' ').slice(1)
let category = args[0].toLowerCase() // The first argument on the command will be the category the user asked for
let allCommands = // Here you put an array of all your commands (in most guides, it's client.commands )
let commands = allCommands.filter(command => command.category === category)
if(!commands.length) return message.channel.send(`No command found for `${category}``);
message.channel.send(`The commands of the category `${category}` are : ` +
commands.map(cmd => cmd.name) // We only want to show their names (it's not necessarly '.name', again it depends on your command handler and the key you set to have the value of the name of the command
.join(' - ') // Since it is an array of command names we will have to convert it into a string to avoid errors.
)
如果你想显示每一个(例如),你可以使用.map
对类别本身显示自己的命令
let categories = ["Utility","NSFW","Useful","Image"...]
let embed = new Discord.MessageEmbed()
categories.map(category =>{
category.name + ' : ' + client.commands.filter(c => c.category == category).map(c.name)
})
请注意,我不建议您使用我的确切代码,我刚刚才创建了它们,所以请确保使它们适应您的变量等。