我正在 discord.js 中制作自定义动态嵌入帮助命令,如何嵌入命令信息?

Posted

技术标签:

【中文标题】我正在 discord.js 中制作自定义动态嵌入帮助命令,如何嵌入命令信息?【英文标题】:I'm making a custom dynamic embed help command in discord.js how do I embed the command information? 【发布时间】:2021-08-20 12:34:40 【问题描述】:

代码有效,当我执行 -help 时它会嵌入,但如果执行 -help command,它会显示未嵌入的文本。我将如何嵌入名称、别名、描述和冷却时间(动态)。

这是我尝试过的。

module.exports = 
  name: 'help',
  aliases: ['h'],
  description: 'A help Command',
  cooldown: 5,
  execute(message, args, cmd, client, Discord) 
    const data = [];
    const  commands  = message.client;
    const prefix = process.env.PREFIX;

    if (!args.length) 
      const title = 'Here\'s a list of all my commands:';
      const description = data.push(commands.map(command => command.name).join(', '));
      const footer = `You can send $prefixhelp [command name] to get info on a specific command!`;
      const helpEmbed = new Discord.MessageEmbed()
        .setColor('RANDOM')
        .setAuthor(message.author.tag, message.author.displayAvatarURL( dynamic: true ))
        .setTitle(title)
        .setDescription(data)
        .setTimestamp()
        .setFooter(footer);
      return message.author.send(helpEmbed)
        .then(() => 
          if (message.channel.type === 'dm') return;
            message.reply('I\'ve sent you a DM with all my commands!');
        )
        .catch(error => 
          console.error(`Could not send help DM to $message.author.tag.\n`, error);
          message.reply(`it seems like I can't DM you! Do you have DMs disabled?`);
        );
    
    const name = args[0].toLowerCase();
    const command = commands.get(name) || commands.find(c => c.aliases && c.aliases.includes(name));

    if (!command) 
      return message.reply('that\'s not a valid command!');
    
          
    data.push(`**Name:** $command.name`);
          
    if (command.aliases) data.push(`**Aliases:** $command.aliases.join(', ')`);
    if (command.description) data.push(`**Description:** $command.description`);
    if (command.usage) data.push(`**Usage:** $prefix$command.name $command.usage`);
    if (command.cooldown) data.push(`**Cooldown:** $command.cooldown seconds`);        
          
    message.channel.send(data,  split: true );
  

【问题讨论】:

【参考方案1】:

目前,您只是发送一个字符串数组,而不是embed object。对于create an embed,您可以执行以下操作之一:

使用MessageEmbed 构造函数:

const MessageEmbed = require("discord.js");

const embed = new MessageEmbed();
// dynamically add data using MessageEmbed methods
if (someCondition) embed.addField("name", "value");
if (anotherCondition) embed.setDescription("description");

使用对象创建嵌入:

const embed = 
  description: "",
  fields: []
;
// dynamically add data using basic javascript methods
if (someCondition) embed.fields.push(name: "name", value: "value");
if (anotherCondition) embed.description = "description";

查看docs 以查看可用于MessageEmbed 类的方法。

另一个有用的资源是Embed Visualizer。

【讨论】:

以上是关于我正在 discord.js 中制作自定义动态嵌入帮助命令,如何嵌入命令信息?的主要内容,如果未能解决你的问题,请参考以下文章

discord.js embedMsg 没有定义?

Discord.js 智能帮助嵌入

Discord.js 嵌入不显示

嵌入音乐机器人不工作/discord.js

将 JSON 中的值获取到 discord.js 嵌入中

自动更新嵌入 (discord.js)