discord.js v13斜杠命令中Embed嵌入功能无法正常工作
Discord.js v13斜杠命令发送Embed报错修复
你的代码里有两个核心问题,导致Embed发送失败:
- 错误使用未定义的
message对象:斜杠命令的上下文是interaction对象,而非传统消息事件里的message,代码里的message.author、message.guild都未定义,这就是报错根源。 - 斜杠命令回复方式不规范:Discord要求斜杠命令必须在3秒内完成回复,使用
interaction.reply()才是符合规范的回复方式,而非直接调用channel.send()。
修正后的完整代码如下:
const { MessageEmbed, Permissions } = require("discord.js"); const { SlashCommandBuilder } = require("@discordjs/builders"); module.exports = { data: new SlashCommandBuilder().setName("ahelp").setDescription("获取提问命令的使用说明"), run: async (client, interaction) => { const embed = new MessageEmbed() .setTitle(`如何让BrainCord <:logo:1079747150113681458> 理解你的需求!`) .setTimestamp() .setAuthor(interaction.user.tag, interaction.user.avatarURL({ dynamic: true })) .setDescription( `> **第一:你的提示语要__清晰易懂且稍长__,这样机器人才能准确理解你的需求。** > **第二:不要像这样写命令:B! <prompt>,机器人会把空格当成需要处理的内容,正确写法是B!<prompt>。** > **第三:注意提示语里的__标点符号__,让机器人知道这是问题还是其他类型的请求。** > **第四:最终的提问命令格式是__B!<prompt>__,不要用其他格式。** > __**重要提示**__ > 1 : **会自动拒绝不当请求** > 2 : **偶尔可能生成错误信息** > 3 : **对2021年之后的世界事件了解有限** ` ) .setColor("#2F3136") .setFooter(interaction.guild.name, interaction.guild.iconURL({ dynamic: true })); await interaction.reply({ embeds: [embed] }); }, };
修改细节说明
- 把所有
message.author替换为interaction.user:斜杠命令中,发起命令的用户信息存于interaction.user对象 - 把所有
message.guild替换为interaction.guild:服务器信息同样从interaction对象获取 - 将
interaction.channel.send()改为interaction.reply():遵循Discord斜杠命令的标准回复逻辑,避免超时或合规问题
内容的提问来源于stack exchange,提问作者GEYO 5
相关产品推荐
相关产品推荐

