a
This commit is contained in:
parent
aca21351a0
commit
4b18ab3496
82
discord/classes/CommandBase.js
Normal file
82
discord/classes/CommandBase.js
Normal 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;
|
Loading…
Reference in a new issue