Discord.js v14.14.1报错:EmbedBuilder未定义,重装依赖无效
解决ReferenceError: EmbedBuilder is not defined报错
核心原因及修复方案
1. 检查Discord.js版本
EmbedBuilder是Discord.js v14及以上版本新增的类,若你安装的是v13或更低版本,必然会出现该报错。
- 查看当前Discord.js版本:
npm list discord.js - 针对不同版本的处理方式:
- 升级到v14+:
注意:升级后需适配v14的API变化(比如消息发送参数调整,下文会说明)npm install discord.js@latest - 保留旧版本并修改代码:将代码中的
EmbedBuilder替换为旧版的MessageEmbed,同步更新导入语句:const { SlashCommandBuilder, MessageEmbed, PermissionFlagsBits } = require('discord.js');
- 升级到v14+:
2. 代码中的其他错误修复
即使解决了EmbedBuilder的问题,你的代码仍有两处错误会导致后续报错:
- 错误导入
guild:guild并非discord.js的导出成员,需从interaction对象中获取服务器信息:// 替换原setFooter代码行 .setFooter({ text: `${interaction.guild.name}` }); - 消息发送参数错误:v14版本中发送嵌入消息需使用
embeds数组,而非embed:await channel.send({ embeds: [embed] }); - 参数名大小写不匹配:
addChannelOption中设置的参数名是小写channel,获取时需保持一致:const channel = interaction.options.getChannel('channel');
修复后的完整代码示例
const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('test') .setDescription('test') .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .addChannelOption(option => option.setName('channel') .setRequired(true) .setDescription('Choose a channel to send this embed to.'), ), async execute(interaction) { const channel = interaction.options.getChannel('channel'); const embed = new EmbedBuilder() .setTitle("Title") .setDescription("Description") .setFooter({ text: `${interaction.guild.name}` }); await channel.send({ embeds: [embed] }); await interaction.reply({ content: 'Embed has been sent', ephemeral: true, }); }, };
内容的提问来源于stack exchange,提问作者CrazyNation
相关产品推荐
相关产品推荐

