/** * Error category enum for classifying bot errors. */ export enum ErrorCategory { USER_INPUT = 'USER_INPUT', PERMISSION = 'PERMISSION', BOT_INTERNAL = 'BOT_INTERNAL', DISCORD_API = 'DISCORD_API', } /** * Custom error class for Kord bot. * Uses i18n message keys instead of hardcoded strings. * The actual translated message is resolved at report time by ErrorReporter. */ export class BotError extends Error { /** Error code for internal tracking (e.g. 'E2001') — NOT shown to users */ public readonly code: string; /** Error category for determining response styling */ public readonly category: ErrorCategory; /** i18n key prefix for looking up translations (e.g. 'errors.E2001') */ public readonly messageKey: string; /** Original error that caused this BotError */ public readonly cause?: Error; constructor(options: { code: string; category: ErrorCategory; messageKey: string; cause?: Error; }) { super(`[${options.code}] ${options.messageKey}`); this.name = 'BotError'; this.code = options.code; this.category = options.category; this.messageKey = options.messageKey; this.cause = options.cause; } }