djs-next 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of djs-next might be problematic. Click here for more details.
- package/README.md +250 -0
- package/assets/djs-next.png +0 -0
- package/bin/create-djs-next.js +78 -0
- package/dist/index.d.mts +161 -0
- package/dist/index.d.ts +161 -0
- package/dist/index.js +1283 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1259 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +45 -0
- package/src/client.ts +492 -0
- package/src/handlers/commandHandler.ts +139 -0
- package/src/handlers/componentHandler.ts +31 -0
- package/src/handlers/eventHandler.ts +37 -0
- package/src/handlers/taskHandler.ts +38 -0
- package/src/handlers/utils.ts +25 -0
- package/src/index.ts +10 -0
- package/src/plugins/dnxt.ts +418 -0
- package/src/templates/cjs.ts +54 -0
- package/src/templates/esm.ts +50 -0
- package/src/templates/ts.ts +53 -0
- package/src/test/client.test.ts +8 -0
- package/src/types.ts +94 -0
- package/src/utils/PaginationBuilder.ts +94 -0
- package/src/utils/configLoader.ts +27 -0
- package/src/utils/i18n.ts +57 -0
- package/src/utils/paginate.ts +90 -0
- package/src/utils/prompts.ts +76 -0
- package/test_payload.js +3 -0
- package/test_reply.js +4 -0
- package/tsconfig.json +16 -0
- package/tsup.config.ts +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/handlers/commandHandler.ts","../src/handlers/utils.ts","../src/handlers/eventHandler.ts","../src/handlers/componentHandler.ts","../src/handlers/taskHandler.ts","../src/utils/configLoader.ts","../src/utils/i18n.ts","../src/plugins/dnxt.ts","../src/utils/paginate.ts","../src/utils/prompts.ts","../src/utils/PaginationBuilder.ts"],"sourcesContent":["import 'dotenv/config';\nexport * from './client.js';\nexport { DJSNextClientOptions, FileCommand, FileComponent, FileTask, Event as DJSNextEvent, DJSNextConfig, CooldownAdapter } from './types.js';\nexport * from './utils/paginate.js';\nexport * from './utils/prompts.js';\nexport * from './utils/configLoader.js';\nexport * from './utils/i18n.js';\nexport * from './utils/PaginationBuilder.js';\n// Re-export everything from discord.js so users don't need to install it explicitly\nexport * from 'discord.js';\n","import { Client, Collection, Interaction, Message } from 'discord.js';\nimport { DJSNextClientOptions, FileCommand, FileComponent, DJSNextConfig } from './types.js';\nimport { loadAndDeployCommands } from './handlers/commandHandler.js';\nimport { loadEvents } from './handlers/eventHandler.js';\nimport { loadComponents } from './handlers/componentHandler.js';\nimport { loadTasks } from './handlers/taskHandler.js';\nimport path from 'path';\nimport fs from 'fs';\nimport { pathToFileURL } from 'url';\n\nimport { loadConfig } from './utils/configLoader.js';\nimport { loadLocales, translate } from './utils/i18n.js';\nimport { handleDNXT } from './plugins/dnxt.js';\n\nexport class DJSNextClient<DB = any> extends Client {\n public commands: Collection<string, FileCommand>;\n public components: Collection<string, FileComponent>;\n public cooldowns: Collection<string, Collection<string, number>>;\n public config: DJSNextConfig = {};\n public t = translate;\n public db!: DB;\n \n private _commandsDir?: string;\n private _eventsDir?: string;\n private _componentsDir?: string;\n private _tasksDir?: string;\n private _localesDir?: string;\n private _clientId?: string;\n private _guildId?: string;\n private _developers: string[];\n private _middleware?: (interaction: Interaction | Message, client: Client) => Promise<boolean> | boolean;\n private _prefixes: string[];\n private _enableSlashCommands: boolean;\n private _enableTextCommands: boolean;\n private _enableMentionPrefix: boolean | string[];\n private _enableNoPrefix: boolean | string[];\n\n constructor(options: DJSNextClientOptions) {\n super(options);\n this.commands = new Collection();\n this.components = new Collection();\n this.cooldowns = new Collection();\n \n this._commandsDir = options.commandsDir ? path.resolve(process.cwd(), options.commandsDir) : undefined;\n this._eventsDir = options.eventsDir ? path.resolve(process.cwd(), options.eventsDir) : undefined;\n this._componentsDir = options.componentsDir ? path.resolve(process.cwd(), options.componentsDir) : undefined;\n this._tasksDir = options.tasksDir ? path.resolve(process.cwd(), options.tasksDir) : undefined;\n this._clientId = options.clientId;\n this._guildId = options.guildId;\n this._developers = options.developers || [];\n this._middleware = options.middleware as any;\n \n const prefs = options.prefixes || [];\n this._prefixes = Array.isArray(prefs) ? prefs : [prefs];\n this._prefixes = this._prefixes.filter(p => p !== ''); // Remove empty strings, handle explicitly via enableNoPrefix\n\n this._enableSlashCommands = options.enableSlashCommands ?? true;\n this._enableTextCommands = options.enableTextCommands ?? true;\n this._enableMentionPrefix = options.enableMentionPrefix ?? true;\n this._enableNoPrefix = options.enableNoPrefix ?? false;\n if (options.db) this.db = options.db as any;\n\n this.attachCoreListeners();\n }\n\n private attachCoreListeners() {\n this.on('interactionCreate', async (interaction: Interaction) => {\n // 1. Global Middleware execution\n if (this._middleware) {\n try {\n const shouldContinue = await this._middleware(interaction, this);\n if (!shouldContinue) return; // Middleware halted execution\n } catch (error) {\n console.error(`[djs-next] Middleware error:`, error);\n return;\n }\n }\n\n // 2. Chat Input Commands Execution\n if (interaction.isChatInputCommand()) {\n if (!this._enableSlashCommands) return;\n \n let commandKey = interaction.commandName;\n const group = interaction.options.getSubcommandGroup(false);\n const sub = interaction.options.getSubcommand(false);\n\n if (group) commandKey += ` ${group}`;\n if (sub) commandKey += ` ${sub}`;\n\n const command = this.commands.get(commandKey);\n if (!command || !command.execute) return;\n\n if (!(await this.handlePreconditions(command, interaction, commandKey))) return;\n\n try {\n await command.execute(interaction, this);\n } catch (error) {\n await this.handleCommandError(error, commandKey, interaction);\n }\n }\n\n // 3. Autocomplete Routing\n if (interaction.isAutocomplete()) {\n let commandKey = interaction.commandName;\n const group = interaction.options.getSubcommandGroup(false);\n const sub = interaction.options.getSubcommand(false);\n\n if (group) commandKey += ` ${group}`;\n if (sub) commandKey += ` ${sub}`;\n\n const command = this.commands.get(commandKey);\n if (command && command.autocomplete) {\n try {\n await command.autocomplete(interaction, this);\n } catch (error) {\n console.error(`[djs-next] Error executing autocomplete for: \"${commandKey}\"`, error);\n }\n }\n }\n\n // 4. Component Routing (Buttons, Modals, Menus)\n if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n // Skip pagination built-in buttons\n if (interaction.customId === 'djs_prev' || interaction.customId === 'djs_next') return;\n\n let component = this.components.get(interaction.customId);\n let params: Record<string, string> = {};\n\n if (!component) {\n for (const [key, comp] of this.components) {\n if (!key.includes('[')) continue;\n // Escape regex chars except brackets\n const escapedKey = key.replace(/[.*+?^${}()|\\\\-]/g, '\\\\$&');\n // Transform \\[id\\] into (?<id>.+)\n const regexStr = '^' + escapedKey.replace(/\\\\\\[([^\\]]+)\\\\\\]/g, '(?<$1>.+)') + '$';\n const match = interaction.customId.match(new RegExp(regexStr));\n if (match) {\n component = comp;\n if (match.groups) params = match.groups;\n break;\n }\n }\n }\n if (component) {\n if (!(await this.handlePreconditions(component, interaction, interaction.customId))) return;\n\n try {\n await component.execute(interaction, this, params);\n } catch (error) {\n await this.handleCommandError(error, interaction.customId, interaction);\n }\n }\n }\n });\n\n this.on('messageCreate', async (message: Message) => {\n if (message.author.bot) return;\n if (!this._enableTextCommands) return;\n\n // Global Middleware execution for Messages\n if (this._middleware) {\n try {\n const shouldContinue = await this._middleware(message, this);\n if (!shouldContinue) return;\n } catch (error) {\n console.error(`[djs-next] Middleware error (Message):`, error);\n return;\n }\n }\n\n let content = message.content.trim();\n let matchedPrefix = '';\n let isCommand = false;\n\n // 1. Check Mention Prefix\n const mentionRegex = new RegExp(`^<@!?${this.user?.id}>\\\\s*`);\n const canUseMention = this._enableMentionPrefix === true || (Array.isArray(this._enableMentionPrefix) && this._enableMentionPrefix.includes(message.author.id));\n \n if (canUseMention && mentionRegex.test(content)) {\n matchedPrefix = content.match(mentionRegex)![0];\n isCommand = true;\n } else {\n // 2. Check Standard Prefixes\n const sortedPrefs = [...this._prefixes].sort((a, b) => b.length - a.length);\n \n for (const p of sortedPrefs) {\n if (content.startsWith(p)) {\n matchedPrefix = p;\n isCommand = true;\n break;\n }\n }\n\n // 3. Check No Prefix\n const canUseNoPrefix = this._enableNoPrefix === true || (Array.isArray(this._enableNoPrefix) && this._enableNoPrefix.includes(message.author.id));\n if (!isCommand && canUseNoPrefix) {\n isCommand = true;\n matchedPrefix = '';\n }\n }\n\n if (!isCommand) return;\n\n const args = content.slice(matchedPrefix.length).trim().split(/ +/g);\n const commandName = args.shift()?.toLowerCase();\n if (!commandName) return;\n\n // Find the command\n let command = this.commands.get(commandName);\n if (!command) {\n // Check aliases\n command = this.commands.find(c => c.aliases?.includes(commandName) || false);\n }\n\n if (!command || !command.executeText) return;\n\n if (!(await this.handlePreconditions(command, message, commandName))) return;\n\n // Execute Text Command\n try {\n await command.executeText(message, args, this);\n } catch (error) {\n await this.handleCommandError(error, commandName, message);\n }\n });\n }\n\n public async start(token: string): Promise<void> {\n if (!token) throw new Error(\"[djs-next] A token must be provided to start the bot.\");\n\n this.config = await loadConfig();\n\n // Fallback options to config, then to default 'src' folders\n this._guildId = this._guildId || this.config.devGuildId;\n \n if (!this._commandsDir) this._commandsDir = path.resolve(process.cwd(), this.config.directories?.commands || 'src/commands');\n if (!this._eventsDir) this._eventsDir = path.resolve(process.cwd(), this.config.directories?.events || 'src/events');\n if (!this._componentsDir) this._componentsDir = path.resolve(process.cwd(), this.config.directories?.components || 'src/components');\n if (!this._tasksDir) this._tasksDir = path.resolve(process.cwd(), this.config.directories?.tasks || 'src/tasks');\n if (!this._localesDir) this._localesDir = path.resolve(process.cwd(), this.config.directories?.locales || 'src/locales');\n\n // Only load if the directories actually exist\n if (fs.existsSync(this._localesDir)) loadLocales(this._localesDir, this.config.defaultLocale);\n\n // Load middleware from root\n if (!this._middleware) {\n const exts = ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'];\n const cwd = process.cwd();\n for (const ext of exts) {\n const mwPath = path.join(cwd, `middleware${ext}`);\n if (fs.existsSync(mwPath)) {\n try {\n const mwModule = await import(pathToFileURL(mwPath).href);\n this._middleware = mwModule.default?.middleware || mwModule.middleware || mwModule.default || mwModule;\n if (this._middleware) {\n console.log(`[djs-next] Loaded global middleware.`);\n break;\n }\n } catch (err) {\n console.error(`[djs-next] Error loading middleware file ${mwPath}:`, err);\n }\n }\n }\n }\n\n if (fs.existsSync(this._eventsDir)) await loadEvents(this, this._eventsDir);\n if (fs.existsSync(this._componentsDir)) this.components = await loadComponents(this._componentsDir);\n if (fs.existsSync(this._tasksDir)) await loadTasks(this, this._tasksDir);\n\n await this.login(token);\n console.log(`[djs-next] Bot is ready and logged in as ${this.user?.tag}!`);\n\n // Load and deploy commands AFTER login so we can automatically use this.user.id\n if (fs.existsSync(this._commandsDir)) {\n this._clientId = this._clientId || this.user!.id;\n this.commands = await loadAndDeployCommands(this._commandsDir, token, this._clientId, this._guildId);\n }\n }\n\n public enableDevTools(prefix: 'dnxt' | 'nxt' = 'dnxt'): void {\n if (prefix !== 'dnxt' && prefix !== 'nxt') {\n throw new Error(`[djs-next] Developer Tools prefix must be either 'dnxt' or 'nxt'. Received: ${prefix}`);\n }\n\n this.on('messageCreate', async (message) => {\n await handleDNXT(message, this, prefix);\n });\n\n console.log(`[djs-next] 🛠️ Developer Tools enabled. Use \"${prefix}\" in chat. Ensure MessageContent intent is enabled!`);\n }\n\n public async enableHMR(): Promise<void> {\n try {\n const chokidar = await import('chokidar');\n console.log(`[djs-next] 🔄 HMR Enabled. Watching for file changes...`);\n\n const watcher = chokidar.watch([\n this._commandsDir, \n this._eventsDir, \n this._componentsDir, \n this._localesDir\n ].filter(Boolean) as string[], { ignoreInitial: true });\n\n watcher.on('change', async (filePath) => {\n console.log(`[djs-next] ♻️ File changed: ${filePath}. Reloading...`);\n // We will just naively re-run the loaders. \n // For events, we need to remove all listeners first to avoid memory leaks.\n this.removeAllListeners();\n this.commands.clear();\n this.components.clear();\n \n // Re-attach core listener\n this.attachCoreListeners();\n\n // Reload\n if (this._eventsDir) await loadEvents(this, this._eventsDir);\n if (this._componentsDir) this.components = await loadComponents(this._componentsDir);\n if (this._commandsDir && this._clientId) {\n this.commands = await loadAndDeployCommands(this._commandsDir, this.token!, this._clientId, this._guildId);\n }\n if (this._localesDir) loadLocales(this._localesDir, this.config.defaultLocale);\n \n console.log(`[djs-next] ✅ Hot Reload complete.`);\n });\n } catch (e) {\n console.warn(`[djs-next] chokidar not installed. HMR is disabled. Please run \"npm install chokidar\" to use this feature.`);\n }\n }\n\n private async handleCommandError(error: any, commandKey: string, context: Interaction | Message) {\n console.error(`[djs-next] Error executing command/component: \"${commandKey}\"`, error);\n const djs = require('discord.js');\n if (this.config.responses?.errorBoundary === null) {\n // Developer explicitly opted out of error boundary user messages\n } else {\n try {\n const errorContent = this.config.responses?.errorBoundary || `### ⚠️ Execution Error\\n> The framework encountered a fatal error while executing \\`${commandKey}\\`.`;\n const codeBlock = `\\`\\`\\`js\\n${String(error.stack || error.message).substring(0, 1500)}\\n\\`\\`\\``;\n\n if ('commandName' in context || 'customId' in context) {\n const container = new djs.ContainerBuilder()\n .setAccentColor(0xED4245)\n .addTextDisplayComponents(new djs.TextDisplayBuilder().setContent(errorContent))\n .addSeparatorComponents(new djs.SeparatorBuilder())\n .addTextDisplayComponents(new djs.TextDisplayBuilder().setContent(codeBlock));\n \n const payload = { components: [container], flags: 32768, ephemeral: true };\n const i = context as Interaction;\n if (i.isRepliable()) {\n if (i.replied || i.deferred) await i.followUp(payload);\n else await i.reply(payload);\n }\n } else {\n const embed = new djs.EmbedBuilder()\n .setColor(0xED4245)\n .setDescription(`${errorContent}\\n\\n${codeBlock}`);\n \n const m = context as Message;\n await m.reply({ embeds: [embed] });\n }\n } catch (e) {\n // Fallback ignore if channel is dead\n }\n }\n\n if (this.config.errorLogChannelId) {\n try {\n const channel = await this.channels.fetch(this.config.errorLogChannelId);\n if (channel && channel.isTextBased()) {\n const userId = 'user' in context ? context.user.id : context.author.id;\n await (channel as any).send(`🚨 **Global Error Boundary Caught Exception**\\n**Context:** \\`${commandKey}\\`\\n**User:** <@${userId}>\\n\\`\\`\\`js\\n${String(error.stack || error.message).substring(0, 1900)}\\n\\`\\`\\``);\n }\n } catch (e) {\n console.error(`[djs-next] Failed to send error to log channel:`, e);\n }\n }\n }\n\n private async handlePreconditions(command: FileCommand | FileComponent, context: Interaction | Message, commandKey: string): Promise<boolean> {\n const userId = 'user' in context ? context.user.id : context.author.id;\n const isGuild = 'guild' in context && context.guild !== null;\n const member = context.member as any;\n\n const sendErr = async (msg: string | null) => {\n if (msg === null) return;\n if ('reply' in context && typeof context.reply === 'function') {\n try {\n if ('replied' in context && (context as any).isRepliable() && ((context as any).replied || (context as any).deferred)) {\n await (context as any).followUp({ content: msg, ephemeral: true });\n } else {\n await (context as any).reply({ content: msg, ephemeral: true, allowedMentions: { repliedUser: false } });\n }\n } catch(e) {}\n }\n };\n\n if ('developerOnly' in command && command.developerOnly && !this._developers.includes(userId)) {\n await sendErr(this.config.responses?.developerOnly !== undefined ? this.config.responses.developerOnly : 'Only developers can use this command.');\n return false;\n }\n if ('guildOnly' in command && command.guildOnly && !isGuild) {\n await sendErr(this.config.responses?.guildOnly !== undefined ? this.config.responses.guildOnly : 'This command can only be used in a server.');\n return false;\n }\n if ('userPermissions' in command && command.userPermissions && member?.permissions) {\n const missing = member.permissions.missing(command.userPermissions);\n if (missing.length > 0) {\n await sendErr(this.config.responses?.missingPerms !== undefined ? (this.config.responses.missingPerms === null ? null : this.config.responses.missingPerms.replace('{perms}', missing.join(', '))) : `You are missing permissions: \\`${missing.join(', ')}\\``);\n return false;\n }\n }\n if ('botPermissions' in command && command.botPermissions && context.guild?.members.me?.permissions) {\n const missing = context.guild.members.me.permissions.missing(command.botPermissions);\n if (missing.length > 0) {\n await sendErr(this.config.responses?.missingPerms !== undefined ? (this.config.responses.missingPerms === null ? null : this.config.responses.missingPerms.replace('{perms}', missing.join(', '))) : `I am missing permissions to run this: \\`${missing.join(', ')}\\``);\n return false;\n }\n }\n\n let totalCooldown = 'cooldown' in command && command.cooldown ? command.cooldown * 1000 : 0;\n\n if (command.preconditions) {\n for (const pre of command.preconditions) {\n const parts = pre.split(':');\n const type = parts[0].toLowerCase();\n const val = parts.slice(1).join(':');\n\n if (type === 'owneronly' || type === 'developeronly') {\n if (!this._developers.includes(userId)) {\n await sendErr(this.config.responses?.developerOnly !== undefined ? this.config.responses.developerOnly : 'Only developers can use this command.');\n return false;\n }\n } else if (type === 'guildonly') {\n if (!isGuild) {\n await sendErr(this.config.responses?.guildOnly !== undefined ? this.config.responses.guildOnly : 'This command can only be used in a server.');\n return false;\n }\n } else if (type === 'requireperms') {\n const perms = val.split(',').map(p => p.trim());\n if (member?.permissions) {\n const missing = member.permissions.missing(perms);\n if (missing.length > 0) {\n await sendErr(this.config.responses?.missingPerms !== undefined ? (this.config.responses.missingPerms === null ? null : this.config.responses.missingPerms.replace('{perms}', missing.join(', '))) : `You are missing permissions: \\`${missing.join(', ')}\\``);\n return false;\n }\n }\n } else if (type === 'cooldown') {\n const match = val.match(/(\\d+)(s|m|h)/);\n if (match) {\n let amount = parseInt(match[1]) * 1000;\n if (match[2] === 'm') amount *= 60;\n if (match[2] === 'h') amount *= 3600;\n totalCooldown = Math.max(totalCooldown, amount);\n }\n }\n }\n }\n\n if (totalCooldown > 0) {\n const now = Date.now();\n \n if (this.config.cooldownAdapter) {\n const lastUsed = await this.config.cooldownAdapter.get(commandKey, userId);\n if (lastUsed) {\n const expirationTime = lastUsed + totalCooldown;\n if (now < expirationTime) {\n const timeStr = `<t:${Math.round(expirationTime / 1000)}:R>`;\n await sendErr(this.config.responses?.cooldown !== undefined ? (this.config.responses.cooldown === null ? null : this.config.responses.cooldown.replace('{time}', timeStr)) : `Please wait, you are on a cooldown. You can use it again ${timeStr}.`);\n return false;\n }\n }\n await this.config.cooldownAdapter.set(commandKey, userId, now);\n } else {\n if (!this.cooldowns.has(commandKey)) this.cooldowns.set(commandKey, new Collection());\n const timestamps = this.cooldowns.get(commandKey)!;\n\n if (timestamps.has(userId)) {\n const expirationTime = timestamps.get(userId)! + totalCooldown;\n if (now < expirationTime) {\n const timeStr = `<t:${Math.round(expirationTime / 1000)}:R>`;\n await sendErr(this.config.responses?.cooldown !== undefined ? (this.config.responses.cooldown === null ? null : this.config.responses.cooldown.replace('{time}', timeStr)) : `Please wait, you are on a cooldown. You can use it again ${timeStr}.`);\n return false;\n }\n }\n timestamps.set(userId, now);\n setTimeout(() => timestamps.delete(userId), totalCooldown);\n }\n }\n\n return true;\n }\n}\n","import { Collection, REST, Routes } from 'discord.js';\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport { FileCommand } from '../types.js';\nimport { getAllFiles } from './utils.js';\n\ninterface CommandNode {\n name: string;\n description: string;\n options: any[];\n execute?: Function;\n children: Map<string, CommandNode>;\n}\n\nexport async function loadAndDeployCommands(\n commandsDir: string, \n token: string, \n clientId: string,\n guildId?: string\n): Promise<Collection<string, FileCommand>> {\n const flatCommands = new Collection<string, FileCommand>();\n \n if (!fs.existsSync(commandsDir)) {\n console.warn(`[djs-next] Commands directory \"${commandsDir}\" does not exist.`);\n return flatCommands;\n }\n\n const commandFiles = getAllFiles(commandsDir);\n const rootNodes = new Map<string, CommandNode>();\n\n function getOrCreateNode(pathParts: string[]): CommandNode {\n let currentMap = rootNodes;\n let currentNode: CommandNode | undefined;\n\n for (const part of pathParts) {\n if (!currentMap.has(part)) {\n currentMap.set(part, {\n name: part,\n description: `${part} command`, // Fallback description\n options: [],\n children: new Map()\n });\n }\n currentNode = currentMap.get(part)!;\n currentMap = currentNode.children;\n }\n return currentNode!;\n }\n\n for (const file of commandFiles) {\n const relativePath = path.relative(commandsDir, file);\n const parsed = path.parse(relativePath);\n \n // Normalize path separators\n const dirParts = parsed.dir ? parsed.dir.split(path.sep) : [];\n const name = parsed.name;\n \n const pathParts = [...dirParts];\n if (name !== 'index') {\n pathParts.push(name);\n }\n\n if (pathParts.length === 0) continue;\n if (pathParts.length > 3) {\n console.warn(`[djs-next] Command path too deep (Discord allows max 3 levels): ${relativePath}`);\n continue;\n }\n\n const module = await import(pathToFileURL(file).href);\n const commandData: FileCommand = module.default || module.command || module;\n if (commandData) commandData.filepath = file;\n\n const node = getOrCreateNode(pathParts);\n if (commandData.description) node.description = commandData.description;\n if (commandData.options) node.options = commandData.options;\n if (commandData.execute) {\n node.execute = commandData.execute;\n // Map entire FileCommand object to a space-separated string (e.g. \"economy balance\")\n flatCommands.set(pathParts.join(' '), commandData);\n }\n }\n\n // Build JSON payloads for Discord\n function buildCommandJSON(node: CommandNode, depth: number): any {\n const json: any = {\n name: node.name,\n description: node.description,\n };\n\n if (node.children.size > 0) {\n json.options = [];\n for (const [_, childNode] of node.children) {\n const childJson = buildCommandJSON(childNode, depth + 1);\n \n // 1 = SUB_COMMAND, 2 = SUB_COMMAND_GROUP\n if (depth === 0) {\n childJson.type = childNode.children.size > 0 ? 2 : 1;\n } else if (depth === 1) {\n childJson.type = 1;\n }\n \n json.options.push(childJson);\n }\n } else if (node.options && node.options.length > 0) {\n json.options = node.options;\n }\n \n return json;\n }\n\n const commandsData = Array.from(rootNodes.values()).map(node => buildCommandJSON(node, 0));\n\n // Deploy commands\n const rest = new REST({ version: '10' }).setToken(token);\n\n try {\n console.log(`[djs-next] Started refreshing ${commandsData.length} File-System application (/) commands.`);\n\n let data: any;\n if (guildId) {\n data = await rest.put(\n Routes.applicationGuildCommands(clientId, guildId),\n { body: commandsData },\n );\n } else {\n data = await rest.put(\n Routes.applicationCommands(clientId),\n { body: commandsData },\n );\n }\n\n console.log(`[djs-next] Successfully reloaded ${data.length} File-System application (/) commands.`);\n } catch (error) {\n console.error(`[djs-next] Failed to deploy commands:`, error);\n }\n\n return flatCommands;\n}\n","import fs from 'fs';\nimport path from 'path';\n\n/**\n * Recursively gets all files in a directory\n */\nexport function getAllFiles(dirPath: string, arrayOfFiles: string[] = []): string[] {\n const files = fs.readdirSync(dirPath);\n\n files.forEach(file => {\n const fullPath = path.join(dirPath, file);\n if (fs.statSync(fullPath).isDirectory()) {\n arrayOfFiles = getAllFiles(fullPath, arrayOfFiles);\n } else {\n if (file.endsWith('.js') || file.endsWith('.ts') || file.endsWith('.mjs') || file.endsWith('.cjs')) {\n // Skip TypeScript declaration files\n if (!file.endsWith('.d.ts')) {\n arrayOfFiles.push(fullPath);\n }\n }\n }\n });\n\n return arrayOfFiles;\n}\n","import { Client } from 'discord.js';\nimport fs from 'fs';\nimport { pathToFileURL } from 'url';\nimport { Event } from '../types.js';\nimport { getAllFiles } from './utils.js';\n\nexport async function loadEvents(client: Client, eventsDir: string) {\n if (!fs.existsSync(eventsDir)) {\n console.warn(`[djs-next] Events directory \"${eventsDir}\" does not exist.`);\n return;\n }\n\n const eventFiles = getAllFiles(eventsDir);\n let loadedEvents = 0;\n\n for (const file of eventFiles) {\n const eventModule = await import(pathToFileURL(file).href);\n const eventData: Event<any> = eventModule.default?.event || eventModule.event || eventModule.default || eventModule;\n if (eventData) eventData.filepath = file;\n\n if (!eventData || !eventData.name || !eventData.execute) {\n console.warn(`[djs-next] The event at ${file} is missing a required \"name\" or \"execute\" property.`);\n continue;\n }\n\n if (eventData.once) {\n client.once(eventData.name, (...args) => eventData.execute(client, ...args));\n } else {\n client.on(eventData.name, (...args) => eventData.execute(client, ...args));\n }\n loadedEvents++;\n }\n\n if (loadedEvents > 0) {\n console.log(`[djs-next] Successfully loaded ${loadedEvents} events.`);\n }\n}\n","import { Collection } from 'discord.js';\nimport fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport { FileComponent } from '../types.js';\nimport { getAllFiles } from './utils.js';\n\nexport async function loadComponents(componentsDir: string): Promise<Collection<string, FileComponent>> {\n const components = new Collection<string, FileComponent>();\n \n if (!fs.existsSync(componentsDir)) return components;\n\n const files = getAllFiles(componentsDir);\n\n for (const file of files) {\n const module = await import(pathToFileURL(file).href);\n const componentData: FileComponent = module.default || module.component || module;\n if (componentData) componentData.filepath = file;\n\n if (!componentData || !componentData.execute) continue;\n\n // Infer customId from filename if not explicitly provided\n const parsed = path.parse(file);\n const customId = componentData.customId || parsed.name;\n\n components.set(customId, componentData);\n }\n\n console.log(`[djs-next] Successfully loaded ${components.size} components.`);\n return components;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { pathToFileURL } from 'url';\nimport { Client } from 'discord.js';\nimport { FileTask } from '../types.js';\nimport { getAllFiles } from './utils.js';\n\nexport async function loadTasks(client: Client, tasksDir: string) {\n if (!fs.existsSync(tasksDir)) return;\n\n const files = getAllFiles(tasksDir);\n let loaded = 0;\n\n for (const file of files) {\n const module = await import(pathToFileURL(file).href);\n const taskData: FileTask = module.default || module.task || module;\n if (taskData) taskData.filepath = file;\n\n if (!taskData || !taskData.interval || !taskData.execute) continue;\n\n const intervalId = setInterval(async () => {\n try {\n await taskData.execute(client);\n } catch (error) {\n console.error(`[djs-next] Background Task error at ${file}:`, error);\n }\n }, taskData.interval);\n\n if (!(client as any)._activeTasks) (client as any)._activeTasks = new Map();\n (client as any)._activeTasks.set(file, intervalId);\n\n loaded++;\n }\n\n if (loaded > 0) {\n console.log(`[djs-next] Successfully scheduled ${loaded} background tasks.`);\n }\n}\n","import path from 'path';\nimport fs from 'fs';\nimport { pathToFileURL } from 'url';\nimport { DJSNextConfig } from '../types.js';\n\nexport async function loadConfig(): Promise<DJSNextConfig> {\n const exts = ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'];\n const cwd = process.cwd();\n \n for (const ext of exts) {\n const configPath = path.join(cwd, `djs-next.config${ext}`);\n if (fs.existsSync(configPath)) {\n try {\n const configModule = await import(pathToFileURL(configPath).href);\n return configModule.default || configModule;\n } catch (err) {\n console.error(`[djs-next] Error loading config file ${configPath}:`, err);\n return {};\n }\n }\n }\n return {};\n}\n\nexport function defineConfig(config: DJSNextConfig): DJSNextConfig {\n return config;\n}\n","import fs from 'fs';\nimport path from 'path';\n\nlet localesCache: Record<string, Record<string, any>> = {};\nlet defaultLoc = 'en';\n\nexport function loadLocales(localesDir: string, defaultLocale?: string) {\n if (defaultLocale) defaultLoc = defaultLocale;\n \n if (!fs.existsSync(localesDir)) return;\n\n const files = fs.readdirSync(localesDir);\n for (const file of files) {\n if (file.endsWith('.json')) {\n const lang = file.replace('.json', '');\n const content = fs.readFileSync(path.join(localesDir, file), 'utf8');\n try {\n localesCache[lang] = JSON.parse(content);\n } catch (e) {\n console.error(`[djs-next] Failed to parse locale file: ${file}`, e);\n }\n }\n }\n}\n\nexport function translate(key: string, locale: string = defaultLoc, variables?: Record<string, string | number>): string {\n // Fallback to default locale if the requested one is not found\n const dict = localesCache[locale] || localesCache[defaultLoc] || {};\n \n const keys = key.split('.');\n let value: any = dict;\n\n for (const k of keys) {\n if (value && typeof value === 'object') {\n value = value[k];\n } else {\n value = undefined;\n break;\n }\n }\n\n if (typeof value !== 'string') {\n return key; // return the key itself if string not found\n }\n\n if (variables) {\n for (const [varKey, varValue] of Object.entries(variables)) {\n value = value.replace(new RegExp(`{{s*${varKey}s*}}`, 'g'), String(varValue));\n }\n }\n\n return value;\n}\n\nexport function getLocalesCache() {\n return localesCache;\n}\n","import { Message, EmbedBuilder, version as djsVersion } from 'discord.js';\nimport { exec } from 'child_process';\nimport util from 'util';\nimport os from 'os';\nimport { DJSNextClient } from '../client.js';\nimport { loadEvents } from '../handlers/eventHandler.js';\nimport { loadComponents } from '../handlers/componentHandler.js';\nimport { loadAndDeployCommands } from '../handlers/commandHandler.js';\nimport { loadTasks } from '../handlers/taskHandler.js';\nimport { loadLocales } from '../utils/i18n.js';\n\nconst execAsync = util.promisify(exec);\n\nexport function buildDisplayMessage(content: string, color = 0x525AF1) {\n const djs = require('discord.js');\n const container = new djs.ContainerBuilder()\n .setAccentColor(color)\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(content)\n );\n return { components: [container], flags: 32768 };\n}\n\nexport async function handleDNXT(message: Message, client: Client, devPrefix: 'dnxt' | 'nxt'): Promise<void> {\n if (message.author.bot) return;\n if (!(client as any)._developers.includes(message.author.id)) return;\n if ((client as any).config?.devGuildId && message.guildId !== (client as any).config.devGuildId) return;\n\n const originalReply = message.reply.bind(message);\n message.reply = (async (content: any) => {\n if (typeof content === 'string') {\n return await originalReply({ ...buildDisplayMessage(content), allowedMentions: { repliedUser: false } });\n }\n if (!content.allowedMentions) content.allowedMentions = { repliedUser: false };\n return await originalReply(content);\n }) as any;\n\n const content = message.content.trim();\n \n // Build a list of valid dev command triggers: e.g. \"dnxt\", \"!dnxt\", \"?dnxt\", \"nxt\", \"!nxt\", etc.\n const validTriggers = [devPrefix];\n const clientPrefixes = (client as any)._prefixes || [];\n for (const p of clientPrefixes) {\n if (p !== '') validTriggers.push(`${p}${devPrefix}`);\n }\n\n let matchedTrigger = validTriggers.find(t => content === t || content.startsWith(`${t} `));\n if (!matchedTrigger) return;\n\n const args = content.slice(matchedTrigger.length).trim().split(/ +/g);\n const command = args.shift()?.toLowerCase();\n\n if (command === 'help') {\n const djs = require('discord.js');\n \n const container = new djs.ContainerBuilder()\n .setAccentColor(0x525AF1)\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(`# 📖 DNXT Toolkit Reference\\n> Current prefix trigger: \\`${matchedTrigger}\\``)\n )\n .addSeparatorComponents(new djs.SeparatorBuilder())\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(`### 📊 Core Framework\\n- \\`${matchedTrigger}\\` — Developer system dashboard\\n- \\`${matchedTrigger} help\\` — Shows this reference menu`),\n new djs.TextDisplayBuilder().setContent(`### 💻 Execution & Diagnostics\\n- \\`${matchedTrigger} js <code>\\` — Evaluates raw JS code\\n- \\`${matchedTrigger} sh <cmd>\\` — Runs terminal shell script\\n- \\`${matchedTrigger} debug <code>\\` — Evaluates JS with precise memory deltas`),\n new djs.TextDisplayBuilder().setContent(`### 📂 File System & Network\\n- \\`${matchedTrigger} cat <file>\\` — Reads file contents\\n- \\`${matchedTrigger} curl <url>\\` — Fetches remote URL data\\n- \\`${matchedTrigger} git <cmd>\\` — Executes git repository commands`),\n new djs.TextDisplayBuilder().setContent(`### 🧰 Utilities\\n- \\`${matchedTrigger} <load|unload|reload> <target>\\` — Manages system modules\\n- \\`${matchedTrigger} sync\\` — Forces global slash command sync\\n- \\`${matchedTrigger} in <channel> <cmd>\\` — Executes command in target channel\\n- \\`${matchedTrigger} restart\\` — Restarts the bot completely\\n- \\`${matchedTrigger} shutdown\\` — Stops the bot completely`)\n );\n\n await message.reply({ components: [container], flags: 32768, allowedMentions: { repliedUser: false } });\n return;\n }\n\n // Root dnxt command (Stats)\n if (!command) {\n const mem = process.memoryUsage();\n const botPing = client.ws.ping;\n const djs = require('discord.js');\n \n const container = new djs.ContainerBuilder()\n .setAccentColor(0x525AF1)\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(`# 🛠️ Developer System Dashboard\\n> **DNXT Framework Engine**`)\n )\n .addSeparatorComponents(new djs.SeparatorBuilder())\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(`### 📡 Network Status\\n- **System Uptime:** <t:${Math.floor((Date.now() - client.uptime!) / 1000)}:R>\\n- **WebSocket Latency:** \\`${botPing}ms\\``),\n new djs.TextDisplayBuilder().setContent(`### 📦 Host Environment\\n- **Discord.js Library:** \\`v${djsVersion}\\`\\n- **Node.js Runtime:** \\`${process.version}\\`\\n- **Operating System:** \\`${os.type()}\\` (\\`${os.cpus().length}\\` thread cores, \\`${(os.uptime() / 60 / 60).toFixed(2)}\\` hrs uptime)`),\n new djs.TextDisplayBuilder().setContent(`### 🧠 Resource Utilization\\n- **Physical Memory:** \\`${(mem.rss / 1024 / 1024).toFixed(2)} MB\\`\\n- **Heap Allocated:** \\`${(mem.heapUsed / 1024 / 1024).toFixed(2)} MB\\``)\n );\n\n await message.reply({\n components: [container],\n flags: 32768, // MessageFlags.IsComponentsV2\n allowedMentions: { repliedUser: false }\n });\n return;\n }\n\n // Evaluation (js, eval, py)\n if (command === 'js' || command === 'eval' || command === 'py') {\n let code = args.join(' ');\n if (code.startsWith('```js') || code.startsWith('```py')) code = code.replace(/^```[a-z]*|```$/g, '');\n else if (code.startsWith('```')) code = code.replace(/^```|```$/g, '');\n\n if (!code) return void await message.reply('❌ Please provide code to evaluate.');\n\n try {\n const start = process.hrtime.bigint();\n const { commands, components, config } = client;\n \n // eslint-disable-next-line no-eval\n let evaled = await eval(`(async () => { ${code} })()`);\n const end = process.hrtime.bigint();\n const timeMs = Number(end - start) / 1e6;\n\n if (typeof evaled !== 'string') evaled = util.inspect(evaled, { depth: 1, colors: true });\n\n await sendPaginatedText(message, `✅ **Evaluated in ${timeMs.toFixed(3)}ms**\\n`, evaled, 'ansi');\n } catch (err: any) {\n await sendPaginatedText(message, `❌ **Evaluation Error**\\n`, err.message, 'ansi');\n }\n return;\n }\n\n // Execute Shell (sh, shell, git)\n if (command === 'sh' || command === 'shell' || command === 'git') {\n const cmd = command === 'git' ? 'git ' + args.join(' ') : args.join(' ');\n if (!cmd) return void await message.reply('❌ Please provide a command to execute.');\n\n try {\n const start = process.hrtime.bigint();\n let stdout = '', stderr = '', code = 0;\n try {\n const result = await execAsync(cmd);\n stdout = result.stdout;\n stderr = result.stderr;\n } catch (err: any) {\n stdout = err.stdout || '';\n stderr = err.stderr || err.message || '';\n code = err.code || 1;\n }\n const end = process.hrtime.bigint();\n const timeMs = Number(end - start) / 1e6;\n\n let resultText = `$ ${cmd}\\n`;\n if (stdout) resultText += `${stdout}\\n`;\n if (stderr) resultText += `${stderr}\\n`;\n resultText += `\\n[status] Return code ${code}`;\n\n await sendPaginatedText(message, `✅ **Executed in ${timeMs.toFixed(3)}ms**\\n`, resultText, 'ansi');\n } catch (err: any) {\n await sendPaginatedText(message, `❌ **Shell Error**\\n`, err.message, 'ansi');\n }\n return;\n }\n\n // Load / Unload / Reload\n if (command === 'load' || command === 'unload' || command === 'reload') {\n const target = args[0]?.toLowerCase();\n try {\n if (target === 'commands' && client['_commandsDir']) {\n if (command === 'unload' || command === 'reload') client.commands.clear();\n if (command === 'load' || command === 'reload') client.commands = await loadAndDeployCommands(client['_commandsDir'], client.token!, client['_clientId']!, client['_guildId']);\n await message.reply(`✅ Successfully ${command}ed commands.`);\n } else if (target === 'events' && client['_eventsDir']) {\n if (command === 'unload' || command === 'reload') {\n client.removeAllListeners();\n client['attachCoreListeners']();\n }\n if (command === 'load' || command === 'reload') await loadEvents(client, client['_eventsDir']);\n await message.reply(`✅ Successfully ${command}ed events.`);\n } else if (target === 'components' && client['_componentsDir']) {\n if (command === 'unload' || command === 'reload') client.components.clear();\n if (command === 'load' || command === 'reload') client.components = await loadComponents(client['_componentsDir']);\n await message.reply(`✅ Successfully ${command}ed components.`);\n } else if (target === 'locales' && client['_localesDir']) {\n if (command === 'load' || command === 'reload') loadLocales(client['_localesDir'], client.config.defaultLocale);\n await message.reply(`✅ Successfully ${command}ed locales.`);\n } else if (target === 'all' || !target) {\n if (command === 'unload' || command === 'reload') {\n client.removeAllListeners();\n client['attachCoreListeners']();\n client.commands.clear();\n client.components.clear();\n }\n if (command === 'load' || command === 'reload') {\n if (client['_eventsDir']) await loadEvents(client, client['_eventsDir']);\n if (client['_componentsDir']) client.components = await loadComponents(client['_componentsDir']);\n if (client['_localesDir']) loadLocales(client['_localesDir'], client.config.defaultLocale);\n if (client['_commandsDir']) client.commands = await loadAndDeployCommands(client['_commandsDir'], client.token!, client['_clientId']!, client['_guildId']);\n }\n await message.reply(`✅ Successfully ${command}ed all framework modules.`);\n } else {\n await message.reply('❌ Unknown target. Valid targets: `commands, events, components, locales, all`');\n }\n } catch (err: any) {\n await message.reply(`❌ **${command.toUpperCase()} Error:** ${err.message}`);\n }\n return;\n }\n\n // Cat (Read File)\n if (command === 'cat') {\n const fs = await import('fs');\n const path = await import('path');\n const file = args.join(' ');\n if (!file) return void await message.reply('❌ Please provide a file to read.');\n \n try {\n const content = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n await sendPaginatedText(message, `📄 **${file}**\\n`, content, file.split('.').pop() || '');\n } catch (e: any) {\n await message.reply(`❌ **Error reading file:** ${e.message}`);\n }\n return;\n }\n\n\n\n\n\n // Curl (dnxt curl <url>)\n if (command === 'curl') {\n const url = args[0];\n if (!url) return void await message.reply('❌ Please provide a URL.');\n try {\n const res = await fetch(url);\n const text = await res.text();\n await sendPaginatedText(message, `🌐 **Fetched from \\`${url}\\`**\\n`, text, 'html');\n } catch (e: any) {\n await message.reply(`❌ **Curl Error:** ${e.message}`);\n }\n return;\n }\n\n // Debug Command (dnxt debug <command>)\n // In discord.py DNXT debug measures execution of a command.\n // In our case we will run a js eval and time it explicitly with heap usage.\n if (command === 'debug') {\n let code = args.join(' ');\n if (code.startsWith('```js') || code.startsWith('```py')) code = code.replace(/^```[a-z]*|```$/g, '');\n else if (code.startsWith('```')) code = code.replace(/^```|```$/g, '');\n if (!code) return void await message.reply('❌ Please provide code to debug.');\n \n try {\n const startMem = process.memoryUsage().heapUsed;\n const start = process.hrtime.bigint();\n const { commands, components, config } = client;\n \n // eslint-disable-next-line no-eval\n let evaled = await eval(`(async () => { ${code} })()`);\n \n const end = process.hrtime.bigint();\n const endMem = process.memoryUsage().heapUsed;\n const timeMs = Number(end - start) / 1e6;\n const memDiff = (endMem - startMem) / 1024 / 1024;\n \n if (typeof evaled !== 'string') evaled = util.inspect(evaled, { depth: 1, colors: true });\n \n await sendPaginatedText(message, `⏱️ **Debug Execution**\\nTime: \\`${timeMs.toFixed(3)}ms\\` | Heap Delta: \\`${memDiff.toFixed(3)}MB\\`\\n`, evaled, 'ansi');\n } catch (err: any) {\n await sendPaginatedText(message, `❌ **Debug Error**\\n`, err.message, 'ansi');\n }\n return;\n }\n\n // In Command (dnxt in <channel_id> <command>)\n if (command === 'in') {\n const channelId = args.shift()?.replace(/<#|>/g, '');\n const cmd = args.join(' ');\n if (!channelId || !cmd) return void await message.reply(`❌ Usage: ${matchedTrigger} in <#channel|id> <command>`);\n try {\n const targetChannel = await client.channels.fetch(channelId);\n if (!targetChannel || !targetChannel.isTextBased()) throw new Error('Invalid Text Channel.');\n \n const mockMessage = Object.assign(Object.create(Object.getPrototypeOf(message)), message);\n Object.defineProperty(mockMessage, 'client', { value: client, configurable: true });\n if (message.guild) {\n Object.defineProperty(mockMessage, 'guild', { value: message.guild, configurable: true });\n Object.defineProperty(mockMessage, 'guildId', { value: message.guildId, configurable: true });\n }\n Object.defineProperty(mockMessage, 'channel', { value: targetChannel, configurable: true });\n Object.defineProperty(mockMessage, 'channelId', { value: targetChannel.id, configurable: true });\n Object.defineProperty(mockMessage, 'content', { value: cmd, configurable: true });\n client.emit('messageCreate', mockMessage as Message);\n } catch (e: any) {\n await message.reply(`❌ **In Error:** ${e.message}`);\n }\n return;\n }\n\n // Sync Command (dnxt sync)\n if (command === 'sync') {\n try {\n await message.reply('🔄 Force syncing slash commands...');\n await loadAndDeployCommands((client as any)._commandsDir, client.token!, (client as any)._clientId, (client as any)._guildId);\n await message.reply('✅ Slash commands synchronized globally/locally.');\n } catch (e: any) {\n await message.reply(`❌ **Sync Error:** ${e.message}`);\n }\n return;\n }\n\n // Restart Command (dnxt restart)\n if (command === 'restart') {\n await message.reply('🔄 Restarting framework...');\n client.destroy();\n \n const { spawn } = require('child_process');\n const child = spawn(process.argv[0], process.argv.slice(1), {\n detached: true,\n stdio: 'ignore',\n cwd: process.cwd()\n });\n child.unref();\n process.exit(0);\n return;\n }\n\n // Shutdown Command (dnxt shutdown | stop)\n if (command === 'shutdown' || command === 'stop') {\n await message.reply('🛑 Shutting down framework...');\n client.destroy();\n process.exit(0);\n return;\n }\n\n await message.reply(`❓ Unknown ${matchedTrigger} command. Available: \\`js, sh, git, cat, curl, in, debug, reload, sync, restart, shutdown\\``);\n}\n\nasync function sendPaginatedText(message: Message, header: string, content: string, language: string = '') {\n const maxLength = 800;\n if (content.length <= maxLength) {\n await message.reply(buildDisplayMessage(`### ${header.replace(/\\\\*\\\\*/g, '')}\\n\\`\\`\\`${language}\\n${content}\\n\\`\\`\\``));\n return;\n }\n\n const chunks: string[] = [];\n for (let i = 0; i < content.length; i += maxLength) {\n chunks.push(content.substring(i, i + maxLength));\n }\n\n let index = 0;\n const djs = require('discord.js');\n \n function buildPage(idx: number) {\n const text = `### ${header.replace(/\\\\*\\\\*/g, '')}\\n\\`\\`\\`${language}\\n${chunks[idx]}\\n\\`\\`\\`\\n> *Page ${idx + 1} of ${chunks.length}*`;\n const container = new djs.ContainerBuilder()\n .setAccentColor(0x525AF1)\n .addTextDisplayComponents(\n new djs.TextDisplayBuilder().setContent(text)\n );\n \n const row1 = new djs.ActionRowBuilder().addComponents(\n new djs.ButtonBuilder().setCustomId('first').setLabel('≪').setStyle(2),\n new djs.ButtonBuilder().setCustomId('prev').setLabel('<').setStyle(2),\n new djs.ButtonBuilder().setCustomId('goto').setLabel('⎘').setStyle(1),\n new djs.ButtonBuilder().setCustomId('next').setLabel('>').setStyle(2),\n new djs.ButtonBuilder().setCustomId('last').setLabel('≫').setStyle(2)\n );\n\n const row2 = new djs.ActionRowBuilder().addComponents(\n new djs.ButtonBuilder().setCustomId('stop').setLabel('✖ Close').setStyle(4)\n );\n \n container.addActionRowComponents(row1, row2);\n return { components: [container], flags: 32768 };\n }\n\n const reply = await message.reply(buildPage(index));\n\n const collector = reply.createMessageComponentCollector({\n filter: (i) => ['first', 'prev', 'goto', 'stop', 'next', 'last'].includes(i.customId) && i.user.id === message.author.id,\n time: 120000\n });\n\n collector.on('collect', async (i) => {\n if (i.customId === 'first') {\n index = 0;\n } else if (i.customId === 'prev') {\n index = index > 0 ? index - 1 : index;\n } else if (i.customId === 'next') {\n index = index < chunks.length - 1 ? index + 1 : index;\n } else if (i.customId === 'last') {\n index = chunks.length - 1;\n } else if (i.customId === 'goto') {\n const modal = new djs.ModalBuilder()\n .setCustomId('goto_modal')\n .setTitle('Go to Page');\n const input = new djs.TextInputBuilder()\n .setCustomId('page_num')\n .setLabel(`Page Number (1-${chunks.length})`)\n .setStyle(1)\n .setRequired(true);\n modal.addComponents(new djs.ActionRowBuilder().addComponents(input));\n await i.showModal(modal);\n try {\n const modalSubmit = await i.awaitModalSubmit({ filter: (mi) => mi.user.id === message.author.id && mi.customId === 'goto_modal', time: 60000 });\n const targetPage = parseInt(modalSubmit.fields.getTextInputValue('page_num'), 10);\n if (!isNaN(targetPage) && targetPage >= 1 && targetPage <= chunks.length) {\n index = targetPage - 1;\n }\n await modalSubmit.update(buildPage(index));\n } catch {}\n return;\n } else if (i.customId === 'stop') {\n await reply.delete().catch(() => null);\n collector.stop();\n return;\n }\n\n await i.update(buildPage(index));\n });\n\n collector.on('end', () => {\n reply.edit({ components: [] }).catch(() => null);\n });\n}\n","import {\n ActionRowBuilder,\n ButtonBuilder,\n ButtonStyle,\n CommandInteraction,\n EmbedBuilder,\n Message,\n MessageComponentInteraction\n} from 'discord.js';\n\nexport async function paginate(\n context: Message | CommandInteraction | MessageComponentInteraction,\n pages: EmbedBuilder[],\n time: number = 60000\n) {\n const isMessage = 'author' in context;\n\n if (!isMessage) {\n if (!context.deferred && !context.replied) {\n await context.deferReply();\n }\n }\n\n if (pages.length === 1) {\n if (isMessage) {\n return context.reply({ embeds: [pages[0]], components: [] });\n } else {\n return context.editReply({ embeds: [pages[0]], components: [] });\n }\n }\n\n let index = 0;\n\n const prevButton = new ButtonBuilder()\n .setCustomId('djs_prev')\n .setLabel('Previous')\n .setStyle(ButtonStyle.Primary)\n .setDisabled(true);\n\n const nextButton = new ButtonBuilder()\n .setCustomId('djs_next')\n .setLabel('Next')\n .setStyle(ButtonStyle.Primary);\n\n const row = new ActionRowBuilder<ButtonBuilder>().addComponents(prevButton, nextButton);\n\n let message: Message;\n if (isMessage) {\n message = await context.reply({\n embeds: [pages[index]],\n components: [row],\n });\n } else {\n message = await context.editReply({\n embeds: [pages[index]],\n components: [row],\n });\n }\n\n const collector = message.createMessageComponentCollector({\n filter: (i) => i.user.id === (isMessage ? context.author.id : context.user.id),\n time\n });\n\n collector.on('collect', async (i: MessageComponentInteraction) => {\n if (i.customId === 'djs_prev') {\n index = index > 0 ? index - 1 : index;\n } else if (i.customId === 'djs_next') {\n index = index < pages.length - 1 ? index + 1 : index;\n }\n\n prevButton.setDisabled(index === 0);\n nextButton.setDisabled(index === pages.length - 1);\n\n await i.update({\n embeds: [pages[index]],\n components: [new ActionRowBuilder<ButtonBuilder>().addComponents(prevButton, nextButton)]\n });\n });\n\n collector.on('end', async () => {\n prevButton.setDisabled(true);\n nextButton.setDisabled(true);\n if (message.editable) {\n await message.edit({\n components: [new ActionRowBuilder<ButtonBuilder>().addComponents(prevButton, nextButton)]\n }).catch(() => {});\n }\n });\n}\n","import {\n ActionRowBuilder,\n ButtonBuilder,\n ButtonStyle,\n CommandInteraction,\n EmbedBuilder,\n Message,\n MessageComponentInteraction\n} from 'discord.js';\n\n/**\n * Sends a confirmation prompt (Yes/No) to the user.\n * @param context The message or interaction context.\n * @param content The text or embed to display in the prompt.\n * @param time Time to wait for a response in milliseconds.\n * @returns Boolean indicating true for Yes, false for No, or null if timed out.\n */\nexport async function confirmPrompt(\n context: Message | CommandInteraction | MessageComponentInteraction,\n content: string | EmbedBuilder,\n time: number = 30000\n): Promise<boolean | null> {\n const isMessage = 'author' in context;\n\n if (!isMessage) {\n if (!context.deferred && !context.replied) {\n await context.deferReply();\n }\n }\n\n const yesButton = new ButtonBuilder()\n .setCustomId('djs_prompt_yes')\n .setLabel('Yes')\n .setStyle(ButtonStyle.Success);\n\n const noButton = new ButtonBuilder()\n .setCustomId('djs_prompt_no')\n .setLabel('No')\n .setStyle(ButtonStyle.Danger);\n\n const row = new ActionRowBuilder<ButtonBuilder>().addComponents(yesButton, noButton);\n\n const payload: any = { components: [row] };\n if (typeof content === 'string') {\n payload.content = content;\n } else {\n payload.embeds = [content];\n }\n\n let message: Message;\n if (isMessage) {\n message = await context.reply(payload);\n } else {\n message = await context.editReply(payload);\n }\n\n try {\n const interaction = await message.awaitMessageComponent({\n filter: (i) => i.user.id === (isMessage ? context.author.id : context.user.id),\n time\n });\n\n if (interaction.customId === 'djs_prompt_yes') {\n await interaction.update({ components: [] });\n return true;\n } else {\n await interaction.update({ components: [] });\n return false;\n }\n } catch (error) {\n if (message.editable) {\n await message.edit({ components: [] }).catch(() => {});\n }\n return null; // Timed out\n }\n}\n","import { \n ActionRowBuilder, \n ButtonBuilder, \n ButtonStyle, \n CommandInteraction, \n EmbedBuilder, \n Message, \n ComponentType \n} from 'discord.js';\n\nexport class PaginationBuilder {\n private pages: EmbedBuilder[] = [];\n private timeout: number = 60000;\n\n constructor(pages?: EmbedBuilder[]) {\n if (pages) this.pages = pages;\n }\n\n public addPage(embed: EmbedBuilder): this {\n this.pages.push(embed);\n return this;\n }\n\n public setPages(pages: EmbedBuilder[]): this {\n this.pages = pages;\n return this;\n }\n\n public setTimeout(ms: number): this {\n this.timeout = ms;\n return this;\n }\n\n public async build(target: CommandInteraction | Message): Promise<Message | null> {\n if (this.pages.length === 0) throw new Error('[djs-next] PaginationBuilder requires at least one page.');\n\n if (this.pages.length === 1) {\n if (target instanceof CommandInteraction) {\n if (target.deferred || target.replied) {\n return await target.editReply({ embeds: [this.pages[0]] }) as Message;\n }\n return await target.reply({ embeds: [this.pages[0]], fetchReply: true }) as Message;\n } else {\n return await target.reply({ embeds: [this.pages[0]] });\n }\n }\n\n let currentPage = 0;\n\n const row = new ActionRowBuilder<ButtonBuilder>().addComponents(\n new ButtonBuilder().setCustomId('prev').setLabel('◀').setStyle(ButtonStyle.Primary).setDisabled(true),\n new ButtonBuilder().setCustomId('page').setLabel(`1 / ${this.pages.length}`).setStyle(ButtonStyle.Secondary).setDisabled(true),\n new ButtonBuilder().setCustomId('next').setLabel('▶').setStyle(ButtonStyle.Primary)\n );\n\n let replyMsg: Message;\n if (target instanceof CommandInteraction) {\n if (target.deferred || target.replied) {\n replyMsg = await target.editReply({ embeds: [this.pages[0]], components: [row] }) as Message;\n } else {\n replyMsg = await target.reply({ embeds: [this.pages[0]], components: [row], fetchReply: true }) as Message;\n }\n } else {\n replyMsg = await target.reply({ embeds: [this.pages[0]], components: [row] });\n }\n\n const userId = target instanceof CommandInteraction ? target.user.id : target.author.id;\n\n const collector = replyMsg.createMessageComponentCollector({\n componentType: ComponentType.Button,\n time: this.timeout,\n filter: i => i.user.id === userId\n });\n\n collector.on('collect', async i => {\n if (i.customId === 'prev') currentPage--;\n else if (i.customId === 'next') currentPage++;\n\n const newRow = new ActionRowBuilder<ButtonBuilder>().addComponents(\n new ButtonBuilder().setCustomId('prev').setLabel('◀').setStyle(ButtonStyle.Primary).setDisabled(currentPage === 0),\n new ButtonBuilder().setCustomId('page').setLabel(`${currentPage + 1} / ${this.pages.length}`).setStyle(ButtonStyle.Secondary).setDisabled(true),\n new ButtonBuilder().setCustomId('next').setLabel('▶').setStyle(ButtonStyle.Primary).setDisabled(currentPage === this.pages.length - 1)\n );\n\n await i.update({ embeds: [this.pages[currentPage]], components: [newRow] });\n });\n\n collector.on('end', () => {\n replyMsg.edit({ components: [] }).catch(() => null);\n });\n\n return replyMsg;\n }\n}\n"],"mappings":"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","names":["import_discord","import_fs","import_path","fs","path","fs","path","module","import_fs","import_url","client","fs","args","import_discord","import_fs","import_path","import_url","components","fs","module","path","import_fs","import_url","client","fs","module","import_path","import_fs","import_url","import_path","import_fs","import_url","path","fs","config","import_fs","import_path","fs","content","path","import_discord","util","content","djsVersion","os","start","code","end","timeMs","fs","path","message","path","command","message","content","args","fs","import_discord","message","import_discord","content","message","import_discord"]}
|