You need to enable JavaScript to run this app. discord.js报错:无法读取undefined的'MessageEmbed'属性,音乐机器人嵌入消息异常
优惠活动
大模型
产品
解决方案
定价
更多

discord.js报错:无法读取undefined的'MessageEmbed'属性,音乐机器人嵌入消息异常

问题原因

你遇到的报错核心通常是以下三类:

  1. Discord.js版本不兼容:这是最高发的原因
    • v12及更早版本:支持直接向send()方法传入MessageEmbed实例发送嵌入消息
    • v13版本:消息发送参数调整为结构化对象,Embed必须放入embeds数组字段才能识别
    • v14及以上版本:原有MessageEmbed类被移除,重命名为EmbedBuilder,原有声明方式直接报错
  2. 频道权限不足:机器人在目标文本频道没有嵌入链接权限时,Discord会直接拦截Embed消息返回报错
  3. 语法错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 19:21:01