discord.js报错:无法读取undefined的'MessageEmbed'属性,音乐机器人嵌入消息异常
问题原因
你遇到的报错核心通常是以下三类:
- Discord.js版本不兼容:这是最高发的原因
- v12及更早版本:支持直接向
send()方法传入MessageEmbed实例发送嵌入消息 - v13版本:消息发送参数调整为结构化对象,Embed必须放入
embeds数组字段才能识别 - v14及以上版本:原有
MessageEmbed类被移除,重命名为EmbedBuilder,原有声明方式直接报错
- v12及更早版本:支持直接向
- 频道权限不足:机器人在目标文本频道没有
嵌入链接权限时,Discord会直接拦截Embed消息返回报错 - 语法错误:
await关键字必须在标记了async的函数内部使用,否则会抛出语法错误
修复方案
按你使用的Discord.js版本选择对应修改方式:
如果你使用v13.x版本
仅修改发送Embed的代码行即可:
// 把原有的 await song_queue.text_channel.send(replyEmbed) 替换为下面的代码 await song_queue.text_channel.send({ embeds: [replyEmbed] })
如果你使用v14.x及以上版本
需要同时修改Embed声明和发送逻辑:
// 首先导入EmbedBuilder,如果你已经全局导入Discord可以直接用Discord.EmbedBuilder const { EmbedBuilder } = require('discord.js'); // 修改Embed实例声明 const replyEmbed = new EmbedBuilder() .setColor('#FF2D00') .setTitle('🎶 Now Playing 🎶') .setDescription(`${song.title} [${message.author}]`) // 按新规则发送 await song_queue.text_channel.send({ embeds: [replyEmbed] })
额外检查项
- 确认机器人在对应的文本频道已开启
嵌入链接权限 - 确认你这段代码所在的函数已添加
async修饰,例如:async function video_player(guild, song) { // 你的业务逻辑写在这里 } - 如果需要在描述里@用户,把
message.author改为message.author.toString(),避免显示为[object Object]
内容的提问来源于stack exchange,提问作者Caleb Burling
相关产品推荐
相关产品推荐

