This commit is contained in:
Xargana 2025-04-16 22:55:29 +03:00
parent aca21351a0
commit 4b18ab3496

View file

@ -0,0 +1,82 @@
const { SlashCommandBuilder } = require('discord.js');
class CommandBase {
constructor(client) {
this.client = client;
this.name = '';
this.description = '';
this.options = [];
}
/**
* Execute the command
* @param {Interaction} interaction - The interaction object
*/
async execute(interaction) {
throw new Error('Method not implemented');
}
/**
* Defer the reply to the interaction
* @param {Interaction} interaction - The interaction object
* @param {boolean} ephemeral - Whether the reply should be ephemeral
*/
async deferReply(interaction, ephemeral = false) {
if (!interaction.deferred && !interaction.replied) {
await interaction.deferReply({ ephemeral });
}
}
/**
* Send a response to the interaction
* @param {Interaction} interaction - The interaction object
* @param {Object} options - The response options
* @param {boolean} ephemeral - Whether the response should be ephemeral
*/
async sendResponse(interaction, options, ephemeral = false) {
if (interaction.deferred || interaction.replied) {
await interaction.editReply(options);
} else {
options.ephemeral = ephemeral;
await interaction.reply(options);
}
}
/**
* Send an error response to the interaction
* @param {Interaction} interaction - The interaction object
* @param {string} message - The error message
*/
async sendErrorResponse(interaction, message) {
const errorEmbed = {
title: "Error",
description: message,
color: 0xFF0000,
timestamp: new Date()
};
if (interaction.deferred || interaction.replied) {
await interaction.editReply({ embeds: [errorEmbed] });
} else {
await interaction.reply({ embeds: [errorEmbed], ephemeral: true });
}
}
/**
* Convert the command to JSON for registration
*/
toJSON() {
const builder = new SlashCommandBuilder()
.setName(this.name)
.setDescription(this.description);
// Add options if defined in the child class
if (typeof this.addOptions === 'function') {
this.addOptions(builder);
}
return builder.toJSON();
}
}
module.exports = CommandBase;