Работаю над discord.js v14.9.0, ошибка TypeError: MessageActionRow не является конструктором

Я делаю бота для разногласий, используя discord.js v14.9.0. Вообще-то, я работаю в боевой команде.

Это мой код:

const { SlashCommandBuilder } = require('@discordjs/builders');
const { MessageActionRow, MessageButtonComponent, Discord } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('combate')
        .setDescription('Empieza un combate contra un slime.'),
    async execute(interaction) {
        // Variables del usuario
        let usuario_vida = 100;
        let usuario_ataque = 0;

        // Variables del slime
        let slime_vida = 50;
        let slime_ataque = 0;

        // Función para lanzar el dado
        function rollDice(dado) {
            return Math.floor(Math.random() * dado) + 1;
        }

        // Función para mostrar el resultado del combate
        function mostrarResultado(ataque, defensa, ataque_roll, defensa_roll) {
            let resultado = "";
            resultado += `El ${ataque} ha atacado y ha hecho ${ataque_roll} puntos de daño.\n`;
            resultado += `La ${defensa} ha recibido ${ataque_roll} puntos de daño y ahora tiene ${defensa_roll} puntos de vida.`;
            return resultado;
        }



            function mostrarTablaVidas(vida_usuario, vida_slime) {
            let tabla = "```";
            tabla += `Slime: ${vida_slime} puntos de vida\n`;
            tabla += "- - -\n- - -\n- - -\n- - -\n- - -\n";
            tabla += `Usuario: ${vida_usuario} puntos de vida\n` + "```";
            return tabla;
        }

        // Función para actualizar la tabla de vidas
        async function actualizarTablaVidas(interaction, vida_usuario, vida_slime) {
            const tabla = mostrarTablaVidas(vida_usuario, vida_slime);
            const row = new MessageActionRow()
                .addComponents(
                    new MessageButtonComponent()
                        .setCustomId('ataque')
                        .setLabel('Atacar')
                        .setColor('PRIMARY')
                );
            await interaction.editReply({ content: tabla, components: [row] });
        }

        // Mostrar la tabla de vidas y el botón de ataque
        await actualizarTablaVidas(interaction, usuario_vida, slime_vida);

        // Registrar la función que se llamará cuando se haga clic en el botón de ataque
        const filter = i => i.customId === 'ataque' && i.user.id === interaction.user.id;
        const collector = interaction.channel.createMessageComponentCollector({ filter, time: 15000 });
        collector.on('interactionCreate', async (buttonInteraction) => {
            if (buttonInteraction.isButton() && buttonInteraction.customId === 'ataque') {
                // El usuario ataca al slime
                const ataque_roll = rollDice(6);
                slime_vida -= ataque_roll;
                const resultado_usuario = mostrarResultado("usuario", "slime", ataque_roll, slime_vida);

                            // El slime ataca al usuario
            const defensa_roll = rollDice(4);
            usuario_vida -= defensa_roll;
            const resultado_slime = mostrarResultado("slime", "usuario", defensa_roll, usuario_vida);

            // Actualizar la tabla de vidas
            await actualizarTablaVidas(buttonInteraction, usuario_vida, slime_vida);

            // Mostrar el resultado del ataque
            await buttonInteraction.followUp({ content: resultado_usuario + "\n" + resultado_slime });

            // Comprobar si el combate ha terminado
            if (usuario_vida <= 0) {
                await buttonInteraction.followUp({ content: "Has perdido el combate." });
                collector.stop();
            } else if (slime_vida <= 0) {
                await buttonInteraction.followUp({ content: "Has ganado el combate." });
                collector.stop();
            }
        }
    });

    // Tiempo máximo de espera para el botón de ataque
    collector.on('end', async () => {
        await interaction.editReply({ content: "El combate ha terminado." });
    });
},
};

И это ошибка, которая продолжает появляться в консоли каждый раз, когда я пытаюсь использовать команду de:

TypeError: MessageActionRow не является конструктором в актуализарTablaVidas (C:\Users\usago\OneDrive\Escritorio\RpgBot\commands\combate.js:43:25) в Object.execute (C:\Users\usago\OneDrive\Escritorio\RpgBot\commands\combate.js:54:15) у Клиента. (C:\Users\usago\OneDrive\Escritorio\RpgBot\index.js:33:17) в Client.emit (узел:события:513:28) в InteractionCreateAction.handle (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\discord.js\src\client\actions\InteractionCreate.js:97:12) в module.exports [как INTERACTION_CREATE] (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\discord.js\src\client\websocket\handlers\INTERACTION_CREATE.js:4:36) в WebSocketManager.handlePacket (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:352:31) в WebSocketShard.onPacket (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:494:22) в WebSocketShard.onMessage (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:328:10) в callListener (C:\Users\usago\OneDrive\Escritorio\RpgBot\node_modules\ws\lib\event-target.js:290:14)

Что бы я ни менял, все заканчивается этой ошибкой в ​​консоли.

Что должно произойти, когда я использую команду, так это то, что таблица появляется С кнопками, которые пользователь может атаковать.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы больше не используете MessageActionRow или MessageButtonComponent в Discord.js. Замените их на ActionRowBuilder и ButtonBuilder.

Другие вопросы по теме