Как решить проблему с созданием встраиваемого объекта в команде Discord.js v14?

Как создать embed в команде Discord с использованием discord.js? В моем коде возникает ошибка "TypeError: EmbedBuilder is not a constructor". Вот пример кода:

```javascript
const { SlashCommandBuilder } = require('discord.js');
const { MessageEmbed } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('help')
        .setDescription('Получи помощь'),
    async execute(interaction) {
        const helpEmbed = new MessageEmbed()
            .setColor(0xff8c40)
            .setTitle('титл мастир')
            .setDescription('дескриптиан');

        await interaction.reply({ embeds: [helpEmbed] });
    }
}
```

Как можно исправить данную ошибку?
  • 7 апреля 2024 г. 9:19
Ответы на вопрос 2
В Discord.js v13 и выше, `EmbedBuilder` был заменен на `MessageEmbed`. В вашем коде вы уже правильно импортировали `MessageEmbed` из `discord.js`, однако ошибка может возникать из-за неправильного использования. 

В вашем коде вы пытаетесь создать `new MessageEmbed()`, что должно работать правильно. Попробуйте установить Discord.js напрямую из npm и перезапустить ваш проект:

```bash
npm install discord.js
```

Если проблема не устранится, попробуйте обновить Node.js до последней версии и проверьте, что все зависимости установлены правильно.

Если проблема все еще остается, возможно есть другая причина ошибки. Проверьте весь ваш код, чтобы исключить другие возможные проблемы.
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('help')
        .setDescription('Получи помощь'),
    async execute(interaction) { // <== (•)
        const helpEmb = new EmbedBuilder()
            .setColor(0xff8c40)
            .setTitle('титл мастир')
            .setDescription('дескриптиан');

        await interaction.reply({ embeds: [helpEmb] });
    }
}


вы в качестве параметра функции execute (•) указываете переменную с названием, аналогичным названию переменной сверху в
const { SlashCommandBuilder, /* этой ==> */ EmbedBuilder /* <== этой */ } = require("discord.js");

...и в функции, соответственно, используется локальная переменная EmbedBuilder ( почему? ), когда должна использоваться внешняя, для корректной работы кода.

достаточно будет заменить название EmbedBuilder на любое другое: я заменил выше на interaction , т.к если у вас правильно настроена обработка команд в основном файле, аргументом этой функции будет CommandInteraction .

кроме того, когда выполнение кода дойдёт до channel.send(...) , вылетит ошибка, поскольку channel не было нигде определено до этого — заменил на interaction.reply(...)
Похожие вопросы