Discord机器人投票嵌入消息报错:TypeError: MessageEmbed is not a constructor
问题原因
你遇到的错误是因为Discord.js v13及更高版本已弃用MessageEmbed构造器,改用EmbedBuilder类来创建嵌入消息。如果你的项目安装的是最新版Discord.js,继续调用new MessageEmbed()自然会触发"不是构造函数"的错误。
修正后的代码
情况1:使用Discord.js v13+(推荐,最新稳定版)
如果你的项目依赖的是v13或更高版本,需要改用EmbedBuilder:
CommonJS(require语法)
const { Client, EmbedBuilder, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] }); client.on('messageCreate', async (message) => { if (message.content === '!vote') { // 创建投票嵌入 const voteEmbed = new EmbedBuilder() .setColor('#0099ff') .setTitle('投票:你最喜欢的编程语言?') .setDescription('请用表情符号投票:\n🔹 JavaScript\n🔸 Python\n🔶 Java') .setTimestamp(); // 发送嵌入消息并添加表情 const voteMessage = await message.channel.send({ embeds: [voteEmbed] }); await voteMessage.react('🔹'); await voteMessage.react('🔸'); await voteMessage.react('🔶'); } }); client.login('你的机器人令牌');
ES模块(import语法)
import { Client, EmbedBuilder, GatewayIntentBits } from 'discord.js'; const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] }); client.on('messageCreate', async (message) => { if (message.content === '!vote') { const voteEmbed = new EmbedBuilder() .setColor('#0099ff') .setTitle('投票:你最喜欢的编程语言?') .setDescription('请用表情符号投票:\n🔹 JavaScript\n🔸 Python\n🔶 Java') .setTimestamp(); const voteMessage = await message.channel.send({ embeds: [voteEmbed] }); await voteMessage.react('🔹'); await voteMessage.react('🔸'); await voteMessage.react('🔶'); } }); client.login('你的机器人令牌');
情况2:坚持使用Discord.js v12及更低版本
如果你一定要用旧版,确保安装的是v12.x,然后这样写:
const Discord = require('discord.js'); const client = new Discord.Client(); client.on('message', async (message) => { if (message.content === '!vote') { const voteEmbed = new Discord.MessageEmbed() .setColor('#0099ff') .setTitle('投票:你最喜欢的编程语言?') .setDescription('请用表情符号投票:\n🔹 JavaScript\n🔸 Python\n🔶 Java') .setTimestamp(); const voteMessage = await message.channel.send(voteEmbed); await voteMessage.react('🔹'); await voteMessage.react('🔸'); await voteMessage.react('🔶'); } }); client.login('你的机器人令牌');
关键注意点
- v13+版本发送嵌入消息时,参数是
{ embeds: [embed实例] },而v12及以前直接传embed实例即可。 - v13+必须声明所需的意图(Intents),否则无法接收消息等事件,代码里已经包含了必要的意图。
- 可以通过
npm list discord.js命令查看当前安装的版本,确认对应写法。
内容的提问来源于stack exchange,提问作者delyrious
相关产品推荐
相关产品推荐

