{"version":3,"sources":["../src/handler.ts","../src/decorators.ts","../src/utils.ts"],"sourcesContent":["import {\n  Client,\n  Collection,\n  GatewayIntentBits,\n  SlashCommandBuilder,\n  CommandInteraction,\n  Events,\n  REST,\n  Routes\n} from 'discord.js'\n\nimport type {\n  Command,\n  CommandHandler,\n  CommandHandlerOptions,\n  Event,\n  EventHandler\n} from './types'\n\n/**\n * The main command handler class that manages Discord.js bot commands and events\n */\nexport class DJSHandler {\n  private client: Client\n  private commands: Collection<string, Command> = new Collection()\n  private events: Collection<string, Event> = new Collection()\n  private rest?: REST\n\n  constructor(private options: CommandHandlerOptions) {\n    this.client = new Client({\n      intents: this.options.intents || [\n        GatewayIntentBits.Guilds,\n        GatewayIntentBits.GuildMessages,\n        GatewayIntentBits.MessageContent\n      ]\n    })\n\n    if (this.options.token) {\n      this.rest = new REST().setToken(this.options.token)\n    }\n\n    this.setupDefaultEvents()\n  }\n\n  /**\n   * Register a command with the handler\n   */\n  public registerCommand(command: Command): this {\n    this.commands.set(command.data.name, command)\n    return this\n  }\n\n  /**\n   * Register an event with the handler\n   */\n  public registerEvent(event: Event): this {\n    this.events.set(event.name, event)\n    \n    if (event.once) {\n      this.client.once(event.name as any, (...args) => event.execute(...args))\n    } else {\n      this.client.on(event.name as any, (...args) => event.execute(...args))\n    }\n    \n    return this\n  }\n\n  /**\n   * Load all commands from a directory\n   */\n  public async loadCommands(commandsPath: string): Promise<this> {\n    // Implementation for loading commands from filesystem\n    // This would use dynamic imports to load command files\n    return this\n  }\n\n  /**\n   * Load all events from a directory\n   */\n  public async loadEvents(eventsPath: string): Promise<this> {\n    // Implementation for loading events from filesystem\n    return this\n  }\n\n  /**\n   * Deploy slash commands to Discord\n   */\n  public async deployCommands(guildId?: string): Promise<void> {\n    if (!this.rest || !this.options.clientId) {\n      throw new Error('REST client not initialized or clientId not provided')\n    }\n\n    const commandsData = Array.from(this.commands.values()).map(command => \n      command.data.toJSON()\n    )\n\n    try {\n      console.log(`Started refreshing ${commandsData.length} application (/) commands.`)\n\n      const route = guildId \n        ? Routes.applicationGuildCommands(this.options.clientId, guildId)\n        : Routes.applicationCommands(this.options.clientId)\n\n      await this.rest.put(route, { body: commandsData })\n\n      console.log(`Successfully reloaded ${commandsData.length} application (/) commands.`)\n    } catch (error) {\n      console.error('Error deploying commands:', error)\n      throw error\n    }\n  }\n\n  /**\n   * Start the bot\n   */\n  public async start(): Promise<void> {\n    if (!this.options.token) {\n      throw new Error('Bot token is required to start the client')\n    }\n\n    try {\n      await this.client.login(this.options.token)\n      console.log('Bot started successfully!')\n    } catch (error) {\n      console.error('Error starting bot:', error)\n      throw error\n    }\n  }\n\n  /**\n   * Get the Discord.js client instance\n   */\n  public getClient(): Client {\n    return this.client\n  }\n\n  /**\n   * Get registered commands\n   */\n  public getCommands(): Collection<string, Command> {\n    return this.commands\n  }\n\n  /**\n   * Get registered events\n   */\n  public getEvents(): Collection<string, Event> {\n    return this.events\n  }\n\n  /**\n   * Setup default event handlers\n   */\n  private setupDefaultEvents(): void {\n    this.client.on(Events.InteractionCreate, async (interaction) => {\n      if (!interaction.isChatInputCommand()) return\n\n      const command = this.commands.get(interaction.commandName)\n      if (!command) return\n\n      try {\n        await command.execute(interaction)\n      } catch (error) {\n        console.error(`Error executing command ${interaction.commandName}:`, error)\n        \n        const reply = { \n          content: 'There was an error while executing this command!', \n          ephemeral: true \n        }\n\n        if (interaction.replied || interaction.deferred) {\n          await interaction.followUp(reply)\n        } else {\n          await interaction.reply(reply)\n        }\n      }\n    })\n\n    this.client.on(Events.ClientReady, () => {\n      console.log(`Ready! Logged in as ${this.client.user?.tag}`)\n    })\n  }\n}\n\nexport { DJSHandler as CommandHandler }\n","import 'reflect-metadata'\nimport { SlashCommandBuilder, CommandInteraction } from 'discord.js'\nimport type { Command, Event, CommandMetadata, EventMetadata } from './types'\n\n// Metadata keys for reflection\nconst COMMAND_METADATA_KEY = Symbol('command')\nconst EVENT_METADATA_KEY = Symbol('event')\n\n/**\n * Class decorator to mark a class as a command\n */\nexport function CommandClass(metadata: CommandMetadata) {\n  return function <T extends new (...args: any[]) => any>(constructor: T) {\n    Reflect.defineMetadata(COMMAND_METADATA_KEY, metadata, constructor)\n    return constructor\n  }\n}\n\n/**\n * Method decorator to mark a method as a command execute function\n */\nexport function Execute() {\n  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n    // Mark this method as the execute function\n    Reflect.defineMetadata('execute', true, target, propertyKey)\n  }\n}\n\n/**\n * Class decorator to mark a class as an event handler\n */\nexport function EventClass(metadata: EventMetadata) {\n  return function <T extends new (...args: any[]) => any>(constructor: T) {\n    Reflect.defineMetadata(EVENT_METADATA_KEY, metadata, constructor)\n    return constructor\n  }\n}\n\n/**\n * Method decorator to mark a method as an event execute function\n */\nexport function On(eventName: string) {\n  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n    Reflect.defineMetadata('eventName', eventName, target, propertyKey)\n    Reflect.defineMetadata('once', false, target, propertyKey)\n  }\n}\n\n/**\n * Method decorator to mark a method as a once event execute function\n */\nexport function Once(eventName: string) {\n  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n    Reflect.defineMetadata('eventName', eventName, target, propertyKey)\n    Reflect.defineMetadata('once', true, target, propertyKey)\n  }\n}\n\n/**\n * Utility function to extract command from decorated class\n */\nexport function extractCommand(CommandClass: new (...args: any[]) => any): Command | null {\n  const metadata = Reflect.getMetadata(COMMAND_METADATA_KEY, CommandClass) as CommandMetadata\n  if (!metadata) return null\n\n  const instance = new CommandClass()\n  \n  // Find the execute method\n  const prototype = Object.getPrototypeOf(instance)\n  const methods = Object.getOwnPropertyNames(prototype)\n  \n  let executeMethod: Function | null = null\n  for (const method of methods) {\n    if (Reflect.getMetadata('execute', prototype, method)) {\n      executeMethod = instance[method].bind(instance)\n      break\n    }\n  }\n\n  if (!executeMethod) return null\n\n  // Build the slash command\n  const commandBuilder = new SlashCommandBuilder()\n    .setName(metadata.name)\n    .setDescription(metadata.description)\n\n  return {\n    data: commandBuilder,\n    execute: executeMethod as (interaction: CommandInteraction) => Promise<void> | void,\n    category: metadata.category,\n    disabled: metadata.disabled,\n    cooldown: metadata.cooldown\n  }\n}\n\n/**\n * Utility function to extract event from decorated class\n */\nexport function extractEvent(EventClass: new (...args: any[]) => any): Event | null {\n  const metadata = Reflect.getMetadata(EVENT_METADATA_KEY, EventClass) as EventMetadata\n  if (!metadata) return null\n\n  const instance = new EventClass()\n  \n  // Find methods with event metadata\n  const prototype = Object.getPrototypeOf(instance)\n  const methods = Object.getOwnPropertyNames(prototype)\n  \n  let executeMethod: Function | null = null\n  for (const method of methods) {\n    const eventName = Reflect.getMetadata('eventName', prototype, method)\n    if (eventName) {\n      executeMethod = instance[method].bind(instance)\n      break\n    }\n  }\n\n  if (!executeMethod) return null\n\n  return {\n    name: metadata.name,\n    once: metadata.once,\n    execute: executeMethod as (...args: any[]) => Promise<void> | void\n  }\n}\n","import * as fs from 'fs/promises'\nimport * as path from 'path'\n\n/**\n * Utility functions for the djshandler framework\n */\n\n/**\n * Recursively load all files from a directory with a specific extension\n */\nexport async function loadFiles(dirPath: string, extension: string = '.js'): Promise<string[]> {\n  const files: string[] = []\n  \n  try {\n    const items = await fs.readdir(dirPath, { withFileTypes: true })\n    \n    for (const item of items) {\n      const fullPath = path.join(dirPath, item.name)\n      \n      if (item.isDirectory()) {\n        const subFiles = await loadFiles(fullPath, extension)\n        files.push(...subFiles)\n      } else if (item.isFile() && item.name.endsWith(extension)) {\n        files.push(fullPath)\n      }\n    }\n  } catch (error) {\n    console.warn(`Could not read directory ${dirPath}:`, error)\n  }\n  \n  return files\n}\n\n/**\n * Dynamically import a module from a file path\n */\nexport async function importModule<T = any>(filePath: string): Promise<T | null> {\n  try {\n    const module = await import(filePath)\n    return module.default || module\n  } catch (error) {\n    console.warn(`Could not import module from ${filePath}:`, error)\n    return null\n  }\n}\n\n/**\n * Check if a file exists\n */\nexport async function fileExists(filePath: string): Promise<boolean> {\n  try {\n    await fs.access(filePath)\n    return true\n  } catch {\n    return false\n  }\n}\n\n/**\n * Create directory recursively if it doesn't exist\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n  try {\n    await fs.mkdir(dirPath, { recursive: true })\n  } catch (error) {\n    console.warn(`Could not create directory ${dirPath}:`, error)\n  }\n}\n\n/**\n * Format command name to be Discord-compatible\n */\nexport function formatCommandName(name: string): string {\n  return name\n    .toLowerCase()\n    .replace(/[^a-z0-9-_]/g, '-')\n    .replace(/-+/g, '-')\n    .replace(/^-|-$/g, '')\n}\n\n/**\n * Validate Discord command name\n */\nexport function isValidCommandName(name: string): boolean {\n  return /^[a-z0-9-_]{1,32}$/.test(name)\n}\n\n/**\n * Simple logger utility\n */\nexport class Logger {\n  constructor(private prefix: string = 'DJSHandler') {}\n\n  info(message: string, ...args: any[]): void {\n    console.log(`[${this.prefix}] ${message}`, ...args)\n  }\n\n  warn(message: string, ...args: any[]): void {\n    console.warn(`[${this.prefix}] ${message}`, ...args)\n  }\n\n  error(message: string, ...args: any[]): void {\n    console.error(`[${this.prefix}] ${message}`, ...args)\n  }\n\n  debug(message: string, ...args: any[]): void {\n    if (process.env.NODE_ENV === 'development') {\n      console.debug(`[${this.prefix}] ${message}`, ...args)\n    }\n  }\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new Logger()\n"],"mappings":"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","names":["SlashCommandBuilder","CommandClass","EventClass"]}