You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js中如何通过命令参数自定义Embed嵌入消息

实现自定义Embed字段的命令方案

你现有代码仅配置了频道、描述2个入参,且参数获取逻辑没有兼容前缀命令场景,按以下步骤修改即可支持自定义标题、描述、颜色、页脚等任意Embed字段:

核心修改点

  • 扩展命令的参数定义,将需要自定义的Embed字段加入参数列表,非必填字段放在必填字段后
  • 统一前缀命令、slash命令的参数获取逻辑,避免某一种命令模式下拿不到参数
  • 动态判断入参是否存在,存在才调用Embed对应的设置方法,避免空值报错

修改后完整代码

const { MessageEmbed } = require("discord.js")

module.exports = {
    category: 'Role Select Msg',
    description: 'Sends a embeded message for roles or for announcemnts',

    permissions: ['ADMINISTRATOR'],

    slash: 'both',
    guildOnly: true,

    // 调整参数数量要求:必填2个(频道、描述),可选3个(标题、颜色、页脚)
    minArgs: 2,
    expectedArgs: '<channel> <description> [title] [color] [footer]',
    expectedArgsTypes: ['CHANNEL', 'STRING', 'STRING', 'STRING', 'STRING'],

    callback: ({ message, interaction, args }) => {
        // 统一获取目标频道
        const channel = message ? message.mentions.channels.first() : interaction.options.getChannel('channel')
        if (!channel || channel.type !== 'GUILD_TEXT'){
            return '请标记一个文本频道。'
        }

        // 统一获取各字段参数:前缀命令从args数组按索引取,slash命令从options取
        let description, title, color, footer
        if (message) {
            description = args[1]
            title = args[2]
            color = args[3]
            footer = args[4]
        } else {
            description = interaction.options.getString('description')
            title = interaction.options.getString('title')
            color = interaction.options.getString('color')
            footer = interaction.options.getString('footer')
        }

        // 动态组装Embed
        const embed = new MessageEmbed()
            .setDescription(description)
        
        // 非必填字段判断存在才设置
        if (title) embed.setTitle(title)
        if (color) embed.setColor(color)
        if (footer) embed.setFooter({ text: footer })
        // 需要新增作者、缩略图、时间戳、自定义字段等内容,参照上述逻辑扩展即可

        channel.send({ embeds: [embed] })

        if(interaction){
            interaction.reply({
                content: '消息发送成功!',
                ephemeral: true
            })
        }
    }
}

使用说明

  • Slash命令用法:/sendembed #公告 这是公告描述 这是公告标题 #FF0000 公告页脚内容
  • 前缀命令用法(假设命令前缀为!):!sendembed #公告 这是公告描述 这是公告标题 #FF0000 公告页脚内容
  • 不需要的可选参数可以直接省略不传,比如只需要自定义标题的话,后面的颜色、页脚参数留空即可。

注意:如果使用discord.js v14版本,需要把MessageEmbed替换为EmbedBuilder,引入路径从discord.js改为@discordjs/builders即可,核心逻辑完全一致。

内容的提问来源于stack exchange,提问作者user17646297

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:24:20