我需要帮助来说明命令。
目前,我正在为每个命令手动进行嵌入,如果您有50条以上的命令,则会花费很多时间。我看过这样的东西:
exports.help = {
name: 'help',
description: 'Shows all the commands in the bot',
usage: 'rhelp',
inHelp: 'yes'
};
我输入的内容rhelp help
答案 0 :(得分:0)
因此请确保您拥有正确的对象:
var help = {
name: 'help',
description: 'Shows all the commands in the bot',
usage: 'rhelp',
inHelp: 'yes'
};
然后将以上内容转换为嵌入内容。 最好的方法可能是:
function turnToEmbed(object) {
return new Discord.RichEmbed()
.setColor("RANDOM")
.setTitle("Some handy dandy info on: "+object.title)
.addField("Description:",object.description,true)
.addField("Usage:",object.usage,true)
.setFooter("And voila :P");
}
message.channel.send({ embed: turnToEmbed(help) });
注意:如果我误解了,并且您想知道如何获取正确的对象,请告诉我。
答案 1 :(得分:0)
看到我误解了这个问题。 您想知道如何获取对象。 嗯,有几种方法可以做到这一点。
让我们说help.js
是您的示例对象
在test.js
中,另一个对象被轻微地更改了。
这就是我要继续的方式。
执行此方法时,是因为我有15条以上的命令。
在每个命令中都有一个像这样的对象
module.exports = {
help: {
name: 'help',
description: 'Shows all the commands in the bot',
usage: 'rhelp',
inHelp: 'yes'
},
run: function(args){
//Run the "help" command
}
}
每个命令都具有以上内容。所有信息和一个.run()
;
因此,在一个新文件中,我通常称其为command_manager.js
,因为它管理着所有命令。
因此,我通常在主文件中检查消息是否以前缀开头,然后将其传递给command_manager
,但有时我让命令管理器处理。但是重要的部分是command_manager有一个.load()
,当机器人打开时会被调用。
var prefix = "r";
var filesToLoad = ["help","test"];
module.exports = {
load:function(){
for(var i =0;i<filesToLoad.length;i++){
var file = require(fileToLoad[i]+".js");
//some code to make sure file is correct command.
this[fileToLoad[i]] = file;
}
}
runCommand:function(message){
var split = message.content.toLowerCase().split(" ");
split[0].substring(prefix.length,split[0].length);
var commandName = split.shift();
switch(commandName){
case "help": this.help.run(message,split,this);break;
case "test": this.test.run();break;
}
}
}
现在,命令管理器在help.js
内部工作
.run
函数必须像这样:
function(message,args,cmdManager){
if(cmdManager[args[0]] != null){
//using my function from my old answer
turnToEmbed(cmdManager[args[0].help]);
}
}
我将提供其他方法。但是在我看来,它们的效果并不理想,而且答案越来越长。