You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:30:09