import { ChatInputCommandInteraction, MessageFlags } from "discord.js"; import { AuroraClient } from "@/lib/BotClient"; import { userService } from "@shared/modules/user/user.service"; import { createErrorEmbed } from "@lib/embeds"; /** * Handles slash command execution * Includes user validation and comprehensive error handling */ export class CommandHandler { static async handle(interaction: ChatInputCommandInteraction): Promise { const command = AuroraClient.commands.get(interaction.commandName); if (!command) { console.error(`No command matching ${interaction.commandName} was found.`); return; } // Check maintenance mode if (AuroraClient.maintenanceMode) { const errorEmbed = createErrorEmbed('The bot is currently undergoing maintenance. Please try again later.'); await interaction.reply({ embeds: [errorEmbed], flags: MessageFlags.Ephemeral }); return; } // Ensure user exists in database try { await userService.getOrCreateUser(interaction.user.id, interaction.user.username); } catch (error) { console.error("Failed to ensure user exists:", error); } try { await command.execute(interaction); AuroraClient.lastCommandTimestamp = Date.now(); } catch (error) { console.error(String(error)); const errorEmbed = createErrorEmbed('There was an error while executing this command!'); if (interaction.replied || interaction.deferred) { await interaction.followUp({ embeds: [errorEmbed], flags: MessageFlags.Ephemeral }); } else { await interaction.reply({ embeds: [errorEmbed], flags: MessageFlags.Ephemeral }); } } } }