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
相关产品推荐
相关产品推荐

