{"version":3,"sources":["../src/commands/CommandRegistry.ts","../src/events/EventRegistry.ts","../src/components/ComponentRegistry.ts","../src/database/DatabaseAdapter.ts","../src/database/MemoryAdapter.ts","../src/utils/CooldownManager.ts","../src/utils/permissions.ts","../src/middleware/MiddlewareBuilder.ts","../src/middleware/index.ts","../src/core/InteractionRouter.ts","../src/logging/Logger.ts","../src/utils/intents.ts","../src/errors/index.ts","../src/utils/buildable.ts","../src/core/BotBuilder.ts","../src/commands/CommandBuilder.ts","../src/commands/CommandGroupBuilder.ts","../src/commands/MessageCommandBuilder.ts","../src/commands/ContextMenuBuilder.ts","../src/events/EventBuilder.ts","../src/components/builders.ts","../src/components/handler-builders.ts","../src/database/FileAdapter.ts","../src/database/createAdapter.ts","../src/database/DatabaseBuilder.ts","../src/config/schema.ts","../src/config/ConfigBuilder.ts","../src/logging/LoggerBuilder.ts","../src/plugins/PluginBuilder.ts","../src/utils/embeds.ts","../src/utils/pagination.ts","../src/utils/PaginatorBuilder.ts","../src/utils/CooldownBuilder.ts"],"names":["ApplicationCommandOptionType","ApplicationCommandType","REST","Routes","PermissionFlagsBits","GatewayIntentBits","Client","Partials","ActionRowBuilder","ButtonBuilder","ButtonStyle","StringSelectMenuBuilder","ModalBuilder","TextInputBuilder","TextInputStyle","resolve","dirname","existsSync","readFileSync","writeFileSync","renameSync","unlinkSync","z","DiscordEmbedBuilder","ComponentType"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n  ApplicationCommandOptionType,\n  ApplicationCommandType,\n  REST,\n  Routes,\n  type APIApplicationCommandOption,\n  type ChatInputCommandInteraction,\n} from \"discord.js\";\nimport type {\n  CommandDefinition,\n  CommandOptionDef,\n  MessageContextMenuDefinition,\n  SubcommandDefinition,\n  UserContextMenuDefinition,\n} from \"../types/index.js\";\n\nfunction mapOptionType(type: CommandOptionDef[\"type\"]): ApplicationCommandOptionType {\n  const map: Record<CommandOptionDef[\"type\"], ApplicationCommandOptionType> = {\n    string: ApplicationCommandOptionType.String,\n    integer: ApplicationCommandOptionType.Integer,\n    number: ApplicationCommandOptionType.Number,\n    boolean: ApplicationCommandOptionType.Boolean,\n    user: ApplicationCommandOptionType.User,\n    channel: ApplicationCommandOptionType.Channel,\n    role: ApplicationCommandOptionType.Role,\n    mentionable: ApplicationCommandOptionType.Mentionable,\n    attachment: ApplicationCommandOptionType.Attachment,\n  };\n  return map[type];\n}\n\nfunction toDiscordOption(opt: CommandOptionDef): APIApplicationCommandOption {\n  return {\n    name: opt.name,\n    description: opt.description,\n    type: mapOptionType(opt.type),\n    required: opt.required ?? false,\n    choices: opt.choices,\n    min_value: opt.minValue,\n    max_value: opt.maxValue,\n    min_length: opt.minLength,\n    max_length: opt.maxLength,\n    autocomplete: opt.autocomplete,\n  } as APIApplicationCommandOption;\n}\n\nfunction toSubcommandOption<TDatabase>(sub: SubcommandDefinition<TDatabase>): APIApplicationCommandOption {\n  return {\n    name: sub.name,\n    description: sub.description,\n    type: ApplicationCommandOptionType.Subcommand,\n    options: sub.options?.map(toDiscordOption) ?? [],\n  } as APIApplicationCommandOption;\n}\n\nfunction toSubcommandGroupOption<TDatabase>(groupName: string, subs: SubcommandDefinition<TDatabase>[]): APIApplicationCommandOption {\n  return {\n    name: groupName,\n    description: `${groupName} commands`,\n    type: ApplicationCommandOptionType.SubcommandGroup,\n    options: subs.map(toSubcommandOption),\n  } as APIApplicationCommandOption;\n}\n\nexport interface DeployOptions {\n  guildId?: string;\n  global?: boolean;\n}\n\n/**\n * Registers slash commands, context menus, and resolves subcommand routing.\n */\nexport class CommandRegistry<TDatabase = unknown> {\n  private readonly commands = new Map<string, CommandDefinition<TDatabase>>();\n  private readonly userContextMenus = new Map<string, UserContextMenuDefinition<TDatabase>>();\n  private readonly messageContextMenus = new Map<string, MessageContextMenuDefinition<TDatabase>>();\n\n  register(command: CommandDefinition<TDatabase>): this {\n    this.commands.set(command.name, command);\n    return this;\n  }\n\n  registerMany(commands: CommandDefinition<TDatabase>[]): this {\n    for (const cmd of commands) this.register(cmd);\n    return this;\n  }\n\n  registerUserContextMenu(menu: UserContextMenuDefinition<TDatabase>): this {\n    this.userContextMenus.set(menu.name, menu);\n    return this;\n  }\n\n  registerMessageContextMenu(menu: MessageContextMenuDefinition<TDatabase>): this {\n    this.messageContextMenus.set(menu.name, menu);\n    return this;\n  }\n\n  get(name: string): CommandDefinition<TDatabase> | undefined {\n    return this.commands.get(name);\n  }\n\n  getUserContextMenu(name: string): UserContextMenuDefinition<TDatabase> | undefined {\n    return this.userContextMenus.get(name);\n  }\n\n  getMessageContextMenu(name: string): MessageContextMenuDefinition<TDatabase> | undefined {\n    return this.messageContextMenus.get(name);\n  }\n\n  getAll(): CommandDefinition<TDatabase>[] {\n    return [...this.commands.values()];\n  }\n\n  getAllContextMenus(): Array<UserContextMenuDefinition<TDatabase> | MessageContextMenuDefinition<TDatabase>> {\n    return [...this.userContextMenus.values(), ...this.messageContextMenus.values()];\n  }\n\n  has(name: string): boolean {\n    return this.commands.has(name);\n  }\n\n  /** Resolve subcommand handler from interaction. */\n  resolveHandler(interaction: ChatInputCommandInteraction): {\n    command: CommandDefinition<TDatabase>;\n    subcommand: SubcommandDefinition<TDatabase> | null;\n    subcommandGroup: string | null;\n  } | null {\n    const command = this.commands.get(interaction.commandName);\n    if (!command) return null;\n\n    const subGroup = interaction.options.getSubcommandGroup(false);\n    const subName = interaction.options.getSubcommand(false);\n\n    if (!subName || !command.subcommands?.length) {\n      return { command, subcommand: null, subcommandGroup: subGroup };\n    }\n\n    const sub = command.subcommands.find(\n      (s) => s.name === subName && (subGroup ? s.group === subGroup : !s.group),\n    );\n    return { command, subcommand: sub ?? null, subcommandGroup: subGroup };\n  }\n\n  extractOptions(interaction: ChatInputCommandInteraction): Record<string, unknown> {\n    const result: Record<string, unknown> = {};\n\n    const collect = (options: readonly { name: string; type: number; value?: unknown; user?: unknown; member?: unknown; channel?: unknown; role?: unknown; attachment?: unknown; options?: readonly unknown[] }[]): void => {\n      for (const option of options) {\n        if (option.type === ApplicationCommandOptionType.SubcommandGroup && Array.isArray(option.options)) {\n          collect(option.options as typeof options);\n        } else if (option.type === ApplicationCommandOptionType.Subcommand && Array.isArray(option.options)) {\n          collect(option.options as typeof options);\n        } else {\n          result[option.name] = option.value ?? option.user ?? option.member ?? option.channel ?? option.role ?? option.attachment;\n        }\n      }\n    };\n\n    collect(interaction.options.data);\n    return result;\n  }\n\n  private buildSlashCommandBody(cmd: CommandDefinition<TDatabase>) {\n    if (cmd.subcommands?.length) {\n      const ungrouped = cmd.subcommands.filter((s) => !s.group);\n      const groups = [...new Set(cmd.subcommands.filter((s) => s.group).map((s) => s.group!))];\n      const options: APIApplicationCommandOption[] = [\n        ...ungrouped.map(toSubcommandOption),\n        ...groups.map((g) => toSubcommandGroupOption(g, cmd.subcommands!.filter((s) => s.group === g))),\n      ];\n      return { name: cmd.name, description: cmd.description, type: ApplicationCommandType.ChatInput, options };\n    }\n    return {\n      name: cmd.name,\n      description: cmd.description,\n      type: ApplicationCommandType.ChatInput,\n      options: cmd.options?.map(toDiscordOption) ?? [],\n    };\n  }\n\n  private buildDeployBody() {\n    const slash = this.getAll().map((cmd) => this.buildSlashCommandBody(cmd));\n    const userMenus = [...this.userContextMenus.values()].map((m) => ({\n      name: m.name,\n      type: ApplicationCommandType.User,\n    }));\n    const messageMenus = [...this.messageContextMenus.values()].map((m) => ({\n      name: m.name,\n      type: ApplicationCommandType.Message,\n    }));\n    return [...slash, ...userMenus, ...messageMenus];\n  }\n\n  async deploy(token: string, clientId: string, options: DeployOptions = {}): Promise<void> {\n    const rest = new REST({ version: \"10\" }).setToken(token);\n    const body = this.buildDeployBody();\n    if (body.length === 0) return;\n\n    if (options.guildId) {\n      await rest.put(Routes.applicationGuildCommands(clientId, options.guildId), { body });\n      return;\n    }\n\n    if (options.global) {\n      await rest.put(Routes.applicationCommands(clientId), { body });\n      return;\n    }\n\n    throw new Error(\n      \"Command deploy requires guildId or global:true. Set .guildId() for dev or .registerCommandsGlobally(true) for production.\",\n    );\n  }\n\n  /** Deploy without starting the bot — useful for CI/CD pipelines. */\n  static async deployCommands<TDatabase = unknown>(\n    registry: CommandRegistry<TDatabase>,\n    token: string,\n    clientId: string,\n    options: DeployOptions = {},\n  ): Promise<void> {\n    await registry.deploy(token, clientId, options);\n  }\n}\n","import type { EventDefinition } from \"../types/index.js\";\n\n/**\n * Registry for Discord client events.\n */\nexport class EventRegistry<TDatabase = unknown> {\n  private readonly events = new Map<string, EventDefinition<TDatabase>>();\n\n  register<T extends string>(event: EventDefinition<TDatabase, T>): this {\n    this.events.set(event.name, event);\n    return this;\n  }\n\n  registerMany(events: EventDefinition<TDatabase>[]): this {\n    for (const evt of events) {\n      this.register(evt);\n    }\n    return this;\n  }\n\n  get(name: string): EventDefinition<TDatabase> | undefined {\n    return this.events.get(name);\n  }\n\n  getAll(): EventDefinition<TDatabase>[] {\n    return [...this.events.values()];\n  }\n}\n","import type {\n  ButtonDefinition,\n  ModalDefinition,\n  SelectMenuDefinition,\n} from \"../types/index.js\";\n\n/**\n * Registry for button, select menu, and modal interaction handlers.\n */\nexport class ComponentRegistry<TDatabase = unknown> {\n  private readonly buttons = new Map<string, ButtonDefinition<TDatabase>>();\n  private readonly buttonPrefixes: ButtonDefinition<TDatabase>[] = [];\n  private readonly selects = new Map<string, SelectMenuDefinition<TDatabase>>();\n  private readonly selectPrefixes: SelectMenuDefinition<TDatabase>[] = [];\n  private readonly modals = new Map<string, ModalDefinition<TDatabase>>();\n  private readonly modalPrefixes: ModalDefinition<TDatabase>[] = [];\n\n  button(def: ButtonDefinition<TDatabase>): this {\n    if (def.prefix) {\n      this.buttonPrefixes.push(def);\n    } else {\n      this.buttons.set(def.customId, def);\n    }\n    return this;\n  }\n\n  selectMenu(def: SelectMenuDefinition<TDatabase>): this {\n    if (def.prefix) {\n      this.selectPrefixes.push(def);\n    } else {\n      this.selects.set(def.customId, def);\n    }\n    return this;\n  }\n\n  modal(def: ModalDefinition<TDatabase>): this {\n    if (def.prefix) {\n      this.modalPrefixes.push(def);\n    } else {\n      this.modals.set(def.customId, def);\n    }\n    return this;\n  }\n\n  resolveButton(customId: string): ButtonDefinition<TDatabase> | undefined {\n    const exact = this.buttons.get(customId);\n    if (exact) return exact;\n    return this.buttonPrefixes.find((b) => customId.startsWith(`${b.customId}:`));\n  }\n\n  resolveSelectMenu(customId: string): SelectMenuDefinition<TDatabase> | undefined {\n    const exact = this.selects.get(customId);\n    if (exact) return exact;\n    return this.selectPrefixes.find((s) => customId.startsWith(`${s.customId}:`));\n  }\n\n  resolveModal(customId: string): ModalDefinition<TDatabase> | undefined {\n    const exact = this.modals.get(customId);\n    if (exact) return exact;\n    return this.modalPrefixes.find((m) => customId.startsWith(`${m.customId}:`));\n  }\n\n  get buttonCount(): number {\n    return this.buttons.size + this.buttonPrefixes.length;\n  }\n\n  get selectMenuCount(): number {\n    return this.selects.size + this.selectPrefixes.length;\n  }\n\n  get modalCount(): number {\n    return this.modals.size + this.modalPrefixes.length;\n  }\n}\n","/**\n * Abstract database adapter — implement for Prisma, Drizzle, MongoDB, etc.\n */\nexport abstract class DatabaseAdapter<TClient = unknown> {\n  protected client: TClient | null = null;\n\n  /** Connect to the database. Called automatically on bot start. */\n  abstract connect(): Promise<void>;\n\n  /** Disconnect from the database. Called on bot shutdown. */\n  abstract disconnect(): Promise<void>;\n\n  /** Return the underlying database client. */\n  getClient(): TClient {\n    if (!this.client) {\n      throw new Error(\"Database not connected. Call connect() first.\");\n    }\n    return this.client;\n  }\n\n  /** Whether the adapter is currently connected. */\n  isConnected(): boolean {\n    return this.client !== null;\n  }\n}\n","import { DatabaseAdapter } from \"./DatabaseAdapter.js\";\n\ntype MemoryStore = Map<string, unknown>;\n\n/**\n * In-memory database adapter for development and testing.\n * Data is lost on restart.\n */\nexport class MemoryAdapter extends DatabaseAdapter<MemoryStore> {\n  constructor() {\n    super();\n    this.client = new Map();\n  }\n\n  async connect(): Promise<void> {\n    if (!this.client) {\n      this.client = new Map();\n    }\n  }\n\n  async disconnect(): Promise<void> {\n    this.client?.clear();\n    this.client = null;\n  }\n\n  /** Get a value by key. */\n  get<T>(key: string): T | undefined {\n    return this.getClient().get(key) as T | undefined;\n  }\n\n  /** Set a value by key. */\n  set<T>(key: string, value: T): void {\n    this.getClient().set(key, value);\n  }\n\n  /** Delete a key. */\n  delete(key: string): boolean {\n    return this.getClient().delete(key);\n  }\n\n  /** Check if a key exists. */\n  has(key: string): boolean {\n    return this.getClient().has(key);\n  }\n\n  /** Get all keys matching a prefix. */\n  keys(prefix?: string): string[] {\n    const all = [...this.getClient().keys()];\n    if (!prefix) return all;\n    return all.filter((k) => k.startsWith(prefix));\n  }\n\n  /** Clear all data. */\n  clear(): void {\n    this.getClient().clear();\n  }\n}\n","import type { CooldownConfig } from \"../types/index.js\";\n\ninterface CooldownEntry {\n  expiresAt: number;\n}\n\nconst DEFAULT_SWEEP_INTERVAL_MS = 60_000;\n\n/**\n * Tracks per-command cooldowns in memory.\n */\nexport class CooldownManager {\n  private readonly store = new Map<string, CooldownEntry>();\n  private sweepTimer: ReturnType<typeof setInterval> | null = null;\n\n  constructor(sweepIntervalMs = DEFAULT_SWEEP_INTERVAL_MS) {\n    this.sweepTimer = setInterval(() => this.sweep(), sweepIntervalMs);\n    this.sweepTimer.unref?.();\n  }\n\n  private key(commandName: string, scopeId: string, scope: CooldownConfig[\"scope\"]): string {\n    return `${commandName}:${scope ?? \"user\"}:${scopeId}`;\n  }\n\n  isOnCooldown(\n    commandName: string,\n    scopeId: string,\n    config: CooldownConfig,\n  ): { onCooldown: true; remainingSeconds: number } | { onCooldown: false } {\n    const k = this.key(commandName, scopeId, config.scope);\n    const entry = this.store.get(k);\n    if (!entry) return { onCooldown: false };\n\n    const remaining = Math.ceil((entry.expiresAt - Date.now()) / 1000);\n    if (remaining <= 0) {\n      this.store.delete(k);\n      return { onCooldown: false };\n    }\n    return { onCooldown: true, remainingSeconds: remaining };\n  }\n\n  setCooldown(commandName: string, scopeId: string, config: CooldownConfig): void {\n    const k = this.key(commandName, scopeId, config.scope);\n    this.store.set(k, { expiresAt: Date.now() + config.seconds * 1000 });\n  }\n\n  clear(): void {\n    this.store.clear();\n  }\n\n  /** Stop the periodic sweep timer and clear all entries. */\n  destroy(): void {\n    if (this.sweepTimer) {\n      clearInterval(this.sweepTimer);\n      this.sweepTimer = null;\n    }\n    this.clear();\n  }\n\n  private sweep(): void {\n    const now = Date.now();\n    for (const [k, entry] of this.store) {\n      if (entry.expiresAt <= now) {\n        this.store.delete(k);\n      }\n    }\n  }\n}\n","import { PermissionFlagsBits, type GuildMember, type PermissionResolvable } from \"discord.js\";\nimport type { PermissionConfig } from \"../types/index.js\";\n\nexport interface PermissionCheckResult {\n  allowed: boolean;\n  reason?: string;\n}\n\n/**\n * Fluent builder for command permission requirements.\n */\nexport class PermissionBuilder {\n  private config: PermissionConfig = {};\n\n  static create(): PermissionBuilder {\n    return new PermissionBuilder();\n  }\n\n  static owner(...ownerIds: string[]): PermissionBuilder {\n    return new PermissionBuilder().owners(...ownerIds);\n  }\n\n  static role(...roleIds: string[]): PermissionBuilder {\n    return new PermissionBuilder().roles(...roleIds);\n  }\n\n  roles(...roleIds: string[]): this {\n    this.config.roleIds = [...(this.config.roleIds ?? []), ...roleIds];\n    return this;\n  }\n\n  owners(...ownerIds: string[]): this {\n    this.config.ownerIds = [...(this.config.ownerIds ?? []), ...ownerIds];\n    return this;\n  }\n\n  member(...permissions: PermissionResolvable[]): this {\n    const bits = permissions.map((p) => toPermissionBit(p));\n    this.config.memberPermissions = [...(this.config.memberPermissions ?? []), ...bits];\n    return this;\n  }\n\n  bot(...permissions: PermissionResolvable[]): this {\n    const bits = permissions.map((p) => toPermissionBit(p));\n    this.config.botPermissions = [...(this.config.botPermissions ?? []), ...bits];\n    return this;\n  }\n\n  build(): PermissionConfig {\n    return { ...this.config };\n  }\n}\n\nexport function checkPermissions(\n  member: GuildMember | null,\n  config: PermissionConfig,\n  userId: string,\n): PermissionCheckResult {\n  if (config.ownerIds?.includes(userId)) {\n    return { allowed: true };\n  }\n\n  const needsGuildMember =\n    (config.roleIds?.length ?? 0) > 0 ||\n    (config.memberPermissions?.length ?? 0) > 0 ||\n    (config.botPermissions?.length ?? 0) > 0;\n\n  if (!member && needsGuildMember) {\n    return { allowed: false, reason: \"This command can only be used in a server.\" };\n  }\n\n  if (!member) {\n    return { allowed: true };\n  }\n\n  if (config.roleIds?.length) {\n    const hasRole = config.roleIds.some((id) => member.roles.cache.has(id));\n    if (!hasRole) {\n      return { allowed: false, reason: \"You don't have the required role.\" };\n    }\n  }\n\n  if (config.memberPermissions?.length) {\n    for (const perm of config.memberPermissions) {\n      if (!member.permissions.has(perm as PermissionResolvable)) {\n        return { allowed: false, reason: \"You don't have the required permissions.\" };\n      }\n    }\n  }\n\n  if (config.botPermissions?.length && member.guild) {\n    const botMember = member.guild.members.me;\n    if (botMember) {\n      for (const perm of config.botPermissions) {\n        if (!botMember.permissions.has(perm as PermissionResolvable)) {\n          return { allowed: false, reason: \"I don't have the required permissions to run this command.\" };\n        }\n      }\n    }\n  }\n\n  return { allowed: true };\n}\n\nfunction toPermissionBit(permission: PermissionResolvable): bigint {\n  if (typeof permission === \"bigint\") return permission;\n  if (typeof permission === \"string\") {\n    return PermissionFlagsBits[permission as keyof typeof PermissionFlagsBits];\n  }\n  if (typeof permission === \"number\") return BigInt(permission);\n  return BigInt(String(permission));\n}\n","import type { MiddlewareFn } from \"../types/index.js\";\nimport {\n  deferMiddleware,\n  errorHandlerMiddleware,\n  loggerMiddleware,\n  ownerOnlyMiddleware,\n} from \"./index.js\";\n\n/**\n * Fluent builder for global middleware chains.\n *\n * @example\n * ```ts\n * MiddlewareBuilder.create()\n *   .log()\n *   .handleErrors()\n *   .owners(\"123\")\n *   .build()\n * ```\n */\nexport class MiddlewareBuilder<TDatabase = unknown> {\n  private readonly chain: MiddlewareFn<TDatabase>[] = [];\n\n  static create<TDatabase = unknown>(): MiddlewareBuilder<TDatabase> {\n    return new MiddlewareBuilder<TDatabase>();\n  }\n\n  static defaults<TDatabase = unknown>(): MiddlewareBuilder<TDatabase> {\n    return new MiddlewareBuilder<TDatabase>().log().handleErrors();\n  }\n\n  use(middleware: MiddlewareFn<TDatabase>): this {\n    this.chain.push(middleware);\n    return this;\n  }\n\n  log(): this {\n    this.chain.push(loggerMiddleware<TDatabase>());\n    return this;\n  }\n\n  handleErrors(): this {\n    this.chain.push(errorHandlerMiddleware<TDatabase>());\n    return this;\n  }\n\n  owners(...ownerIds: string[]): this {\n    this.chain.push(ownerOnlyMiddleware<TDatabase>(ownerIds));\n    return this;\n  }\n\n  defer(ephemeral = false): this {\n    this.chain.push(deferMiddleware<TDatabase>(ephemeral));\n    return this;\n  }\n\n  build(): MiddlewareFn<TDatabase>[] {\n    return [...this.chain];\n  }\n}\n","import type { MiddlewareFn } from \"../types/index.js\";\nimport type { CommandContext } from \"../types/index.js\";\n\nexport async function runMiddleware<TDatabase>(\n  middleware: MiddlewareFn<TDatabase>[],\n  ctx: CommandContext<TDatabase>,\n): Promise<{ halted: boolean; reason?: string }> {\n  let index = 0;\n\n  const next = async (): Promise<void> => {\n    if (index >= middleware.length) return;\n    const fn = middleware[index++]!;\n    const result = await fn(ctx, next);\n    if (result && \"halt\" in result && result.halt) {\n      throw new HaltError(result.reason);\n    }\n  };\n\n  try {\n    await next();\n    return { halted: false };\n  } catch (err) {\n    if (err instanceof HaltError) {\n      return { halted: true, reason: err.reason };\n    }\n    throw err;\n  }\n}\n\nexport class HaltError extends Error {\n  constructor(public readonly reason?: string) {\n    super(reason ?? \"Middleware halted execution\");\n    this.name = \"HaltError\";\n  }\n}\n\nexport function loggerMiddleware<TDatabase>(): MiddlewareFn<TDatabase> {\n  return async (ctx, next) => {\n    const sub = ctx.subcommand ? ` ${ctx.subcommand}` : \"\";\n    ctx.services.logger.info(`/${ctx.interaction.commandName}${sub}`, {\n      user: ctx.user.tag,\n      guild: ctx.interaction.guild?.name ?? \"DM\",\n    });\n    await next();\n  };\n}\n\nexport function errorHandlerMiddleware<TDatabase>(): MiddlewareFn<TDatabase> {\n  return async (ctx, next) => {\n    try {\n      await next();\n    } catch (err) {\n      ctx.services.logger.error(`Error in /${ctx.interaction.commandName}`, {\n        err: err instanceof Error ? err.message : String(err),\n      });\n      const content = \"Something went wrong while running this command.\";\n      if (ctx.interaction.replied || ctx.interaction.deferred) {\n        await ctx.editReply({ content });\n      } else {\n        await ctx.reply({ content, ephemeral: true });\n      }\n    }\n  };\n}\n\n/** Restrict command to bot owners configured via BotBuilder.ownerIds(). */\nexport function ownerOnlyMiddleware<TDatabase>(ownerIds: string[]): MiddlewareFn<TDatabase> {\n  return async (ctx, next) => {\n    if (!ownerIds.includes(ctx.user.id)) {\n      return { halt: true, reason: \"This command is restricted to bot owners.\" };\n    }\n    await next();\n  };\n}\n\n/** Auto-defer replies for long-running commands. */\nexport function deferMiddleware<TDatabase>(ephemeral = false): MiddlewareFn<TDatabase> {\n  return async (ctx, next) => {\n    if (!ctx.interaction.deferred && !ctx.interaction.replied) {\n      await ctx.deferReply({ ephemeral });\n    }\n    await next();\n  };\n}\n\nexport { MiddlewareBuilder } from \"./MiddlewareBuilder.js\";\n","import type {\n  AutocompleteInteraction,\n  ButtonInteraction,\n  ChatInputCommandInteraction,\n  Client,\n  Message,\n  ModalSubmitInteraction,\n  StringSelectMenuInteraction,\n} from \"discord.js\";\nimport type { ComponentRegistry } from \"../components/ComponentRegistry.js\";\nimport type { CommandRegistry } from \"../commands/CommandRegistry.js\";\nimport { CooldownManager } from \"../utils/CooldownManager.js\";\nimport { checkPermissions } from \"../utils/permissions.js\";\nimport { runMiddleware } from \"../middleware/index.js\";\nimport type { Logger } from \"../logging/Logger.js\";\nimport type {\n  BotServices,\n  CommandContext,\n  CommandDefinition,\n  MessageCommandDefinition,\n  MessageContext,\n  SubcommandDefinition,\n} from \"../types/index.js\";\n\nexport interface InteractionRouterOptions<TDatabase> {\n  client: Client;\n  services: BotServices<TDatabase>;\n  commandRegistry: CommandRegistry<TDatabase>;\n  messageCommands: Map<string, MessageCommandDefinition<TDatabase>>;\n  componentRegistry: ComponentRegistry<TDatabase>;\n  globalMiddleware: import(\"../types/index.js\").MiddlewareFn<TDatabase>[];\n  ownerIds: string[];\n  logger: Logger;\n}\n\n/**\n * Routes all Discord interactions to registered handlers.\n */\nexport class InteractionRouter<TDatabase = unknown> {\n  private readonly cooldowns = new CooldownManager();\n\n  constructor(private readonly options: InteractionRouterOptions<TDatabase>) {}\n\n  wire(): void {\n    const { client } = this.options;\n    client.on(\"interactionCreate\", (interaction) => void this.handleInteraction(interaction));\n  }\n\n  wireMessages(prefix: string): void {\n    this.options.client.on(\"messageCreate\", (message) => {\n      if (message.author.bot || !message.content.startsWith(prefix)) return;\n      void this.handleMessageCommand(message, prefix);\n    });\n  }\n\n  clearCooldowns(): void {\n    this.cooldowns.clear();\n  }\n\n  private async handleInteraction(interaction: import(\"discord.js\").Interaction): Promise<void> {\n    try {\n      if (interaction.isAutocomplete()) {\n        await this.handleAutocomplete(interaction);\n      } else if (interaction.isChatInputCommand()) {\n        await this.handleSlashCommand(interaction);\n      } else if (interaction.isUserContextMenuCommand()) {\n        await this.handleUserContextMenu(interaction);\n      } else if (interaction.isMessageContextMenuCommand()) {\n        await this.handleMessageContextMenu(interaction);\n      } else if (interaction.isButton()) {\n        await this.handleButton(interaction);\n      } else if (interaction.isStringSelectMenu()) {\n        await this.handleSelectMenu(interaction);\n      } else if (interaction.isModalSubmit()) {\n        await this.handleModal(interaction);\n      }\n    } catch (err) {\n      this.options.logger.error(\"Unhandled interaction error\", {\n        type: interaction.type,\n        err: err instanceof Error ? err.message : String(err),\n      });\n      await this.safeErrorReply(interaction);\n    }\n  }\n\n  private async safeErrorReply(interaction: import(\"discord.js\").Interaction): Promise<void> {\n    if (!this.isRepliable(interaction)) return;\n\n    const content = \"Something went wrong.\";\n    try {\n      if (interaction.replied || interaction.deferred) {\n        await interaction.editReply({ content });\n      } else {\n        await interaction.reply({ content, ephemeral: true });\n      }\n    } catch {\n      // Interaction may have expired or already been acknowledged.\n    }\n  }\n\n  private isRepliable(\n    interaction: import(\"discord.js\").Interaction,\n  ): interaction is import(\"discord.js\").RepliableInteraction {\n    return \"reply\" in interaction && typeof interaction.reply === \"function\";\n  }\n\n  private async handleAutocomplete(interaction: AutocompleteInteraction): Promise<void> {\n    const command = this.options.commandRegistry.get(interaction.commandName);\n    if (!command?.autocomplete) return;\n\n    const focused = interaction.options.getFocused(true);\n    await command.autocomplete({\n      interaction,\n      user: interaction.user,\n      member: interaction.member as import(\"discord.js\").GuildMember | null,\n      focusedOption: focused.name,\n      focusedValue: String(focused.value),\n      services: this.options.services,\n      respond: interaction.respond.bind(interaction),\n    });\n  }\n\n  private async handleSlashCommand(interaction: ChatInputCommandInteraction): Promise<void> {\n    const resolved = this.options.commandRegistry.resolveHandler(interaction);\n    if (!resolved) return;\n\n    const { command, subcommand, subcommandGroup } = resolved;\n    const subName = interaction.options.getSubcommand(false);\n    const ctx = this.createCommandContext(interaction, subcommandGroup);\n\n    if (command.subcommands?.length) {\n      if (!subName) {\n        await this.safeReply(ctx, \"Please specify a subcommand.\", true);\n        return;\n      }\n      if (!subcommand) {\n        await this.safeReply(ctx, \"Unknown subcommand.\", true);\n        return;\n      }\n    }\n\n    const handler = subcommand ?? command;\n\n    if (!(await this.checkLocation(interaction, handler, ctx))) return;\n    if (!(await this.checkPermissions(interaction, handler, command.name, ctx))) return;\n    if (!(await this.checkCooldown(interaction, handler, command.name, ctx))) return;\n\n    const middleware = [\n      ...this.options.globalMiddleware,\n      ...(command.middleware ?? []),\n      ...(subcommand?.middleware ?? []),\n    ];\n\n    const { halted, reason } = await runMiddleware(middleware, ctx);\n    if (halted) {\n      if (reason) await this.safeReply(ctx, reason, handler.ephemeral ?? true);\n      return;\n    }\n\n    if (handler.defer && !interaction.deferred && !interaction.replied) {\n      await interaction.deferReply({ ephemeral: handler.ephemeral ?? false });\n    }\n\n    await handler.execute(ctx);\n    this.applyCooldown(interaction, handler, command.name);\n  }\n\n  private async handleUserContextMenu(\n    interaction: import(\"discord.js\").UserContextMenuCommandInteraction,\n  ): Promise<void> {\n    const def = this.options.commandRegistry.getUserContextMenu(interaction.commandName);\n    if (!def) return;\n\n    const member = interaction.member as import(\"discord.js\").GuildMember | null;\n    if (def.permissions) {\n      const check = checkPermissions(member, { ...def.permissions, ownerIds: [...(def.permissions.ownerIds ?? []), ...this.options.ownerIds] }, interaction.user.id);\n      if (!check.allowed) {\n        await interaction.reply({ content: check.reason ?? \"Permission denied.\", ephemeral: true });\n        return;\n      }\n    }\n\n    await def.execute({\n      interaction,\n      user: interaction.user,\n      targetUser: interaction.targetUser,\n      member,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n    });\n  }\n\n  private async handleMessageContextMenu(\n    interaction: import(\"discord.js\").MessageContextMenuCommandInteraction,\n  ): Promise<void> {\n    const def = this.options.commandRegistry.getMessageContextMenu(interaction.commandName);\n    if (!def) return;\n\n    const member = interaction.member as import(\"discord.js\").GuildMember | null;\n    if (def.permissions) {\n      const check = checkPermissions(member, { ...def.permissions, ownerIds: [...(def.permissions.ownerIds ?? []), ...this.options.ownerIds] }, interaction.user.id);\n      if (!check.allowed) {\n        await interaction.reply({ content: check.reason ?? \"Permission denied.\", ephemeral: true });\n        return;\n      }\n    }\n\n    await def.execute({\n      interaction,\n      user: interaction.user,\n      targetMessage: interaction.targetMessage,\n      member,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n    });\n  }\n\n  private async handleButton(interaction: ButtonInteraction): Promise<void> {\n    const def = this.options.componentRegistry.resolveButton(interaction.customId);\n    if (!def) return;\n\n    await def.execute({\n      interaction,\n      user: interaction.user,\n      member: interaction.member as import(\"discord.js\").GuildMember | null,\n      customId: interaction.customId,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n      update: interaction.update.bind(interaction),\n      deferUpdate: interaction.deferUpdate.bind(interaction),\n    });\n  }\n\n  private async handleSelectMenu(interaction: StringSelectMenuInteraction): Promise<void> {\n    const def = this.options.componentRegistry.resolveSelectMenu(interaction.customId);\n    if (!def) return;\n\n    await def.execute({\n      interaction,\n      user: interaction.user,\n      member: interaction.member as import(\"discord.js\").GuildMember | null,\n      customId: interaction.customId,\n      values: interaction.values,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n      update: interaction.update.bind(interaction),\n      deferUpdate: interaction.deferUpdate.bind(interaction),\n    });\n  }\n\n  private async handleModal(interaction: ModalSubmitInteraction): Promise<void> {\n    const def = this.options.componentRegistry.resolveModal(interaction.customId);\n    if (!def) return;\n\n    const fields: Record<string, string> = {};\n    for (const [customId, field] of interaction.fields.fields) {\n      if (\"value\" in field && typeof field.value === \"string\") {\n        fields[customId] = field.value;\n      }\n    }\n\n    await def.execute({\n      interaction,\n      user: interaction.user,\n      member: interaction.member as import(\"discord.js\").GuildMember | null,\n      customId: interaction.customId,\n      fields,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n      deferReply: interaction.deferReply.bind(interaction),\n    });\n  }\n\n  private async handleMessageCommand(message: Message, prefix: string): Promise<void> {\n    try {\n      const args = message.content.slice(prefix.length).trim().split(/\\s+/);\n      const name = args.shift()?.toLowerCase();\n      if (!name) return;\n\n      const def = this.options.messageCommands.get(name);\n      if (!def) return;\n\n      if (def.guildOnly && !message.guild) {\n        await message.reply(\"This command can only be used in a server.\");\n        return;\n      }\n\n      const ctx: MessageContext<TDatabase> = {\n        message,\n        user: message.author,\n        member: message.member,\n        args,\n        services: this.options.services,\n        reply: message.reply.bind(message),\n      };\n\n      if (def.permissions) {\n        const check = checkPermissions(ctx.member, { ...def.permissions, ownerIds: [...(def.permissions.ownerIds ?? []), ...this.options.ownerIds] }, ctx.user.id);\n        if (!check.allowed) {\n          await ctx.reply(check.reason ?? \"Permission denied.\");\n          return;\n        }\n      }\n\n      if (def.cooldown) {\n        const scopeId = this.messageCooldownScopeId(message, def.cooldown.scope);\n        const cd = this.cooldowns.isOnCooldown(def.name, scopeId, def.cooldown);\n        if (cd.onCooldown) {\n          await ctx.reply(`Please wait ${cd.remainingSeconds}s before using this command again.`);\n          return;\n        }\n      }\n\n      await def.execute(ctx);\n\n      if (def.cooldown) {\n        const scopeId = this.messageCooldownScopeId(message, def.cooldown.scope);\n        this.cooldowns.setCooldown(def.name, scopeId, def.cooldown);\n      }\n    } catch (err) {\n      this.options.logger.error(\"Message command error\", {\n        err: err instanceof Error ? err.message : String(err),\n      });\n    }\n  }\n\n  private messageCooldownScopeId(\n    message: Message,\n    scope: import(\"../types/index.js\").CooldownConfig[\"scope\"] = \"user\",\n  ): string {\n    switch (scope) {\n      case \"guild\": return message.guildId ?? \"dm\";\n      case \"channel\": return message.channelId;\n      default: return message.author.id;\n    }\n  }\n\n  private async checkLocation(\n    interaction: ChatInputCommandInteraction,\n    handler: CommandDefinition<TDatabase> | SubcommandDefinition<TDatabase>,\n    ctx: CommandContext<TDatabase>,\n  ): Promise<boolean> {\n    if (handler.guildOnly && !interaction.guild) {\n      await this.safeReply(ctx, \"This command can only be used in a server.\", true);\n      return false;\n    }\n    if (handler.dmOnly && interaction.guild) {\n      await this.safeReply(ctx, \"This command can only be used in DMs.\", true);\n      return false;\n    }\n    return true;\n  }\n\n  private async checkPermissions(\n    interaction: ChatInputCommandInteraction,\n    handler: CommandDefinition<TDatabase> | SubcommandDefinition<TDatabase>,\n    commandName: string,\n    ctx: CommandContext<TDatabase>,\n  ): Promise<boolean> {\n    if (!handler.permissions) return true;\n    const perms = {\n      ...handler.permissions,\n      ownerIds: [...(handler.permissions.ownerIds ?? []), ...this.options.ownerIds],\n    };\n    const check = checkPermissions(ctx.member, perms, ctx.user.id);\n    if (!check.allowed) {\n      await this.safeReply(ctx, check.reason ?? \"Permission denied.\", true);\n      return false;\n    }\n    return true;\n  }\n\n  private async checkCooldown(\n    interaction: ChatInputCommandInteraction,\n    handler: CommandDefinition<TDatabase> | SubcommandDefinition<TDatabase>,\n    commandName: string,\n    ctx: CommandContext<TDatabase>,\n  ): Promise<boolean> {\n    if (!handler.cooldown) return true;\n    const scopeId = this.cooldownScopeId(interaction, handler.cooldown.scope);\n    const cd = this.cooldowns.isOnCooldown(commandName, scopeId, handler.cooldown);\n    if (cd.onCooldown) {\n      await this.safeReply(ctx, `Please wait ${cd.remainingSeconds}s before using this command again.`, true);\n      return false;\n    }\n    return true;\n  }\n\n  private applyCooldown(\n    interaction: ChatInputCommandInteraction,\n    handler: CommandDefinition<TDatabase> | SubcommandDefinition<TDatabase>,\n    commandName: string,\n  ): void {\n    if (!handler.cooldown) return;\n    const scopeId = this.cooldownScopeId(interaction, handler.cooldown.scope);\n    this.cooldowns.setCooldown(commandName, scopeId, handler.cooldown);\n  }\n\n  private createCommandContext(\n    interaction: ChatInputCommandInteraction,\n    subcommandGroup: string | null,\n  ): CommandContext<TDatabase> {\n    const subName = interaction.options.getSubcommand(false);\n    return {\n      interaction,\n      user: interaction.user,\n      member: interaction.member as import(\"discord.js\").GuildMember | null,\n      options: this.options.commandRegistry.extractOptions(interaction),\n      subcommand: subName,\n      subcommandGroup,\n      services: this.options.services,\n      reply: interaction.reply.bind(interaction),\n      deferReply: interaction.deferReply.bind(interaction),\n      editReply: interaction.editReply.bind(interaction),\n      followUp: interaction.followUp.bind(interaction),\n    };\n  }\n\n  private async safeReply(ctx: CommandContext<TDatabase>, content: string, ephemeral: boolean): Promise<void> {\n    if (ctx.interaction.replied || ctx.interaction.deferred) {\n      await ctx.editReply({ content });\n    } else {\n      await ctx.reply({ content, ephemeral });\n    }\n  }\n\n  private cooldownScopeId(\n    interaction: ChatInputCommandInteraction,\n    scope: import(\"../types/index.js\").CooldownConfig[\"scope\"] = \"user\",\n  ): string {\n    switch (scope) {\n      case \"guild\": return interaction.guildId ?? \"dm\";\n      case \"channel\": return interaction.channelId;\n      default: return interaction.user.id;\n    }\n  }\n}\n","export type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst LEVEL_PRIORITY: Record<LogLevel, number> = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3,\n};\n\nconst REDACT_KEY_PATTERN = /^(token|authorization|secret|password|api[_-]?key)$/i;\nconst REDACTED = \"[REDACTED]\";\n\nexport interface LoggerOptions {\n  level?: LogLevel;\n  prefix?: string;\n  timestamp?: boolean;\n}\n\n/**\n * Structured logger for bot runtime output.\n */\nexport class Logger {\n  private level: LogLevel;\n  private readonly prefix: string;\n  private readonly timestamp: boolean;\n\n  constructor(options: LoggerOptions = {}) {\n    this.level = options.level ?? \"info\";\n    this.prefix = options.prefix ?? \"discord-bot-builder\";\n    this.timestamp = options.timestamp ?? true;\n  }\n\n  setLevel(level: LogLevel): void {\n    this.level = level;\n  }\n\n  child(prefix: string): Logger {\n    return new Logger({\n      level: this.level,\n      prefix: `${this.prefix}:${prefix}`,\n      timestamp: this.timestamp,\n    });\n  }\n\n  debug(message: string, meta?: Record<string, unknown>): void {\n    this.write(\"debug\", message, meta);\n  }\n\n  info(message: string, meta?: Record<string, unknown>): void {\n    this.write(\"info\", message, meta);\n  }\n\n  warn(message: string, meta?: Record<string, unknown>): void {\n    this.write(\"warn\", message, meta);\n  }\n\n  error(message: string, meta?: Record<string, unknown>): void {\n    this.write(\"error\", message, meta);\n  }\n\n  private write(level: LogLevel, message: string, meta?: Record<string, unknown>): void {\n    if (LEVEL_PRIORITY[level] < LEVEL_PRIORITY[this.level]) return;\n\n    const parts: string[] = [];\n    if (this.timestamp) parts.push(new Date().toISOString());\n    parts.push(`[${level.toUpperCase()}]`);\n    parts.push(`[${this.prefix}]`);\n    parts.push(message);\n\n    const line = parts.join(\" \");\n    const fn = level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log;\n    const safeMeta = meta ? (redactMeta(meta) as Record<string, unknown>) : undefined;\n    if (safeMeta && Object.keys(safeMeta).length > 0) {\n      fn(line, safeMeta);\n    } else {\n      fn(line);\n    }\n  }\n}\n\nfunction redactMeta(value: unknown): unknown {\n  if (value === null || value === undefined) return value;\n  if (Array.isArray(value)) return value.map(redactMeta);\n  if (typeof value === \"object\") {\n    const result: Record<string, unknown> = {};\n    for (const [key, nested] of Object.entries(value as Record<string, unknown>)) {\n      result[key] = REDACT_KEY_PATTERN.test(key) ? REDACTED : redactMeta(nested);\n    }\n    return result;\n  }\n  return value;\n}\n\nexport const defaultLogger = new Logger();\n","import { GatewayIntentBits, type BitFieldResolvable, type GatewayIntentsString } from \"discord.js\";\n\n/**\n * Fluent builder for Discord gateway intents.\n */\nexport class IntentBuilder {\n  private intents: GatewayIntentBits[] = [\n    GatewayIntentBits.Guilds,\n    GatewayIntentBits.GuildMessages,\n    GatewayIntentBits.MessageContent,\n  ];\n\n  static default(): IntentBuilder {\n    return new IntentBuilder();\n  }\n\n  static all(): IntentBuilder {\n    return new IntentBuilder().allNonPrivileged().members().moderation();\n  }\n\n  allNonPrivileged(): this {\n    this.intents = [\n      GatewayIntentBits.Guilds,\n      GatewayIntentBits.GuildMessages,\n      GatewayIntentBits.GuildMessageReactions,\n      GatewayIntentBits.GuildVoiceStates,\n      GatewayIntentBits.GuildPresences,\n      GatewayIntentBits.MessageContent,\n      GatewayIntentBits.DirectMessages,\n      GatewayIntentBits.DirectMessageReactions,\n    ];\n    return this;\n  }\n\n  guilds(): this { this.add(GatewayIntentBits.Guilds); return this; }\n  members(): this { this.add(GatewayIntentBits.GuildMembers); return this; }\n  moderation(): this { this.add(GatewayIntentBits.GuildModeration); return this; }\n  messages(): this { this.add(GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent); return this; }\n  reactions(): this { this.add(GatewayIntentBits.GuildMessageReactions); return this; }\n  voice(): this { this.add(GatewayIntentBits.GuildVoiceStates); return this; }\n  presences(): this { this.add(GatewayIntentBits.GuildPresences); return this; }\n  dms(): this { this.add(GatewayIntentBits.DirectMessages, GatewayIntentBits.DirectMessageReactions); return this; }\n\n  add(...bits: GatewayIntentBits[]): this {\n    for (const bit of bits) {\n      if (!this.intents.includes(bit)) this.intents.push(bit);\n    }\n    return this;\n  }\n\n  remove(...bits: GatewayIntentBits[]): this {\n    this.intents = this.intents.filter((i) => !bits.includes(i));\n    return this;\n  }\n\n  build(): BitFieldResolvable<GatewayIntentsString, number> {\n    return this.intents;\n  }\n}\n","/** Base error for all discord-bot-builder errors. */\nexport class BotError extends Error {\n  constructor(\n    message: string,\n    public readonly code: string,\n    public readonly originalCause?: unknown,\n  ) {\n    super(message);\n    this.name = \"BotError\";\n  }\n}\n\nexport class ConfigurationError extends BotError {\n  constructor(message: string, cause?: unknown) {\n    super(message, \"CONFIGURATION_ERROR\", cause);\n    this.name = \"ConfigurationError\";\n  }\n}\n\nexport class CommandExecutionError extends BotError {\n  constructor(\n    message: string,\n    public readonly commandName: string,\n    cause?: unknown,\n  ) {\n    super(message, \"COMMAND_EXECUTION_ERROR\", cause);\n    this.name = \"CommandExecutionError\";\n  }\n}\n\nexport class PermissionDeniedError extends BotError {\n  constructor(\n    message: string,\n    public readonly commandName: string,\n  ) {\n    super(message, \"PERMISSION_DENIED\");\n    this.name = \"PermissionDeniedError\";\n  }\n}\n\nexport class DatabaseError extends BotError {\n  constructor(message: string, cause?: unknown) {\n    super(message, \"DATABASE_ERROR\", cause);\n    this.name = \"DatabaseError\";\n  }\n}\n\nexport class InteractionError extends BotError {\n  constructor(\n    message: string,\n    public readonly customId?: string,\n    cause?: unknown,\n  ) {\n    super(message, \"INTERACTION_ERROR\", cause);\n    this.name = \"InteractionError\";\n  }\n}\n","/** Resolves a value or `{ build(): T }` builder into `T`. */\nexport type Buildable<T> = T | { build(): T };\n\nexport function resolveBuildable<T>(input: Buildable<T>): T {\n  if (input !== null && typeof input === \"object\" && \"build\" in input && typeof input.build === \"function\") {\n    return input.build();\n  }\n  return input as T;\n}\n\nexport function hasBuild<T>(input: unknown): input is { build(): T } {\n  return input !== null && typeof input === \"object\" && \"build\" in input && typeof (input as { build: unknown }).build === \"function\";\n}\n","import {\n  Client,\n  Partials,\n  type BitFieldResolvable,\n  type GatewayIntentsString,\n} from \"discord.js\";\nimport { CommandRegistry } from \"../commands/CommandRegistry.js\";\nimport { EventRegistry } from \"../events/EventRegistry.js\";\nimport { ComponentRegistry } from \"../components/ComponentRegistry.js\";\nimport type { DatabaseAdapter } from \"../database/DatabaseAdapter.js\";\nimport { MemoryAdapter } from \"../database/MemoryAdapter.js\";\nimport type { DatabaseBuilder } from \"../database/DatabaseBuilder.js\";\nimport { InteractionRouter } from \"./InteractionRouter.js\";\nimport { Logger, defaultLogger } from \"../logging/Logger.js\";\nimport type { LoggerBuilder } from \"../logging/LoggerBuilder.js\";\nimport { IntentBuilder } from \"../utils/intents.js\";\nimport { ConfigurationError } from \"../errors/index.js\";\nimport { resolveBuildable, type Buildable } from \"../utils/buildable.js\";\nimport type { ConfigBuilder } from \"../config/ConfigBuilder.js\";\nimport type { ValidatedBotConfig } from \"../config/schema.js\";\nimport type { MiddlewareBuilder } from \"../middleware/MiddlewareBuilder.js\";\nimport type { PluginBuilder } from \"../plugins/PluginBuilder.js\";\nimport type {\n  BotConfig,\n  BotHealth,\n  BotPlugin,\n  BotServices,\n  CommandDefinition,\n  EventDefinition,\n  MessageCommandDefinition,\n  MiddlewareFn,\n  UserContextMenuDefinition,\n  MessageContextMenuDefinition,\n} from \"../types/index.js\";\nimport type { CommandBuilder } from \"../commands/CommandBuilder.js\";\nimport type { CommandGroupBuilder } from \"../commands/CommandGroupBuilder.js\";\nimport type { MessageCommandBuilder } from \"../commands/MessageCommandBuilder.js\";\nimport type { EventBuilder } from \"../events/EventBuilder.js\";\nimport type { UserContextMenuBuilder, MessageContextMenuBuilder } from \"../commands/ContextMenuBuilder.js\";\nimport type { ButtonDefinition, ModalDefinition, SelectMenuDefinition } from \"../types/index.js\";\nimport type { ButtonHandlerBuilder } from \"../components/handler-builders.js\";\nimport type { SelectMenuHandlerBuilder } from \"../components/handler-builders.js\";\nimport type { ModalHandlerBuilder } from \"../components/handler-builders.js\";\n\ntype ButtonInput<TDatabase> =\n  | ButtonHandlerBuilder<TDatabase>\n  | ButtonDefinition<TDatabase>;\n\ntype SelectMenuInput<TDatabase> =\n  | SelectMenuHandlerBuilder<TDatabase>\n  | SelectMenuDefinition<TDatabase>;\n\ntype ModalInput<TDatabase> =\n  | ModalHandlerBuilder<TDatabase>\n  | ModalDefinition<TDatabase>;\n\ntype DatabaseInput<TDatabase> =\n  | DatabaseBuilder<TDatabase>\n  | DatabaseAdapter<TDatabase>;\n\ntype LoggerInput = LoggerBuilder | Logger;\n\ntype PluginInput<TDatabase> = PluginBuilder<TDatabase> | BotPlugin<TDatabase>;\n\ntype ConfigInput = ConfigBuilder | ValidatedBotConfig | BotConfig;\n\ntype CommandInput<TDatabase> =\n  | CommandBuilder<TDatabase>\n  | CommandGroupBuilder<TDatabase>\n  | CommandDefinition<TDatabase>;\n\n/**\n * Main entry point — fluent OOP builder for production Discord bots.\n */\nexport class BotBuilder<TDatabase = unknown> {\n  private config: Partial<BotConfig> = {};\n  private dbAdapter: DatabaseAdapter<TDatabase> = new MemoryAdapter() as unknown as DatabaseAdapter<TDatabase>;\n  private readonly commandRegistry = new CommandRegistry<TDatabase>();\n  private readonly eventRegistry = new EventRegistry<TDatabase>();\n  private readonly componentRegistry = new ComponentRegistry<TDatabase>();\n  private readonly messageCommands = new Map<string, MessageCommandDefinition<TDatabase>>();\n  private globalMiddleware: MiddlewareFn<TDatabase>[] = [];\n  private plugins: BotPlugin<TDatabase>[] = [];\n  private intentBuilder = IntentBuilder.default();\n  private botLogger: Logger = defaultLogger;\n\n  static create<TDatabase = unknown>(): BotBuilder<TDatabase> {\n    return new BotBuilder<TDatabase>();\n  }\n\n  token(value: string): this { this.config.token = value; return this; }\n  clientId(value: string): this { this.config.clientId = value; return this; }\n  guildId(value?: string): this {\n    if (value) this.config.guildId = value;\n    return this;\n  }\n  prefix(value: string): this { this.config.prefix = value; return this; }\n  ownerIds(...ids: string[]): this { this.config.ownerIds = ids; return this; }\n\n  registerCommandsGlobally(value = true): this {\n    this.config.registerCommandsGlobally = value;\n    return this;\n  }\n\n  deployCommandsOnStart(value = true): this {\n    this.config.deployCommandsOnStart = value;\n    return this;\n  }\n\n  logLevel(level: BotConfig[\"logLevel\"]): this {\n    this.config.logLevel = level;\n    this.botLogger.setLevel(level ?? \"info\");\n    return this;\n  }\n\n  gracefulShutdown(value = true): this {\n    this.config.gracefulShutdown = value;\n    return this;\n  }\n\n  intents(builder: IntentBuilder): this {\n    this.intentBuilder = builder;\n    return this;\n  }\n\n  loggerInstance(logger: LoggerInput): this {\n    this.botLogger = resolveBuildable(logger);\n    return this;\n  }\n\n  logging(builder: LoggerInput): this {\n    return this.loggerInstance(builder);\n  }\n\n  /** Alias for {@link logging}. */\n  withLogger(builder: LoggerInput): this {\n    return this.loggerInstance(builder);\n  }\n\n  database(adapter: DatabaseInput<TDatabase>): this {\n    this.dbAdapter = resolveBuildable(adapter as Buildable<DatabaseAdapter<TDatabase>>);\n    return this;\n  }\n\n  command(cmd: CommandInput<TDatabase>): this {\n    this.commandRegistry.register(resolveBuildable(cmd as Buildable<CommandDefinition<TDatabase>>));\n    return this;\n  }\n\n  commands(cmds: CommandInput<TDatabase>[]): this {\n    for (const cmd of cmds) this.command(cmd);\n    return this;\n  }\n\n  messageCommand(cmd: MessageCommandBuilder<TDatabase> | MessageCommandDefinition<TDatabase>): this {\n    const def = resolveBuildable(cmd);\n    this.messageCommands.set(def.name, def);\n    for (const alias of def.aliases ?? []) this.messageCommands.set(alias, def);\n    return this;\n  }\n\n  userContextMenu(menu: UserContextMenuBuilder<TDatabase> | UserContextMenuDefinition<TDatabase>): this {\n    this.commandRegistry.registerUserContextMenu(resolveBuildable(menu));\n    return this;\n  }\n\n  messageContextMenu(menu: MessageContextMenuBuilder<TDatabase> | MessageContextMenuDefinition<TDatabase>): this {\n    this.commandRegistry.registerMessageContextMenu(resolveBuildable(menu));\n    return this;\n  }\n\n  button(def: ButtonInput<TDatabase>): this {\n    this.componentRegistry.button(resolveBuildable(def));\n    return this;\n  }\n\n  selectMenu(def: SelectMenuInput<TDatabase>): this {\n    this.componentRegistry.selectMenu(resolveBuildable(def));\n    return this;\n  }\n\n  modal(def: ModalInput<TDatabase>): this {\n    this.componentRegistry.modal(resolveBuildable(def));\n    return this;\n  }\n\n  event(evt: EventBuilder<TDatabase, string> | EventDefinition<TDatabase>): this {\n    this.eventRegistry.register(resolveBuildable(evt as Buildable<EventDefinition<TDatabase>>));\n    return this;\n  }\n\n  onReady(handler: (ctx: import(\"../types/index.js\").EventContext<TDatabase>) => Promise<void>): this {\n    this.eventRegistry.register({ name: \"clientReady\", once: true, execute: handler });\n    return this;\n  }\n\n  use(middleware: MiddlewareFn<TDatabase>): this {\n    this.globalMiddleware.push(middleware);\n    return this;\n  }\n\n  /** Apply a fluent middleware chain from {@link MiddlewareBuilder}. */\n  middleware(chain: MiddlewareBuilder<TDatabase> | MiddlewareFn<TDatabase>[]): this {\n    const items = Array.isArray(chain) ? chain : chain.build();\n    this.globalMiddleware.push(...items);\n    return this;\n  }\n\n  plugin(plugin: PluginInput<TDatabase>): this {\n    this.plugins.push(resolveBuildable(plugin));\n    return this;\n  }\n\n  /** Load config from {@link ConfigBuilder}, env-validated config, or plain object. */\n  configure(config: ConfigInput): this {\n    const resolved = resolveBuildable(config as Buildable<ValidatedBotConfig>);\n    Object.assign(this.config, resolved);\n    if (resolved.logLevel) this.botLogger.setLevel(resolved.logLevel);\n    return this;\n  }\n\n  getCommandRegistry(): CommandRegistry<TDatabase> {\n    return this.commandRegistry;\n  }\n\n  async build(): Promise<BuiltBot<TDatabase>> {\n    for (const p of this.plugins) {\n      await p.setup(this);\n    }\n\n    if (!this.config.token) throw new ConfigurationError(\"Bot token is required. Call .token()\");\n    if (!this.config.clientId) throw new ConfigurationError(\"Client ID is required. Call .clientId()\");\n\n    const config: BotConfig = {\n      token: this.config.token,\n      clientId: this.config.clientId,\n      guildId: this.config.guildId,\n      prefix: this.config.prefix ?? \"!\",\n      registerCommandsGlobally: this.config.registerCommandsGlobally ?? false,\n      deployCommandsOnStart: this.config.deployCommandsOnStart ?? true,\n      logLevel: this.config.logLevel ?? \"info\",\n      gracefulShutdown: this.config.gracefulShutdown ?? true,\n      ownerIds: this.config.ownerIds ?? [],\n    };\n\n    return new BuiltBot({\n      config,\n      database: this.dbAdapter,\n      commandRegistry: this.commandRegistry,\n      eventRegistry: this.eventRegistry,\n      componentRegistry: this.componentRegistry,\n      messageCommands: this.messageCommands,\n      globalMiddleware: this.globalMiddleware,\n      plugins: this.plugins,\n      intents: this.intentBuilder.build(),\n      logger: this.botLogger,\n    });\n  }\n}\n\ninterface BuiltBotOptions<TDatabase> {\n  config: BotConfig;\n  database: DatabaseAdapter<TDatabase>;\n  commandRegistry: CommandRegistry<TDatabase>;\n  eventRegistry: EventRegistry<TDatabase>;\n  componentRegistry: ComponentRegistry<TDatabase>;\n  messageCommands: Map<string, MessageCommandDefinition<TDatabase>>;\n  globalMiddleware: MiddlewareFn<TDatabase>[];\n  plugins: BotPlugin<TDatabase>[];\n  intents: BitFieldResolvable<GatewayIntentsString, number>;\n  logger: Logger;\n}\n\n/**\n * Production-ready runnable Discord bot instance.\n */\nexport class BuiltBot<TDatabase = unknown> {\n  private readonly client: Client;\n  private readonly services: BotServices<TDatabase>;\n  private readonly router: InteractionRouter<TDatabase>;\n  private readonly logger: Logger;\n  private started = false;\n  private startedAt: Date | null = null;\n  private healthStatus: BotHealth[\"status\"] = \"stopped\";\n  private shutdownHandlers: Array<() => void> = [];\n  private pluginsReadyFired = false;\n\n  constructor(private readonly options: BuiltBotOptions<TDatabase>) {\n    this.logger = options.logger.child(\"bot\");\n    this.client = new Client({\n      intents: options.intents,\n      partials: [Partials.Channel, Partials.Message, Partials.User, Partials.GuildMember],\n    });\n\n    this.services = {\n      db: options.database,\n      client: this.client,\n      logger: this.logger,\n    };\n\n    this.router = new InteractionRouter({\n      client: this.client,\n      services: this.services,\n      commandRegistry: options.commandRegistry,\n      messageCommands: options.messageCommands,\n      componentRegistry: options.componentRegistry,\n      globalMiddleware: options.globalMiddleware,\n      ownerIds: options.config.ownerIds ?? [],\n      logger: this.logger,\n    });\n\n    this.wireEvents();\n    this.router.wire();\n    this.router.wireMessages(options.config.prefix ?? \"!\");\n  }\n\n  get discord(): Client { return this.client; }\n  get serviceContainer(): BotServices<TDatabase> { return this.services; }\n  get commandRegistry(): CommandRegistry<TDatabase> { return this.options.commandRegistry; }\n\n  getHealth(): BotHealth {\n    return {\n      status: this.healthStatus,\n      uptime: this.startedAt ? Date.now() - this.startedAt.getTime() : 0,\n      guilds: this.client.guilds.cache.size,\n      users: this.client.users.cache.size,\n      commands: this.options.commandRegistry.getAll().length,\n      databaseConnected: this.options.database.isConnected(),\n      startedAt: this.startedAt,\n    };\n  }\n\n  /** Deploy slash commands without starting the bot. */\n  async deployCommands(): Promise<void> {\n    const { config, commandRegistry } = this.options;\n    await commandRegistry.deploy(config.token, config.clientId, {\n      guildId: config.guildId,\n      global: config.registerCommandsGlobally && !config.guildId,\n    });\n    this.logger.info(\"Commands deployed\", { count: commandRegistry.getAll().length });\n  }\n\n  async start(): Promise<void> {\n    if (this.started) throw new ConfigurationError(\"Bot is already started.\");\n    this.healthStatus = \"starting\";\n    this.logger.info(\"Starting bot...\");\n\n    await this.options.database.connect();\n    this.logger.info(\"Database connected\");\n\n    if (this.options.config.deployCommandsOnStart !== false) {\n      await this.deployCommands();\n    }\n\n    await this.client.login(this.options.config.token);\n    this.started = true;\n    this.startedAt = new Date();\n    this.healthStatus = \"ready\";\n\n    for (const p of this.options.plugins) {\n      if (p.onStart) await p.onStart(this.services);\n    }\n\n    if (this.options.config.gracefulShutdown !== false) {\n      this.registerShutdownHandlers();\n    }\n\n    this.logger.info(\"Bot logged in — waiting for ready event\");\n  }\n\n  async stop(): Promise<void> {\n    if (!this.started) return;\n    this.healthStatus = \"stopping\";\n    this.logger.info(\"Stopping bot...\");\n\n    for (const p of this.options.plugins) {\n      if (p.onStop) await p.onStop(this.services);\n    }\n\n    for (const handler of this.shutdownHandlers) handler();\n    this.router.clearCooldowns();\n    await this.options.database.disconnect();\n    this.client.destroy();\n    this.started = false;\n    this.healthStatus = \"stopped\";\n    this.logger.info(\"Bot stopped\");\n  }\n\n  private wireEvents(): void {\n    for (const evt of this.options.eventRegistry.getAll()) {\n      const handler = async (...args: unknown[]) => {\n        await evt.execute({ client: this.client, services: this.services, args });\n        if (evt.name === \"clientReady\" && !this.pluginsReadyFired) {\n          this.pluginsReadyFired = true;\n          for (const p of this.options.plugins) {\n            if (p.onReady) await p.onReady(this.services);\n          }\n        }\n      };\n      if (evt.once) this.client.once(evt.name, handler);\n      else this.client.on(evt.name, handler);\n    }\n  }\n\n  private registerShutdownHandlers(): void {\n    const shutdown = (): void => {\n      void this.stop().then(() => process.exit(0));\n    };\n    process.once(\"SIGINT\", shutdown);\n    process.once(\"SIGTERM\", shutdown);\n    this.shutdownHandlers.push(() => {\n      process.removeListener(\"SIGINT\", shutdown);\n      process.removeListener(\"SIGTERM\", shutdown);\n    });\n  }\n}\n","import type { ApplicationCommandOptionChoiceData } from \"discord.js\";\nimport type {\n  CommandDefinition,\n  CommandOptionDef,\n  CooldownConfig,\n  MiddlewareFn,\n  PermissionConfig,\n} from \"../types/index.js\";\nimport type { AutocompleteContext, CommandContext } from \"../types/index.js\";\nimport type { Buildable } from \"../utils/buildable.js\";\nimport { resolveBuildable } from \"../utils/buildable.js\";\n\n/**\n * Fluent builder for slash commands.\n */\nexport class CommandBuilder<TDatabase = unknown> {\n  private readonly definition: CommandDefinition<TDatabase>;\n\n  constructor(name: string, description: string) {\n    this.definition = {\n      name: name.toLowerCase(),\n      description,\n      options: [],\n      middleware: [],\n      execute: async () => {\n        throw new Error(`Command \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  addStringOption(\n    name: string,\n    description: string,\n    opts?: { required?: boolean; choices?: Array<{ name: string; value: string }>; minLength?: number; maxLength?: number; autocomplete?: boolean },\n  ): this {\n    this.definition.options!.push({\n      name, description, type: \"string\",\n      required: opts?.required ?? false,\n      choices: opts?.choices,\n      minLength: opts?.minLength,\n      maxLength: opts?.maxLength,\n      autocomplete: opts?.autocomplete,\n    });\n    return this;\n  }\n\n  addIntegerOption(name: string, description: string, opts?: { required?: boolean; minValue?: number; maxValue?: number }): this {\n    this.definition.options!.push({ name, description, type: \"integer\", required: opts?.required ?? false, minValue: opts?.minValue, maxValue: opts?.maxValue });\n    return this;\n  }\n\n  addNumberOption(name: string, description: string, opts?: { required?: boolean; minValue?: number; maxValue?: number }): this {\n    this.definition.options!.push({ name, description, type: \"number\", required: opts?.required ?? false, minValue: opts?.minValue, maxValue: opts?.maxValue });\n    return this;\n  }\n\n  addBooleanOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"boolean\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addUserOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"user\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addChannelOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"channel\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addRoleOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"role\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addMentionableOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"mentionable\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addAttachmentOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"attachment\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addOption(option: CommandOptionDef): this {\n    this.definition.options!.push(option);\n    return this;\n  }\n\n  cooldown(seconds: number, scope: CooldownConfig[\"scope\"] = \"user\"): this {\n    this.definition.cooldown = { seconds, scope };\n    return this;\n  }\n\n  cooldownConfig(config: Buildable<CooldownConfig>): this {\n    this.definition.cooldown = resolveBuildable(config);\n    return this;\n  }\n\n  permissions(config: Buildable<PermissionConfig>): this {\n    this.definition.permissions = resolveBuildable(config);\n    return this;\n  }\n\n  guildOnly(): this { this.definition.guildOnly = true; return this; }\n  dmOnly(): this { this.definition.dmOnly = true; return this; }\n  defer(ephemeral = false): this { this.definition.defer = true; this.definition.ephemeral = ephemeral; return this; }\n  ephemeral(): this { this.definition.ephemeral = true; return this; }\n\n  autocomplete(handler: (ctx: AutocompleteContext<TDatabase>) => Promise<ApplicationCommandOptionChoiceData[] | void>): this {\n    this.definition.autocomplete = handler;\n    return this;\n  }\n\n  use(middleware: MiddlewareFn<TDatabase>): this {\n    this.definition.middleware!.push(middleware);\n    return this;\n  }\n\n  execute(handler: (ctx: CommandContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): CommandDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get name(): string {\n    return this.definition.name;\n  }\n}\n","import type {\n  CommandDefinition,\n  CommandOptionDef,\n  CooldownConfig,\n  MiddlewareFn,\n  PermissionConfig,\n  SubcommandDefinition,\n} from \"../types/index.js\";\nimport type { CommandContext } from \"../types/index.js\";\n\n/**\n * Fluent builder for slash commands with subcommand support.\n *\n * @example\n * ```ts\n * const mod = new CommandGroupBuilder(\"mod\", \"Moderation commands\")\n *   .subcommand(\"ban\", \"Ban a user\", (b) =>\n *     b.addUserOption(\"user\", \"Target\", { required: true })\n *      .execute(async (ctx) => { ... })\n *   )\n *   .subcommand(\"kick\", \"Kick a user\", (b) =>\n *     b.addUserOption(\"user\", \"Target\", { required: true })\n *      .execute(async (ctx) => { ... })\n *   );\n * ```\n */\nexport class CommandGroupBuilder<TDatabase = unknown> {\n  private readonly definition: CommandDefinition<TDatabase>;\n\n  constructor(name: string, description: string) {\n    this.definition = {\n      name: name.toLowerCase(),\n      description,\n      subcommands: [],\n      middleware: [],\n      execute: async () => {\n        throw new Error(`Command group \"${name}\" requires subcommands.`);\n      },\n    };\n  }\n\n  subcommand(\n    name: string,\n    description: string,\n    configure: (builder: SubcommandBuilder<TDatabase>) => SubcommandBuilder<TDatabase>,\n  ): this {\n    const builder = new SubcommandBuilder<TDatabase>(name, description);\n    this.definition.subcommands!.push(configure(builder).build());\n    return this;\n  }\n\n  /** Nested subcommand group: /cmd group sub */\n  group(\n    groupName: string,\n    description: string,\n    configure: (group: CommandSubGroupBuilder<TDatabase>) => CommandSubGroupBuilder<TDatabase>,\n  ): this {\n    const groupBuilder = new CommandSubGroupBuilder<TDatabase>(groupName, description);\n    const built = configure(groupBuilder);\n    for (const sub of built.getSubcommands()) {\n      this.definition.subcommands!.push({ ...sub, group: groupName.toLowerCase() });\n    }\n    return this;\n  }\n\n  cooldown(seconds: number, scope: CooldownConfig[\"scope\"] = \"user\"): this {\n    this.definition.cooldown = { seconds, scope };\n    return this;\n  }\n\n  permissions(config: PermissionConfig): this {\n    this.definition.permissions = config;\n    return this;\n  }\n\n  guildOnly(): this {\n    this.definition.guildOnly = true;\n    return this;\n  }\n\n  use(middleware: MiddlewareFn<TDatabase>): this {\n    this.definition.middleware!.push(middleware);\n    return this;\n  }\n\n  build(): CommandDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get name(): string {\n    return this.definition.name;\n  }\n}\n\nclass CommandSubGroupBuilder<TDatabase = unknown> {\n  private readonly subcommands: SubcommandDefinition<TDatabase>[] = [];\n\n  constructor(\n    private readonly groupName: string,\n    private readonly description: string,\n  ) {}\n\n  subcommand(\n    name: string,\n    description: string,\n    configure: (builder: SubcommandBuilder<TDatabase>) => SubcommandBuilder<TDatabase>,\n  ): this {\n    const builder = new SubcommandBuilder<TDatabase>(name, description);\n    this.subcommands.push(configure(builder).build());\n    return this;\n  }\n\n  getSubcommands(): SubcommandDefinition<TDatabase>[] {\n    return this.subcommands;\n  }\n}\n\nexport class SubcommandBuilder<TDatabase = unknown> {\n  private readonly definition: SubcommandDefinition<TDatabase>;\n\n  constructor(name: string, description: string) {\n    this.definition = {\n      name: name.toLowerCase(),\n      description,\n      options: [],\n      middleware: [],\n      execute: async () => {\n        throw new Error(`Subcommand \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  addStringOption(\n    name: string,\n    description: string,\n    opts?: { required?: boolean; choices?: Array<{ name: string; value: string }>; minLength?: number; maxLength?: number; autocomplete?: boolean },\n  ): this {\n    this.definition.options!.push({ name, description, type: \"string\", required: opts?.required ?? false, choices: opts?.choices, minLength: opts?.minLength, maxLength: opts?.maxLength, autocomplete: opts?.autocomplete });\n    return this;\n  }\n\n  addIntegerOption(name: string, description: string, opts?: { required?: boolean; minValue?: number; maxValue?: number }): this {\n    this.definition.options!.push({ name, description, type: \"integer\", required: opts?.required ?? false, minValue: opts?.minValue, maxValue: opts?.maxValue });\n    return this;\n  }\n\n  addBooleanOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"boolean\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addUserOption(name: string, description: string, opts?: { required?: boolean }): this {\n    this.definition.options!.push({ name, description, type: \"user\", required: opts?.required ?? false });\n    return this;\n  }\n\n  addOption(option: CommandOptionDef): this {\n    this.definition.options!.push(option);\n    return this;\n  }\n\n  cooldown(seconds: number, scope: CooldownConfig[\"scope\"] = \"user\"): this {\n    this.definition.cooldown = { seconds, scope };\n    return this;\n  }\n\n  permissions(config: PermissionConfig): this {\n    this.definition.permissions = config;\n    return this;\n  }\n\n  guildOnly(): this { this.definition.guildOnly = true; return this; }\n  defer(ephemeral = false): this { this.definition.defer = true; this.definition.ephemeral = ephemeral; return this; }\n  ephemeral(): this { this.definition.ephemeral = true; return this; }\n\n  use(middleware: MiddlewareFn<TDatabase>): this {\n    this.definition.middleware!.push(middleware);\n    return this;\n  }\n\n  execute(handler: (ctx: CommandContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): SubcommandDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n}\n","import type { MessageCommandDefinition, PermissionConfig } from \"../types/index.js\";\nimport type { MessageContext } from \"../types/index.js\";\nimport type { CooldownConfig } from \"../types/index.js\";\nimport type { Buildable } from \"../utils/buildable.js\";\nimport { resolveBuildable } from \"../utils/buildable.js\";\n\n/**\n * Fluent builder for prefix (message) commands.\n */\nexport class MessageCommandBuilder<TDatabase = unknown> {\n  private readonly definition: MessageCommandDefinition<TDatabase>;\n\n  constructor(name: string, description: string) {\n    this.definition = {\n      name: name.toLowerCase(),\n      description,\n      aliases: [],\n      execute: async () => {\n        throw new Error(`Message command \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  /** Add command aliases. */\n  aliases(...names: string[]): this {\n    this.definition.aliases = names.map((n) => n.toLowerCase());\n    return this;\n  }\n\n  cooldown(seconds: number, scope: \"user\" | \"guild\" | \"channel\" = \"user\"): this {\n    this.definition.cooldown = { seconds, scope };\n    return this;\n  }\n\n  cooldownConfig(config: Buildable<CooldownConfig>): this {\n    this.definition.cooldown = resolveBuildable(config);\n    return this;\n  }\n\n  permissions(config: Buildable<PermissionConfig>): this {\n    this.definition.permissions = resolveBuildable(config);\n    return this;\n  }\n\n  guildOnly(): this {\n    this.definition.guildOnly = true;\n    return this;\n  }\n\n  execute(handler: (ctx: MessageContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): MessageCommandDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get name(): string {\n    return this.definition.name;\n  }\n}\n","import type {\n  MessageContextMenuDefinition,\n  PermissionConfig,\n  UserContextMenuDefinition,\n} from \"../types/index.js\";\nimport type { MessageContextMenuContext, UserContextMenuContext } from \"../types/index.js\";\n\n/** Builder for user context menu commands (right-click user). */\nexport class UserContextMenuBuilder<TDatabase = unknown> {\n  private readonly definition: UserContextMenuDefinition<TDatabase>;\n\n  constructor(name: string) {\n    this.definition = {\n      name,\n      execute: async () => {\n        throw new Error(`User context menu \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  permissions(config: PermissionConfig): this {\n    this.definition.permissions = config;\n    return this;\n  }\n\n  execute(handler: (ctx: UserContextMenuContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): UserContextMenuDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get name(): string {\n    return this.definition.name;\n  }\n}\n\n/** Builder for message context menu commands (right-click message). */\nexport class MessageContextMenuBuilder<TDatabase = unknown> {\n  private readonly definition: MessageContextMenuDefinition<TDatabase>;\n\n  constructor(name: string) {\n    this.definition = {\n      name,\n      execute: async () => {\n        throw new Error(`Message context menu \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  permissions(config: PermissionConfig): this {\n    this.definition.permissions = config;\n    return this;\n  }\n\n  execute(handler: (ctx: MessageContextMenuContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): MessageContextMenuDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get name(): string {\n    return this.definition.name;\n  }\n}\n","import type { EventDefinition } from \"../types/index.js\";\nimport type { EventContext } from \"../types/index.js\";\n\n/**\n * Fluent builder for Discord client events.\n */\nexport class EventBuilder<TDatabase = unknown, TEvent extends string = string> {\n  private readonly definition: EventDefinition<TDatabase, TEvent>;\n\n  constructor(name: TEvent) {\n    this.definition = {\n      name,\n      once: false,\n      execute: async () => {\n        throw new Error(`Event \"${name}\" has no execute handler.`);\n      },\n    };\n  }\n\n  /** Run handler only once. */\n  once(): this {\n    this.definition.once = true;\n    return this;\n  }\n\n  execute(handler: (ctx: EventContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): EventDefinition<TDatabase, TEvent> {\n    return { ...this.definition };\n  }\n\n  get name(): TEvent {\n    return this.definition.name;\n  }\n}\n","import {\n  ActionRowBuilder,\n  ButtonBuilder,\n  ButtonStyle,\n  ModalBuilder,\n  StringSelectMenuBuilder,\n  TextInputBuilder,\n  TextInputStyle,\n  type APIButtonComponent,\n  type APISelectMenuComponent,\n  type APITextInputComponent,\n} from \"discord.js\";\n\nexport { ButtonStyle, TextInputStyle };\n\n/** Fluent helper for creating action row buttons. */\nexport class ButtonRowBuilder {\n  private readonly row = new ActionRowBuilder<ButtonBuilder>();\n\n  primary(customId: string, label: string): this {\n    this.row.addComponents(new ButtonBuilder().setCustomId(customId).setLabel(label).setStyle(ButtonStyle.Primary));\n    return this;\n  }\n\n  secondary(customId: string, label: string): this {\n    this.row.addComponents(new ButtonBuilder().setCustomId(customId).setLabel(label).setStyle(ButtonStyle.Secondary));\n    return this;\n  }\n\n  danger(customId: string, label: string): this {\n    this.row.addComponents(new ButtonBuilder().setCustomId(customId).setLabel(label).setStyle(ButtonStyle.Danger));\n    return this;\n  }\n\n  success(customId: string, label: string): this {\n    this.row.addComponents(new ButtonBuilder().setCustomId(customId).setLabel(label).setStyle(ButtonStyle.Success));\n    return this;\n  }\n\n  link(url: string, label: string): this {\n    this.row.addComponents(new ButtonBuilder().setURL(url).setLabel(label).setStyle(ButtonStyle.Link));\n    return this;\n  }\n\n  build(): ActionRowBuilder<ButtonBuilder> {\n    return this.row;\n  }\n}\n\n/** Fluent helper for string select menus. */\nexport class SelectMenuRowBuilder {\n  private readonly customId: string;\n  private placeholder = \"Select an option\";\n  private options: Array<{ label: string; value: string; description?: string; emoji?: string }> = [];\n  private minValues = 1;\n  private maxValues = 1;\n\n  constructor(customId: string) {\n    this.customId = customId;\n  }\n\n  setPlaceholder(text: string): this {\n    this.placeholder = text;\n    return this;\n  }\n\n  addOption(label: string, value: string, description?: string): this {\n    this.options.push({ label, value, description });\n    return this;\n  }\n\n  setMinMax(min: number, max: number): this {\n    this.minValues = min;\n    this.maxValues = max;\n    return this;\n  }\n\n  build(): ActionRowBuilder<StringSelectMenuBuilder> {\n    const menu = new StringSelectMenuBuilder()\n      .setCustomId(this.customId)\n      .setPlaceholder(this.placeholder)\n      .setMinValues(this.minValues)\n      .setMaxValues(this.maxValues)\n      .addOptions(this.options.map((o) => ({ label: o.label, value: o.value, description: o.description })));\n    return new ActionRowBuilder<StringSelectMenuBuilder>().addComponents(menu);\n  }\n}\n\n/** Fluent helper for modals. */\nexport class ModalFormBuilder {\n  private readonly modal: ModalBuilder;\n  private currentRow = new ActionRowBuilder<TextInputBuilder>();\n\n  constructor(customId: string, title: string) {\n    this.modal = new ModalBuilder().setCustomId(customId).setTitle(title);\n  }\n\n  textInput(\n    customId: string,\n    label: string,\n    opts?: { style?: TextInputStyle; placeholder?: string; required?: boolean; minLength?: number; maxLength?: number; value?: string },\n  ): this {\n    const input = new TextInputBuilder()\n      .setCustomId(customId)\n      .setLabel(label)\n      .setStyle(opts?.style ?? TextInputStyle.Short)\n      .setRequired(opts?.required ?? true);\n    if (opts?.placeholder) input.setPlaceholder(opts.placeholder);\n    if (opts?.minLength !== undefined) input.setMinLength(opts.minLength);\n    if (opts?.maxLength !== undefined) input.setMaxLength(opts.maxLength);\n    if (opts?.value) input.setValue(opts.value);\n    this.currentRow.addComponents(input);\n    this.modal.addComponents(this.currentRow);\n    this.currentRow = new ActionRowBuilder<TextInputBuilder>();\n    return this;\n  }\n\n  build(): ModalBuilder {\n    return this.modal;\n  }\n}\n\nexport type { APIButtonComponent, APISelectMenuComponent, APITextInputComponent };\n","import type {\n  ButtonContext,\n  ButtonDefinition,\n  ModalContext,\n  ModalDefinition,\n  SelectMenuContext,\n  SelectMenuDefinition,\n} from \"../types/index.js\";\n\n/**\n * Fluent builder for button interaction handlers.\n *\n * @example\n * ```ts\n * new ButtonHandlerBuilder(\"confirm\")\n *   .prefix()\n *   .execute(async (ctx) => { ... })\n * ```\n */\nexport class ButtonHandlerBuilder<TDatabase = unknown> {\n  private readonly definition: ButtonDefinition<TDatabase>;\n\n  constructor(customId: string) {\n    this.definition = {\n      customId,\n      execute: async () => {\n        throw new Error(`Button handler \"${customId}\" has no execute handler.`);\n      },\n    };\n  }\n\n  static create<TDatabase = unknown>(customId: string): ButtonHandlerBuilder<TDatabase> {\n    return new ButtonHandlerBuilder<TDatabase>(customId);\n  }\n\n  /** Match any customId starting with `customId:` (e.g. `confirm:delete`). */\n  prefix(enabled = true): this {\n    this.definition.prefix = enabled;\n    return this;\n  }\n\n  execute(handler: (ctx: ButtonContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): ButtonDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n\n  get customId(): string {\n    return this.definition.customId;\n  }\n}\n\n/**\n * Fluent builder for string select menu interaction handlers.\n */\nexport class SelectMenuHandlerBuilder<TDatabase = unknown> {\n  private readonly definition: SelectMenuDefinition<TDatabase>;\n\n  constructor(customId: string) {\n    this.definition = {\n      customId,\n      execute: async () => {\n        throw new Error(`Select menu handler \"${customId}\" has no execute handler.`);\n      },\n    };\n  }\n\n  static create<TDatabase = unknown>(customId: string): SelectMenuHandlerBuilder<TDatabase> {\n    return new SelectMenuHandlerBuilder<TDatabase>(customId);\n  }\n\n  prefix(enabled = true): this {\n    this.definition.prefix = enabled;\n    return this;\n  }\n\n  execute(handler: (ctx: SelectMenuContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): SelectMenuDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n}\n\n/**\n * Fluent builder for modal submit interaction handlers.\n */\nexport class ModalHandlerBuilder<TDatabase = unknown> {\n  private readonly definition: ModalDefinition<TDatabase>;\n\n  constructor(customId: string) {\n    this.definition = {\n      customId,\n      execute: async () => {\n        throw new Error(`Modal handler \"${customId}\" has no execute handler.`);\n      },\n    };\n  }\n\n  static create<TDatabase = unknown>(customId: string): ModalHandlerBuilder<TDatabase> {\n    return new ModalHandlerBuilder<TDatabase>(customId);\n  }\n\n  prefix(enabled = true): this {\n    this.definition.prefix = enabled;\n    return this;\n  }\n\n  execute(handler: (ctx: ModalContext<TDatabase>) => Promise<void>): this {\n    this.definition.execute = handler;\n    return this;\n  }\n\n  build(): ModalDefinition<TDatabase> {\n    return { ...this.definition };\n  }\n}\n","import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync, unlinkSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { DatabaseAdapter } from \"./DatabaseAdapter.js\";\nimport { DatabaseError } from \"../errors/index.js\";\n\ninterface FileStore {\n  [key: string]: unknown;\n}\n\n/**\n * JSON file-backed key-value store for lightweight persistence.\n * Suitable for small bots; use createAdapter() with Prisma for production scale.\n */\nexport class FileAdapter extends DatabaseAdapter<FileStore> {\n  private readonly filePath: string;\n  private data: FileStore = {};\n  private writeChain: Promise<void> = Promise.resolve();\n\n  constructor(filePath: string) {\n    super();\n    this.filePath = resolve(filePath);\n  }\n\n  async connect(): Promise<void> {\n    const dir = dirname(this.filePath);\n    if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n\n    if (existsSync(this.filePath)) {\n      try {\n        const raw = readFileSync(this.filePath, \"utf-8\");\n        this.data = JSON.parse(raw) as FileStore;\n      } catch (err) {\n        throw new DatabaseError(`Failed to read database file: ${this.filePath}`, err);\n      }\n    } else {\n      this.data = {};\n      await this.flush();\n    }\n    this.client = this.data;\n  }\n\n  async disconnect(): Promise<void> {\n    await this.flush();\n    this.client = null;\n  }\n\n  async flush(): Promise<void> {\n    await this.queueWrite(() => this.writeToDisk());\n  }\n\n  get<T>(key: string): T | undefined {\n    return this.getClient()[key] as T | undefined;\n  }\n\n  async set<T>(key: string, value: T): Promise<void> {\n    this.getClient()[key] = value;\n    await this.queueWrite(() => this.writeToDisk());\n  }\n\n  async delete(key: string): Promise<boolean> {\n    const existed = key in this.getClient();\n    delete this.getClient()[key];\n    await this.queueWrite(() => this.writeToDisk());\n    return existed;\n  }\n\n  has(key: string): boolean {\n    return key in this.getClient();\n  }\n\n  keys(prefix?: string): string[] {\n    const all = Object.keys(this.getClient());\n    if (!prefix) return all;\n    return all.filter((k) => k.startsWith(prefix));\n  }\n\n  private async queueWrite(write: () => void): Promise<void> {\n    const task = this.writeChain.then(write);\n    this.writeChain = task.catch(() => undefined);\n    await task;\n  }\n\n  private writeToDisk(): void {\n    const tmpPath = `${this.filePath}.tmp`;\n    try {\n      writeFileSync(tmpPath, JSON.stringify(this.data, null, 2), \"utf-8\");\n      renameSync(tmpPath, this.filePath);\n    } catch (err) {\n      if (existsSync(tmpPath)) {\n        try {\n          unlinkSync(tmpPath);\n        } catch {\n          // best-effort cleanup\n        }\n      }\n      throw new DatabaseError(`Failed to write database file: ${this.filePath}`, err);\n    }\n  }\n}\n","import { DatabaseAdapter } from \"./DatabaseAdapter.js\";\n\n/**\n * Wrap any external database client in a DatabaseAdapter.\n *\n * @example Prisma\n * ```ts\n * const adapter = createAdapter(prisma, {\n *   connect: () => prisma.$connect(),\n *   disconnect: () => prisma.$disconnect(),\n * });\n * ```\n */\nexport function createAdapter<TClient>(\n  client: TClient,\n  hooks: {\n    connect: () => Promise<void>;\n    disconnect: () => Promise<void>;\n  },\n): DatabaseAdapter<TClient> {\n  return new (class extends DatabaseAdapter<TClient> {\n    constructor() {\n      super();\n      this.client = client;\n    }\n\n    async connect(): Promise<void> {\n      await hooks.connect();\n    }\n\n    async disconnect(): Promise<void> {\n      await hooks.disconnect();\n      this.client = null;\n    }\n  })();\n}\n","import type { DatabaseAdapter } from \"./DatabaseAdapter.js\";\nimport { MemoryAdapter } from \"./MemoryAdapter.js\";\nimport { FileAdapter } from \"./FileAdapter.js\";\nimport { createAdapter } from \"./createAdapter.js\";\n\ntype AdapterKind = \"memory\" | \"file\" | \"custom\";\n\n/**\n * Fluent builder for database adapters.\n *\n * @example\n * ```ts\n * DatabaseBuilder.create().file(\"./data.json\").build()\n * DatabaseBuilder.create().custom(prisma, { connect, disconnect }).build()\n * ```\n */\nexport class DatabaseBuilder<TClient = unknown> {\n  private kind: AdapterKind = \"memory\";\n  private filePath?: string;\n  private customAdapter?: DatabaseAdapter<TClient>;\n  private customClient?: TClient;\n  private hooks?: { connect: () => Promise<void>; disconnect: () => Promise<void> };\n\n  static create<TClient = unknown>(): DatabaseBuilder<TClient> {\n    return new DatabaseBuilder<TClient>();\n  }\n\n  static memory(): MemoryAdapter {\n    return new MemoryAdapter();\n  }\n\n  static file(path: string): FileAdapter {\n    return new FileAdapter(path);\n  }\n\n  memory(): this {\n    this.kind = \"memory\";\n    return this;\n  }\n\n  file(path: string): this {\n    this.kind = \"file\";\n    this.filePath = path;\n    return this;\n  }\n\n  adapter(adapter: DatabaseAdapter<TClient>): this {\n    this.kind = \"custom\";\n    this.customAdapter = adapter;\n    return this;\n  }\n\n  custom(\n    client: TClient,\n    hooks: { connect: () => Promise<void>; disconnect: () => Promise<void> },\n  ): this {\n    this.kind = \"custom\";\n    this.customClient = client;\n    this.hooks = hooks;\n    return this;\n  }\n\n  build(): DatabaseAdapter<TClient> {\n    if (this.kind === \"custom\") {\n      if (this.customAdapter) return this.customAdapter;\n      if (this.customClient && this.hooks) {\n        return createAdapter(this.customClient, this.hooks);\n      }\n      throw new Error(\"Custom database requires .adapter() or .custom(client, hooks).\");\n    }\n    if (this.kind === \"file\") {\n      if (!this.filePath) throw new Error(\"File database requires .file(path).\");\n      return new FileAdapter(this.filePath) as unknown as DatabaseAdapter<TClient>;\n    }\n    return new MemoryAdapter() as unknown as DatabaseAdapter<TClient>;\n  }\n}\n","import { z } from \"zod\";\nimport { ConfigurationError } from \"../errors/index.js\";\n\nexport const botConfigSchema = z.object({\n  token: z.string().min(1, \"DISCORD_TOKEN is required\"),\n  clientId: z.string().min(1, \"CLIENT_ID is required\"),\n  guildId: z.string().optional(),\n  prefix: z.string().default(\"!\"),\n  registerCommandsGlobally: z.boolean().default(false),\n  deployCommandsOnStart: z.boolean().default(true),\n  logLevel: z.enum([\"debug\", \"info\", \"warn\", \"error\"]).default(\"info\"),\n  gracefulShutdown: z.boolean().default(true),\n  ownerIds: z.array(z.string()).default([]),\n});\n\nexport type ValidatedBotConfig = z.infer<typeof botConfigSchema>;\n\nconst ENV_MAP = {\n  token: [\"DISCORD_TOKEN\", \"BOT_TOKEN\"],\n  clientId: [\"CLIENT_ID\", \"DISCORD_CLIENT_ID\"],\n  guildId: [\"GUILD_ID\", \"DISCORD_GUILD_ID\"],\n  prefix: [\"BOT_PREFIX\"],\n  registerCommandsGlobally: [\"REGISTER_COMMANDS_GLOBALLY\"],\n  deployCommandsOnStart: [\"DEPLOY_COMMANDS_ON_START\"],\n  logLevel: [\"LOG_LEVEL\"],\n  gracefulShutdown: [\"GRACEFUL_SHUTDOWN\"],\n  ownerIds: [\"BOT_OWNER_IDS\"],\n} as const;\n\nfunction readEnv(keys: readonly string[]): string | undefined {\n  for (const key of keys) {\n    const val = process.env[key];\n    if (val !== undefined && val !== \"\") return val;\n  }\n  return undefined;\n}\n\nfunction parseBool(value: string | undefined, fallback: boolean): boolean {\n  if (value === undefined) return fallback;\n  return [\"1\", \"true\", \"yes\", \"on\"].includes(value.toLowerCase());\n}\n\n/**\n * Load and validate bot configuration from environment variables.\n */\nexport function loadConfigFromEnv(overrides: Partial<ValidatedBotConfig> = {}): ValidatedBotConfig {\n  const raw = {\n    token: overrides.token ?? readEnv(ENV_MAP.token),\n    clientId: overrides.clientId ?? readEnv(ENV_MAP.clientId),\n    guildId: overrides.guildId ?? readEnv(ENV_MAP.guildId),\n    prefix: overrides.prefix ?? readEnv(ENV_MAP.prefix) ?? \"!\",\n    registerCommandsGlobally: overrides.registerCommandsGlobally ??\n      parseBool(readEnv(ENV_MAP.registerCommandsGlobally), false),\n    deployCommandsOnStart: overrides.deployCommandsOnStart ??\n      parseBool(readEnv(ENV_MAP.deployCommandsOnStart), true),\n    logLevel: overrides.logLevel ??\n      (readEnv(ENV_MAP.logLevel) as ValidatedBotConfig[\"logLevel\"] | undefined) ??\n      \"info\",\n    gracefulShutdown: overrides.gracefulShutdown ??\n      parseBool(readEnv(ENV_MAP.gracefulShutdown), true),\n    ownerIds: overrides.ownerIds ??\n      readEnv(ENV_MAP.ownerIds)?.split(\",\").map((s) => s.trim()).filter(Boolean) ??\n      [],\n  };\n\n  const result = botConfigSchema.safeParse(raw);\n  if (!result.success) {\n    const messages = result.error.issues.map((i) => i.message).join(\"; \");\n    throw new ConfigurationError(`Invalid configuration: ${messages}`, result.error);\n  }\n  return result.data;\n}\n\n/**\n * Validate a partial config object.\n */\nexport function validateConfig(config: unknown): ValidatedBotConfig {\n  const result = botConfigSchema.safeParse(config);\n  if (!result.success) {\n    const messages = result.error.issues.map((i) => i.message).join(\"; \");\n    throw new ConfigurationError(`Invalid configuration: ${messages}`, result.error);\n  }\n  return result.data;\n}\n","import { loadConfigFromEnv, validateConfig } from \"./schema.js\";\nimport type { ValidatedBotConfig } from \"./schema.js\";\n\n/**\n * Fluent builder for bot configuration.\n *\n * @example\n * ```ts\n * const config = ConfigBuilder.fromEnv()\n *   .prefix(\"!\")\n *   .ownerIds(\"123\")\n *   .build();\n * ```\n */\nexport class ConfigBuilder {\n  private values: Partial<ValidatedBotConfig> = {};\n  private useEnv = false;\n\n  static create(): ConfigBuilder {\n    return new ConfigBuilder();\n  }\n\n  static fromEnv(overrides: Partial<ValidatedBotConfig> = {}): ConfigBuilder {\n    const builder = new ConfigBuilder();\n    builder.useEnv = true;\n    builder.values = overrides;\n    return builder;\n  }\n\n  token(value: string): this {\n    this.values.token = value;\n    return this;\n  }\n\n  clientId(value: string): this {\n    this.values.clientId = value;\n    return this;\n  }\n\n  guildId(value: string): this {\n    this.values.guildId = value;\n    return this;\n  }\n\n  prefix(value: string): this {\n    this.values.prefix = value;\n    return this;\n  }\n\n  registerCommandsGlobally(value = true): this {\n    this.values.registerCommandsGlobally = value;\n    return this;\n  }\n\n  deployCommandsOnStart(value = true): this {\n    this.values.deployCommandsOnStart = value;\n    return this;\n  }\n\n  logLevel(level: ValidatedBotConfig[\"logLevel\"]): this {\n    this.values.logLevel = level;\n    return this;\n  }\n\n  gracefulShutdown(value = true): this {\n    this.values.gracefulShutdown = value;\n    return this;\n  }\n\n  ownerIds(...ids: string[]): this {\n    this.values.ownerIds = ids;\n    return this;\n  }\n\n  build(): ValidatedBotConfig {\n    if (this.useEnv) {\n      return loadConfigFromEnv(this.values);\n    }\n    return validateConfig(this.values);\n  }\n}\n","import { Logger, type LogLevel } from \"./Logger.js\";\n\n/**\n * Fluent builder for structured bot logging.\n */\nexport class LoggerBuilder {\n  private logLevel: LogLevel = \"info\";\n  private logPrefix = \"discord-bot-builder\";\n  private useTimestamps = true;\n\n  static create(): LoggerBuilder {\n    return new LoggerBuilder();\n  }\n\n  static production(name: string): LoggerBuilder {\n    return new LoggerBuilder().withPrefix(name).withLevel(\"info\");\n  }\n\n  static debug(name: string): LoggerBuilder {\n    return new LoggerBuilder().withPrefix(name).withLevel(\"debug\");\n  }\n\n  withLevel(value: LogLevel): this {\n    this.logLevel = value;\n    return this;\n  }\n\n  withPrefix(value: string): this {\n    this.logPrefix = value;\n    return this;\n  }\n\n  timestamps(enabled = true): this {\n    this.useTimestamps = enabled;\n    return this;\n  }\n\n  build(): Logger {\n    return new Logger({\n      level: this.logLevel,\n      prefix: this.logPrefix,\n      timestamp: this.useTimestamps,\n    });\n  }\n}\n","import type { BotPlugin, BotServices } from \"../types/index.js\";\nimport type { BotBuilder } from \"../core/BotBuilder.js\";\n\n/**\n * Fluent builder for bot plugins with lifecycle hooks.\n */\nexport class PluginBuilder<TDatabase = unknown> {\n  private readonly name: string;\n  private setupFn: (builder: BotBuilder<TDatabase>) => void | Promise<void> = async () => {};\n  private onReadyFn?: (services: BotServices<TDatabase>) => void | Promise<void>;\n  private onStartFn?: (services: BotServices<TDatabase>) => void | Promise<void>;\n  private onStopFn?: (services: BotServices<TDatabase>) => void | Promise<void>;\n\n  constructor(name: string) {\n    this.name = name;\n  }\n\n  static create<TDatabase = unknown>(name: string): PluginBuilder<TDatabase> {\n    return new PluginBuilder<TDatabase>(name);\n  }\n\n  setup(handler: (builder: BotBuilder<TDatabase>) => void | Promise<void>): this {\n    this.setupFn = handler;\n    return this;\n  }\n\n  onReady(handler: (services: BotServices<TDatabase>) => void | Promise<void>): this {\n    this.onReadyFn = handler;\n    return this;\n  }\n\n  onStart(handler: (services: BotServices<TDatabase>) => void | Promise<void>): this {\n    this.onStartFn = handler;\n    return this;\n  }\n\n  onStop(handler: (services: BotServices<TDatabase>) => void | Promise<void>): this {\n    this.onStopFn = handler;\n    return this;\n  }\n\n  build(): BotPlugin<TDatabase> {\n    return {\n      name: this.name,\n      setup: this.setupFn,\n      onReady: this.onReadyFn,\n      onStart: this.onStartFn,\n      onStop: this.onStopFn,\n    };\n  }\n}\n","import { EmbedBuilder as DiscordEmbedBuilder, type ColorResolvable } from \"discord.js\";\n\nexport interface EmbedOptions {\n  title?: string;\n  description?: string;\n  color?: ColorResolvable;\n  url?: string;\n  thumbnail?: string;\n  image?: string;\n  footer?: { text: string; iconURL?: string };\n  fields?: Array<{ name: string; value: string; inline?: boolean }>;\n  timestamp?: boolean;\n}\n\n/**\n * Fluent embed builder wrapping discord.js EmbedBuilder.\n */\nexport class EmbedBuilder {\n  private readonly embed: DiscordEmbedBuilder;\n\n  constructor(options: EmbedOptions = {}) {\n    this.embed = new DiscordEmbedBuilder();\n    if (options.title) this.embed.setTitle(options.title);\n    if (options.description) this.embed.setDescription(options.description);\n    if (options.color !== undefined) this.embed.setColor(options.color);\n    if (options.url) this.embed.setURL(options.url);\n    if (options.thumbnail) this.embed.setThumbnail(options.thumbnail);\n    if (options.image) this.embed.setImage(options.image);\n    if (options.footer) this.embed.setFooter(options.footer);\n    if (options.timestamp) this.embed.setTimestamp();\n    if (options.fields) {\n      for (const field of options.fields) {\n        this.embed.addFields(field);\n      }\n    }\n  }\n\n  static success(title: string, description?: string): EmbedBuilder {\n    return new EmbedBuilder({ title, description, color: 0x57f287 });\n  }\n\n  static error(title: string, description?: string): EmbedBuilder {\n    return new EmbedBuilder({ title, description, color: 0xed4245 });\n  }\n\n  static info(title: string, description?: string): EmbedBuilder {\n    return new EmbedBuilder({ title, description, color: 0x5865f2 });\n  }\n\n  static warning(title: string, description?: string): EmbedBuilder {\n    return new EmbedBuilder({ title, description, color: 0xfee75c });\n  }\n\n  title(value: string): this {\n    this.embed.setTitle(value);\n    return this;\n  }\n\n  description(value: string): this {\n    this.embed.setDescription(value);\n    return this;\n  }\n\n  color(value: ColorResolvable): this {\n    this.embed.setColor(value);\n    return this;\n  }\n\n  field(name: string, value: string, inline = false): this {\n    this.embed.addFields({ name, value, inline });\n    return this;\n  }\n\n  footer(text: string, iconURL?: string): this {\n    this.embed.setFooter({ text, iconURL });\n    return this;\n  }\n\n  timestamp(value?: Date): this {\n    this.embed.setTimestamp(value);\n    return this;\n  }\n\n  build(): DiscordEmbedBuilder {\n    return this.embed;\n  }\n}\n","import {\n  ActionRowBuilder,\n  ButtonBuilder,\n  ButtonStyle,\n  ComponentType,\n  type ButtonInteraction,\n  type Message,\n  type MessageComponentInteraction,\n  type MessageEditOptions,\n} from \"discord.js\";\n\nexport interface PaginatorPage {\n  content?: string;\n  embeds?: MessageEditOptions[\"embeds\"];\n}\n\nexport interface PaginatorOptions {\n  pages: PaginatorPage[];\n  timeout?: number;\n  userId?: string;\n}\n\nconst PREV_ID = \"paginator:prev\";\nconst NEXT_ID = \"paginator:next\";\nconst STOP_ID = \"paginator:stop\";\n\nfunction row(page: number, total: number): ActionRowBuilder<ButtonBuilder> {\n  return new ActionRowBuilder<ButtonBuilder>().addComponents(\n    new ButtonBuilder().setCustomId(PREV_ID).setLabel(\"◀\").setStyle(ButtonStyle.Secondary).setDisabled(page === 0),\n    new ButtonBuilder().setCustomId(NEXT_ID).setLabel(\"▶\").setStyle(ButtonStyle.Secondary).setDisabled(page >= total - 1),\n    new ButtonBuilder().setCustomId(STOP_ID).setLabel(\"✕\").setStyle(ButtonStyle.Danger),\n  );\n}\n\n/**\n * Send a paginated message with prev/next/stop buttons.\n */\nexport async function sendPaginator(\n  message: Message,\n  options: PaginatorOptions,\n): Promise<void> {\n  const { pages, timeout = 120_000, userId } = options;\n  if (pages.length === 0) return;\n\n  let current = 0;\n  const sent = await message.reply({\n    ...pages[current],\n    components: [row(current, pages.length)],\n  });\n\n  const collector = sent.createMessageComponentCollector({\n    time: timeout,\n    componentType: ComponentType.Button,\n    filter: (i: MessageComponentInteraction) => {\n      if (userId && i.user.id !== userId) {\n        void i.reply({ content: \"This paginator isn't for you.\", ephemeral: true });\n        return false;\n      }\n      return [PREV_ID, NEXT_ID, STOP_ID].includes(i.customId);\n    },\n  });\n\n  collector.on(\"collect\", async (interaction) => {\n    if (!interaction.isButton()) return;\n    if (interaction.customId === STOP_ID) {\n      collector.stop(\"stopped\");\n      await interaction.update({ components: [] });\n      return;\n    }\n    if (interaction.customId === PREV_ID && current > 0) current--;\n    if (interaction.customId === NEXT_ID && current < pages.length - 1) current++;\n    await interaction.update({ ...pages[current], components: [row(current, pages.length)] });\n  });\n\n  collector.on(\"end\", async () => {\n    try {\n      await sent.edit({ components: [] });\n    } catch {\n      // message may have been deleted\n    }\n  });\n}\n","import type { Message, MessageEditOptions } from \"discord.js\";\nimport { sendPaginator, type PaginatorOptions, type PaginatorPage } from \"./pagination.js\";\n\n/**\n * Fluent builder for paginated Discord messages.\n */\nexport class PaginatorBuilder {\n  private pageList: PaginatorPage[] = [];\n  private timeoutMs = 120_000;\n  private userId?: string;\n\n  static create(): PaginatorBuilder {\n    return new PaginatorBuilder();\n  }\n\n  page(content: string): this;\n  page(page: PaginatorPage): this;\n  page(contentOrPage: string | PaginatorPage): this {\n    if (typeof contentOrPage === \"string\") {\n      this.pageList.push({ content: contentOrPage });\n    } else {\n      this.pageList.push(contentOrPage);\n    }\n    return this;\n  }\n\n  embedPage(embeds: MessageEditOptions[\"embeds\"]): this {\n    this.pageList.push({ embeds });\n    return this;\n  }\n\n  addPages(list: PaginatorPage[]): this {\n    this.pageList.push(...list);\n    return this;\n  }\n\n  timeout(ms: number): this {\n    this.timeoutMs = ms;\n    return this;\n  }\n\n  forUser(userId: string): this {\n    this.userId = userId;\n    return this;\n  }\n\n  buildOptions(): PaginatorOptions {\n    return {\n      pages: [...this.pageList],\n      timeout: this.timeoutMs,\n      userId: this.userId,\n    };\n  }\n\n  async send(message: Message): Promise<void> {\n    await sendPaginator(message, this.buildOptions());\n  }\n}\n","import type { CooldownConfig } from \"../types/index.js\";\n\n/**\n * Fluent builder for command cooldowns.\n */\nexport class CooldownBuilder {\n  private durationSeconds = 3;\n  private scope: CooldownConfig[\"scope\"] = \"user\";\n\n  static create(): CooldownBuilder {\n    return new CooldownBuilder();\n  }\n\n  static ofSeconds(seconds: number): CooldownBuilder {\n    return new CooldownBuilder().duration(seconds);\n  }\n\n  duration(value: number): this {\n    this.durationSeconds = value;\n    return this;\n  }\n\n  perUser(): this {\n    this.scope = \"user\";\n    return this;\n  }\n\n  perGuild(): this {\n    this.scope = \"guild\";\n    return this;\n  }\n\n  perChannel(): this {\n    this.scope = \"channel\";\n    return this;\n  }\n\n  build(): CooldownConfig {\n    return { seconds: this.durationSeconds, scope: this.scope };\n  }\n}\n"]}