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

Discord.js v14:重写/dm斜杠命令发送DM嵌入消息的代码

Discord.js v14 实现/dm斜杠命令发送Embed私信

原代码问题修正及功能升级说明

  • 修复SlashCommandBuilder语法错误,将const data =改为对象属性data:,移除多余的.setRequired(true)
  • 改用options.getUser('user')获取用户对象(而非服务器成员),确保能正确发起DM
  • 引入EmbedBuilder构建嵌入式消息
  • 将文本消息发送逻辑替换为Embed格式发送
  • 优化错误处理流程,确保交互反馈更准确

完整重写代码

const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('dm')
        .setDescription('向指定用户发送Embed格式私信')
        .addUserOption(option =>
            option.setName('user')
                .setDescription('目标用户')
                .setRequired(true))
        .addStringOption(option =>
            option.setName('content')
                .setDescription('Embed内的消息内容')
                .setRequired(true)),

    async execute(interaction) {
        const targetUser = interaction.options.getUser('user');
        const messageContent = interaction.options.getString('content');

        // 禁止给自己发私信
        if (targetUser.id === interaction.client.user.id) {
            return interaction.reply({
                content: '我不能给自己发私信!',
                ephemeral: true // 仅自己可见
            });
        }

        // 构建Embed
        const dmEmbed = new EmbedBuilder()
            .setColor('#2b2d31')
            .setDescription(messageContent)
            .setTimestamp()
            .setFooter({ text: `来自 ${interaction.user.tag} 的消息`, iconURL: interaction.user.displayAvatarURL() });

        try {
            // 发送DM
            await targetUser.send({ embeds: [dmEmbed] });
            
            // 发送成功反馈
            await interaction.reply({
                content: `已成功向 ${targetUser.tag} 发送Embed私信!`,
                ephemeral: true
            });
        } catch (err) {
            console.error('发送DM失败:', err);
            // 发送失败反馈
            await interaction.reply({
                content: `无法向 ${targetUser.tag} 发送私信,请检查对方是否开启了私信权限或与机器人在同一服务器`,
                ephemeral: true
            });
        }
    }
};

额外说明

  • 新增ephemeral: true让交互回复仅命令执行者可见,避免频道冗余信息
  • Embed的样式可以根据需求调整setColor、setTitle等参数
  • 错误捕获覆盖了用户拒绝DM、无法找到用户等常见场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:38:17