Я делаю бота для разногласий, используя 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)
Что бы я ни менял, все заканчивается этой ошибкой в консоли.
Что должно произойти, когда я использую команду, так это то, что таблица появляется С кнопками, которые пользователь может атаковать.
Вы больше не используете MessageActionRow
или MessageButtonComponent
в Discord.js. Замените их на ActionRowBuilder
и ButtonBuilder
.