创建一个帮助命令,该命令将为其他命令发送不同的消息

时间:2018-11-24 00:45:46

标签: discord.js

我需要帮助来说明命令。
目前,我正在为每个命令手动进行嵌入,如果您有50条以上的命令,则会花费很多时间。我看过这样的东西:

exports.help = {
  name: 'help',
  description: 'Shows all the commands in the bot',
  usage: 'rhelp',
  inHelp: 'yes'
};

如何将其实现为嵌入?看起来应该像这样:
Embed picture

我输入的内容rhelp help

2 个答案:

答案 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]);
      }
 }

我将提供其他方法。但是在我看来,它们的效果并不理想,而且答案越来越长。