{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts","../node_modules/colorette/index.js","../src/managers/commands.ts","../src/typings/commands.ts","../src/managers/plugins.ts","../src/managers/multipageembed.ts","../src/structures/multipageembed.ts","../src/builders/button.ts","../src/builders/modal.ts","../src/builders/selectmenus.ts","../src/structures/commands.ts","../src/structures/events.ts","../src/structures/plugins.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { Client, ColorResolvable } from \"discord.js\";\r\nimport { BotOptions, Emoji, PlainBotOptions } from \"./typings/bot\";\r\nimport { crop, highlight, isTypescript } from \"@backs/utils\";\r\nimport { magenta, green, yellow, red, bold, blackBright, bgGreen, bgYellow, bgRed, italic } from \"colorette\";\r\nimport { glob } from \"glob\";\r\nimport { Event } from \"./structures/events\";\r\nimport { AnyCommand } from \"./typings/commands\";\r\nimport { Plugin } from \"./structures\";\r\nimport path from \"path\";\r\nimport isGlob from \"is-glob\";\r\nimport createLogger, { TypedLogger } from \"@backs/logger\";\r\nimport ConfigParser from \"@backs/config-parser\";\r\nimport CommandManager from \"./managers/commands\";\r\nimport PluginManager from \"./managers/plugins\";\r\nimport MultiPageEmbedManager from \"./managers/multipageembed\";\r\n\r\nexport default async function createClient<\r\n    Configs extends Record<string, any>,\r\n    Emojis extends Record<string, Emoji>,\r\n    Colors extends Record<string, ColorResolvable>,\r\n>(options: BotOptions<Configs, Emojis, Colors>) {\r\n    const configParser = new ConfigParser<Configs>({\r\n        ...options.configOptions,\r\n        logging: {\r\n            debug: process.env.NODE_ENV === \"debug\",\r\n        },\r\n        start: false,\r\n    });\r\n    await configParser.start();\r\n    const parsedOptions = parseOptions(configParser.configs, options);\r\n    return new Bot(parsedOptions, configParser, options);\r\n}\r\n\r\nexport class Bot<\r\n    Configs extends Record<string, any>,\r\n    Emojis extends Record<string, Emoji>,\r\n    Colors extends Record<string, ColorResolvable>,\r\n> extends Client<true> {\r\n    private configParser: ConfigParser<Configs>;\r\n    botOptions: PlainBotOptions<Configs, Emojis, Colors>;\r\n    private _botOptions: BotOptions<Configs, Emojis, Colors>;\r\n    logger: TypedLogger<[\"error\", \"warn\", \"debug\", \"log\", \"info\"]>;\r\n    commands: CommandManager<Configs, Emojis, Colors>;\r\n    plugins: PluginManager<Configs, Emojis, Colors>;\r\n    multiPageEmbed: MultiPageEmbedManager<Configs, Emojis, Colors>;\r\n\r\n    get configs() {\r\n        return this.configParser.configs;\r\n    }\r\n\r\n    get clientEmojis(): Emojis {\r\n        const emojis = this._botOptions.emojis;\r\n        if (typeof emojis === \"function\") return emojis(this.configs);\r\n        else return (this.botOptions.emojis as Emojis) ?? {};\r\n    }\r\n\r\n    get clientColors(): Colors {\r\n        const colors = this._botOptions.colors;\r\n        if (typeof colors === \"function\") return colors(this.configs);\r\n        else return (this.botOptions.colors as Colors) ?? {};\r\n    }\r\n\r\n    constructor(\r\n        options: PlainBotOptions<Configs, Emojis, Colors>,\r\n        configParser: ConfigParser<Configs>,\r\n        BotBaseOptions: BotOptions<Configs, Emojis, Colors>,\r\n    ) {\r\n        options.clientOptions.ws ??= {};\r\n        // @ts-expect-error - DiscordJS doesnt have these typings\r\n        options.clientOptions.ws.properties ??= {};\r\n        // @ts-expect-error - DiscordJS doesnt have these typings\r\n        options.clientOptions.ws.properties.$browser = options.clientOptions.browser;\r\n\r\n        super(options.clientOptions);\r\n        this.configParser = configParser;\r\n        this.botOptions = options;\r\n        this._botOptions = BotBaseOptions;\r\n        this.botOptions.debug ??= process.env.NODE_ENV === \"debug\";\r\n        this.botOptions.loggerOptions ??= {};\r\n        this.botOptions.loggerOptions.log ??= {} as Record<\r\n            \"error\" | \"warn\" | \"debug\" | \"log\" | \"info\",\r\n            boolean | (() => boolean)\r\n        >;\r\n        this.botOptions.loggerOptions.log.debug ??= this.botOptions.debug;\r\n\r\n        this.logger = createLogger(this.botOptions.loggerOptions);\r\n        this.commands = new CommandManager(this);\r\n        this.plugins = new PluginManager(this);\r\n        this.multiPageEmbed = new MultiPageEmbedManager(this);\r\n\r\n        process.on(\"uncaughtException\", (err) => {\r\n            this.logger.error(err);\r\n        });\r\n        process.on(\"unhandledRejection\", (err, promise) => {\r\n            this.logger.error(err);\r\n            promise.catch((err) => this.logger.error(err));\r\n        });\r\n    }\r\n\r\n    emoji(name: keyof Emojis) {\r\n        return this.clientEmojis[name];\r\n    }\r\n\r\n    color(name: keyof Colors) {\r\n        return this.clientColors[name];\r\n    }\r\n\r\n    override async login(token?: string) {\r\n        if (!this.configParser.isStarted) await this.configParser.start();\r\n        token =\r\n            token ??\r\n            process.env.TOKEN ??\r\n            process.env.DISCORD_TOKEN ??\r\n            process.env.BOT_TOKEN ??\r\n            process.env.DISCORD_BOT_TOKEN ??\r\n            this.botOptions.token;\r\n\r\n        await this.loadPlugins();\r\n        await this.loadEvents();\r\n        await this.loadCommands();\r\n        if (this.botOptions.debug) this.on(\"debug\", (info) => this.logger.debug(highlight(info, magenta)));\r\n        this.once(\"ready\", () => this.logger.log(\"Client logged in as %bl_i.\", `@${this.user!.tag}`));\r\n\r\n        const loggedIn = await super.login(token).catch((err) => {\r\n            this.logger.error(\"Failed to login to Discord. %r\", \"Exiting...\");\r\n            this.logger.error(err);\r\n            process.exit(1);\r\n        });\r\n        await this.application?.fetch();\r\n        this.logger.debug(\r\n            `Logged in.\\n\\t%m ${this.guilds.cache.size}\\n\\t%m ${this.ws.shards.size}`,\r\n            \"Guilds:\",\r\n            \"Shards:\",\r\n        );\r\n\r\n        return loggedIn;\r\n    }\r\n\r\n    override async destroy() {\r\n        this.logger.debug(\"Stopping config parser...\");\r\n        this.configParser.stop();\r\n        this.logger.debug(\"Clearing commands...\");\r\n        this.commands.destroy();\r\n        this.logger.debug(\"Destroying client...\");\r\n        await super.destroy();\r\n    }\r\n\r\n    private async load<T>(filePath: string): Promise<{\r\n        loaded: T[];\r\n        files: Record<\r\n            string,\r\n            {\r\n                status: string;\r\n                index?: number;\r\n                reason?: string;\r\n            }\r\n        >;\r\n    }> {\r\n        if (isGlob(filePath)) {\r\n            const globbedFiles = await glob(filePath);\r\n            const toLoad: string[] = [];\r\n            const files = {};\r\n            const loaded: T[] = [];\r\n\r\n            for (let file of globbedFiles) {\r\n                if (!path.isAbsolute(file)) file = path.join(path.relative(__dirname, process.cwd()), file);\r\n\r\n                if ((path.extname(file) !== \".ts\" && isTypescript) || (path.extname(file) !== \".js\" && !isTypescript)) {\r\n                    files[file] = {\r\n                        status: \"skipped\",\r\n                        reason: isTypescript ? \"JS file in TS environment\" : \"TS file in JS environment\",\r\n                    };\r\n                    continue;\r\n                }\r\n\r\n                toLoad.push(file);\r\n            }\r\n\r\n            for (const file of toLoad) {\r\n                try {\r\n                    const loadedFiles = require(file).default;\r\n                    loaded.push(loadedFiles);\r\n                    files[file] = {\r\n                        status: \"loaded\",\r\n                        index: loaded.length - 1,\r\n                    };\r\n                } catch (err) {\r\n                    this.logger.error(err);\r\n                    files[file] = {\r\n                        status: \"errored\",\r\n                        reason: crop(err.message, 50),\r\n                    };\r\n                }\r\n            }\r\n\r\n            return {\r\n                loaded,\r\n                files,\r\n            };\r\n        } else {\r\n            if (!path.isAbsolute(filePath)) filePath = path.relative(__dirname, path.join(process.cwd(), filePath));\r\n            if (\r\n                (path.extname(filePath) !== \".ts\" && isTypescript) ||\r\n                (path.extname(filePath) !== \".js\" && !isTypescript)\r\n            )\r\n                return {\r\n                    loaded: [],\r\n                    files: {\r\n                        [filePath]: {\r\n                            status: \"skipped\",\r\n                            reason: isTypescript ? \"JS file in TS environment\" : \"TS file in JS environment\",\r\n                        },\r\n                    },\r\n                };\r\n\r\n            try {\r\n                const file = require(filePath).default;\r\n                return {\r\n                    loaded: [file],\r\n                    files: {\r\n                        [filePath]: {\r\n                            status: \"loaded\",\r\n                            index: 0,\r\n                        },\r\n                    },\r\n                };\r\n            } catch (err) {\r\n                this.logger.error(err);\r\n                return {\r\n                    loaded: [],\r\n                    files: {\r\n                        [filePath]: {\r\n                            status: \"errored\",\r\n                            reason: err.message,\r\n                        },\r\n                    },\r\n                };\r\n            }\r\n        }\r\n    }\r\n\r\n    private async loadCommands() {\r\n        const commands = await Promise.all(\r\n            this.botOptions.commands.map(async (command) => await this.load<AnyCommand>(command)),\r\n        );\r\n        const loadedCommands = commands.flatMap((e) => e.loaded);\r\n        const loadedCommandsData: {\r\n                name: string;\r\n                type: string;\r\n                status: string;\r\n                loadStatus: string;\r\n                filePath: string;\r\n            }[] = [],\r\n            commandFiles = commands.flatMap((e) => Object.entries(e.files));\r\n\r\n        for (let i = 0; i < loadedCommands.length; i++) {\r\n            try {\r\n                const command = loadedCommands[i],\r\n                    filePath = commandFiles.find((e) => e[1].index === i)![0];\r\n                if (command.isIDBased()) {\r\n                    if (command.isSelectMenuCommand()) this.commands.stores.selectMenu.set(command.id, command);\r\n                    else if (command.isButtonCommand()) this.commands.stores.button.set(command.id, command);\r\n                    else if (command.isModalCommand()) this.commands.stores.modal.set(command.id, command);\r\n                    loadedCommandsData.push({\r\n                        name: command.id,\r\n                        type: command.isSelectMenuCommand()\r\n                            ? \"Select Menu\"\r\n                            : command.isButtonCommand()\r\n                            ? \"Button\"\r\n                            : \"Modal\",\r\n                        status: command.enabled ? green(\"Enabled\") : red(\"Disabled\"),\r\n                        loadStatus: bgGreen(`${commandFiles[i][1].status}\\n${commandFiles[i][1].reason ?? \"\"}`),\r\n                        filePath,\r\n                    });\r\n                } else {\r\n                    if (command.isSlashCommand()) this.commands.stores.slash.set(command.data.name, command);\r\n                    else if (command.isContextMenuCommand()) {\r\n                        if (command.isUserContextMenuCommand())\r\n                            this.commands.stores.contextMenuUser.set(command.data.name, command);\r\n                        else this.commands.stores.contextMenuMessage.set(command.data.name, command);\r\n                    } else if (command.isMessageCommand()) {\r\n                        this.commands.stores.message.set(command.data.name, command);\r\n                        for (const name of Object.values(command.data.nameLocalizations ?? {}))\r\n                            this.commands.stores.message.set(name, command);\r\n                        for (const alias of command.data.aliases ?? [])\r\n                            this.commands.stores.message.set(alias, command);\r\n                    }\r\n                    loadedCommandsData.push({\r\n                        name: command.data.name,\r\n                        type: command.isSlashCommand()\r\n                            ? \"Slash\"\r\n                            : command.isContextMenuCommand()\r\n                            ? \"Context Menu\"\r\n                            : \"Message\",\r\n                        status: command.enabled ?? true ? green(\"Enabled\") : red(\"Disabled\"),\r\n                        loadStatus: bgGreen(`${commandFiles[i][1].status}\\n${commandFiles[i][1].reason ?? \"\"}`),\r\n                        filePath,\r\n                    });\r\n                }\r\n            } catch (err) {\r\n                this.logger.error(err);\r\n                loadedCommandsData.push({\r\n                    name: path.basename(commandFiles[i][0], path.extname(commandFiles[i][0])),\r\n                    type: italic(\"Unknown\"),\r\n                    status: red(\"errored\"),\r\n                    loadStatus: bgRed(`${commandFiles[i][1].status}\\n${commandFiles[i][1].reason ?? \"\"}`),\r\n                    filePath: commandFiles[i][0],\r\n                });\r\n            }\r\n        }\r\n\r\n        for (const [filePath, command] of commandFiles) {\r\n            if (command.status === \"loaded\") continue;\r\n            loadedCommandsData.push({\r\n                name: path.basename(filePath, path.extname(filePath)),\r\n                type: italic(\"Unknown\"),\r\n                status: blackBright(\"Unknown\"),\r\n                loadStatus:\r\n                    command.status === \"skipped\"\r\n                        ? bgYellow(`${command.status}\\n${command.reason ?? \"\"}`)\r\n                        : bgRed(`${command.status}\\n${command.reason ?? \"\"}`),\r\n                filePath,\r\n            });\r\n        }\r\n\r\n        if (this.botOptions.debug) {\r\n            this.logger.debug(\" \");\r\n            this.logger.table(\r\n                [\r\n                    [\"Command Name\", \"Type\", \"Status\", \"Load Status\", \"File Path\"].map((h) => bold(h)),\r\n                    ...loadedCommandsData.map((e) => [e.name, e.type, e.status, e.loadStatus, e.filePath]),\r\n                    [\r\n                        bold(\"Total\"),\r\n                        ...Object.entries(\r\n                            Object.values(commands).reduce(\r\n                                (acc, e) => {\r\n                                    Object.values(e.files).forEach((e) => acc[e.status]++);\r\n                                    return acc;\r\n                                },\r\n                                { loaded: 0, skipped: 0, errored: 0 },\r\n                            ),\r\n                        ).map(([k, v]) => `${k === \"loaded\" ? green(k) : k === \"skipped\" ? yellow(k) : red(k)}: ${v}`),\r\n                        \"\",\r\n                    ],\r\n                ],\r\n                {\r\n                    header: {\r\n                        content: magenta(\"Loaded Commands\"),\r\n                    },\r\n                },\r\n            );\r\n        }\r\n    }\r\n\r\n    private async loadEvents() {\r\n        const events = await Promise.all(\r\n            this.botOptions.events.map(async (event) => await this.load<Event<any>>(event)),\r\n        );\r\n        const loadedEvents = events.flatMap((e) => e.loaded);\r\n\r\n        for (const event of loadedEvents) {\r\n            try {\r\n                if (!(event.enabled ??= true)) continue;\r\n                if (event.once)\r\n                    this.once(event.name, async (...args) => {\r\n                        for (const prerun of this.plugins.events[event.name]?.prerun ?? []) await prerun(...args);\r\n                        const result = await event.run.bind(event)(...args);\r\n                        for (const postrun of this.plugins.events[event.name]?.postrun ?? [])\r\n                            await postrun(result, ...args);\r\n                    });\r\n                else\r\n                    this.on(event.name, async (...args) => {\r\n                        for (const prerun of this.plugins.events[event.name]?.prerun ?? []) await prerun(...args);\r\n                        const result = await event.run.bind(event)(...args);\r\n                        for (const postrun of this.plugins.events[event.name]?.postrun ?? [])\r\n                            await postrun(result, ...args);\r\n                    });\r\n            } catch (err) {\r\n                this.logger.error(err);\r\n            }\r\n        }\r\n\r\n        if (this.botOptions.debug) {\r\n            this.logger.debug(\" \");\r\n            this.logger.table(\r\n                [\r\n                    [\"Event Name\", \"Event\", \"Status\", \"Load Status\", \"File Path\"].map((h) => bold(h)),\r\n                    ...events.flatMap((e, i) =>\r\n                        Object.entries(e.files).map(([file, { status, reason, index }]) => [\r\n                            events[i].loaded[index ?? -1]?.readableName ??\r\n                                events[i].loaded[index ?? -1]?.name ??\r\n                                path.basename(file, path.extname(file)),\r\n                            events[i].loaded[index ?? -1]?.name ?? path.basename(file, path.extname(file)),\r\n                            events[i].loaded[index ?? -1]\r\n                                ? events[i].loaded[index ?? -1]?.enabled\r\n                                    ? green(\"Enabled\")\r\n                                    : red(\"Disabled\")\r\n                                : blackBright(\"Unknown\"),\r\n                            status === \"loaded\"\r\n                                ? bgGreen(`${status}\\n${reason ?? \"\"}`)\r\n                                : status === \"skipped\"\r\n                                ? bgYellow(`${status}\\n${reason ?? \"\"}`)\r\n                                : bgRed(`${status}\\n${reason ?? \"\"}`),\r\n                            file,\r\n                        ]),\r\n                    ),\r\n                    [\r\n                        bold(\"Total\"),\r\n                        ...Object.entries(\r\n                            Object.values(events).reduce(\r\n                                (acc, e) => {\r\n                                    Object.values(e.files).forEach((e) => acc[e.status]++);\r\n                                    return acc;\r\n                                },\r\n                                { loaded: 0, skipped: 0, errored: 0 },\r\n                            ),\r\n                        ).map(([k, v]) => `${k === \"loaded\" ? green(k) : k === \"skipped\" ? yellow(k) : red(k)}: ${v}`),\r\n                        \"\",\r\n                    ],\r\n                ],\r\n                {\r\n                    header: {\r\n                        content: magenta(\"Loaded Events\"),\r\n                    },\r\n                },\r\n            );\r\n        }\r\n    }\r\n\r\n    private async loadPlugins() {\r\n        this.botOptions.plugins ??= [];\r\n        const plugins = await Promise.all(\r\n            this.botOptions.plugins.map(async (plugin) => await this.load<Plugin>(plugin)),\r\n        );\r\n        const loadedPlugins = plugins.flatMap((e) => e.loaded);\r\n\r\n        for (const plugin of loadedPlugins) this.plugins.register(plugin);\r\n\r\n        if (this.botOptions.debug) {\r\n            this.logger.debug(\" \");\r\n            this.logger.table(\r\n                [\r\n                    [\"Plugin Name\", \"Version\", \"Status\", \"Load Status\", \"File Path\"].map((h) => bold(h)),\r\n                    ...plugins.flatMap((e, i) =>\r\n                        Object.entries(e.files).map(([file, { status, reason, index }]) => [\r\n                            plugins[i].loaded[index ?? -1]?.name ?? path.basename(file, path.extname(file)),\r\n                            plugins[i].loaded[index ?? -1]?.version ?? italic(\"Unknown\"),\r\n                            plugins[i].loaded[index ?? -1]\r\n                                ? this.botOptions.enablePlugins === false\r\n                                    ? plugins[i].loaded[index ?? -1]?.enabled === true\r\n                                        ? green(\"Enabled - Forced\")\r\n                                        : red(\"Disabled\")\r\n                                    : plugins[i].loaded[index ?? -1]?.enabled\r\n                                    ? green(\"Enabled\")\r\n                                    : red(\"Disabled\")\r\n                                : blackBright(\"Unknown\"),\r\n                            status === \"loaded\"\r\n                                ? bgGreen(`${status}\\n${reason ?? \"\"}`)\r\n                                : status === \"skipped\"\r\n                                ? bgYellow(`${status}\\n${reason ?? \"\"}`)\r\n                                : bgRed(`${status}\\n${reason ?? \"\"}`),\r\n                            file,\r\n                        ]),\r\n                    ),\r\n                    [\r\n                        bold(\"Total\"),\r\n                        ...Object.entries(\r\n                            Object.values(plugins).reduce(\r\n                                (acc, e) => {\r\n                                    Object.values(e.files).forEach((e) => acc[e.status]++);\r\n                                    return acc;\r\n                                },\r\n                                { loaded: 0, skipped: 0, errored: 0 },\r\n                            ),\r\n                        ).map(([k, v]) => `${k === \"loaded\" ? green(k) : k === \"skipped\" ? yellow(k) : red(k)}: ${v}`),\r\n                        \"\",\r\n                    ],\r\n                ],\r\n                {\r\n                    header: {\r\n                        content: magenta(\"Loaded Plugins\"),\r\n                    },\r\n                },\r\n            );\r\n        }\r\n    }\r\n}\r\n\r\nconst parseOptions = <\r\n    Configs extends Record<string, any>,\r\n    Emojis extends Record<string, Emoji>,\r\n    Colors extends Record<string, ColorResolvable>,\r\n>(\r\n    configs: Configs,\r\n    options: BotOptions<Configs, Emojis, Colors>,\r\n): PlainBotOptions<Configs, Emojis, Colors> => {\r\n    const parsedOptions = {} as PlainBotOptions<Configs, Emojis, Colors>;\r\n\r\n    for (const [key, value] of Object.entries(options)) {\r\n        if (typeof value === \"function\") {\r\n            parsedOptions[key] = (value as (configs: Configs) => any)(configs);\r\n        } else {\r\n            parsedOptions[key] = value;\r\n        }\r\n    }\r\n\r\n    return parsedOptions;\r\n};\r\n\r\nexport * from \"./builders\";\r\nexport * from \"./managers\";\r\nexport * from \"./structures\";\r\nexport * from \"./typings\";\r\n","import * as tty from \"tty\"\n\nconst {\n  env = {},\n  argv = [],\n  platform = \"\",\n} = typeof process === \"undefined\" ? {} : process\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\")\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\")\nconst isWindows = platform === \"win32\"\nconst isDumbTerminal = env.TERM === \"dumb\"\n\nconst isCompatibleTerminal =\n  tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal\n\nconst isCI =\n  \"CI\" in env &&\n  (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env)\n\nexport const isColorSupported =\n  !isDisabled &&\n  (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)\n\nconst replaceClose = (\n  index,\n  string,\n  close,\n  replace,\n  head = string.substring(0, index) + replace,\n  tail = string.substring(index + close.length),\n  next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace))\n\nconst clearBleed = (index, string, open, close, replace) =>\n  index < 0\n    ? open + string + close\n    : open + replaceClose(index, string, close, replace) + close\n\nconst filterEmpty =\n  (open, close, replace = open, at = open.length + 1) =>\n  (string) =>\n    string || !(string === \"\" || string === undefined)\n      ? clearBleed(\n          (\"\" + string).indexOf(close, at),\n          string,\n          open,\n          close,\n          replace\n        )\n      : \"\"\n\nconst init = (open, close, replace) =>\n  filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace)\n\nconst colors = {\n  reset: init(0, 0),\n  bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n  dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n  italic: init(3, 23),\n  underline: init(4, 24),\n  inverse: init(7, 27),\n  hidden: init(8, 28),\n  strikethrough: init(9, 29),\n  black: init(30, 39),\n  red: init(31, 39),\n  green: init(32, 39),\n  yellow: init(33, 39),\n  blue: init(34, 39),\n  magenta: init(35, 39),\n  cyan: init(36, 39),\n  white: init(37, 39),\n  gray: init(90, 39),\n  bgBlack: init(40, 49),\n  bgRed: init(41, 49),\n  bgGreen: init(42, 49),\n  bgYellow: init(43, 49),\n  bgBlue: init(44, 49),\n  bgMagenta: init(45, 49),\n  bgCyan: init(46, 49),\n  bgWhite: init(47, 49),\n  blackBright: init(90, 39),\n  redBright: init(91, 39),\n  greenBright: init(92, 39),\n  yellowBright: init(93, 39),\n  blueBright: init(94, 39),\n  magentaBright: init(95, 39),\n  cyanBright: init(96, 39),\n  whiteBright: init(97, 39),\n  bgBlackBright: init(100, 49),\n  bgRedBright: init(101, 49),\n  bgGreenBright: init(102, 49),\n  bgYellowBright: init(103, 49),\n  bgBlueBright: init(104, 49),\n  bgMagentaBright: init(105, 49),\n  bgCyanBright: init(106, 49),\n  bgWhiteBright: init(107, 49),\n}\n\nexport const createColors = ({ useColor = isColorSupported } = {}) =>\n  useColor\n    ? colors\n    : Object.keys(colors).reduce(\n        (colors, key) => ({ ...colors, [key]: String }),\n        {}\n      )\n\nexport const {\n  reset,\n  bold,\n  dim,\n  italic,\n  underline,\n  inverse,\n  hidden,\n  strikethrough,\n  black,\n  red,\n  green,\n  yellow,\n  blue,\n  magenta,\n  cyan,\n  white,\n  gray,\n  bgBlack,\n  bgRed,\n  bgGreen,\n  bgYellow,\n  bgBlue,\n  bgMagenta,\n  bgCyan,\n  bgWhite,\n  blackBright,\n  redBright,\n  greenBright,\n  yellowBright,\n  blueBright,\n  magentaBright,\n  cyanBright,\n  whiteBright,\n  bgBlackBright,\n  bgRedBright,\n  bgGreenBright,\n  bgYellowBright,\n  bgBlueBright,\n  bgMagentaBright,\n  bgCyanBright,\n  bgWhiteBright,\n} = createColors()\n","import { APIInteractionGuildMember, Collection, ColorResolvable, EmbedBuilder, GuildMember, Interaction, LocaleString, Message, PermissionsBitField } from \"discord.js\";\r\nimport { MessageArguments, ICommandManager, SelectMenus, PermissionsMode, RunIn, AnyCommand } from \"../typings/commands\";\r\nimport { Bot } from \"..\";\r\nimport { Emoji } from \"../typings/bot\";\r\nimport { escape } from \"@backs/utils\"\r\nimport { ButtonCommand, ContextMenuCommand, MessageCommand, ModalCommand, SelectMenuCommand, SlashCommand } from \"../structures\";\r\n\r\nexport default class CommandManager<Configs extends Record<string, any>, Emojis extends Record<string, Emoji>, Colors extends Record<string, ColorResolvable>> implements ICommandManager {\r\n    public client: Bot<Configs, Emojis, Colors>;\r\n\r\n    constructor(client: Bot<Configs, Emojis, Colors>) {\r\n        this.client = client;\r\n    }\r\n\r\n    public stores = {\r\n        slash: new Collection<string, SlashCommand>(),\r\n        contextMenuUser: new Collection<string, ContextMenuCommand<\"user\">>(),\r\n        contextMenuMessage: new Collection<string, ContextMenuCommand<\"message\">>(),\r\n        message: new Collection<string, MessageCommand<any>>(),\r\n        selectMenu: new Collection<string, SelectMenuCommand<keyof SelectMenus, any>>(),\r\n        button: new Collection<string, ButtonCommand<any>>(),\r\n        modal: new Collection<string, ModalCommand<any>>(),\r\n    };\r\n\r\n    public ratelimits = {\r\n        user: new Collection<string, { command: string; type: \"message\" | \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\"; expires: number; }[]>(),\r\n        guild: new Collection<string, { command: string; type: \"message\" | \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\"; expires: number; }[]>(),\r\n        channel: new Collection<string, { command: string; type: \"message\" | \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\"; expires: number; }[]>(),\r\n        global: new Collection<string, { command: string; type: \"message\" | \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\"; expires: number; }[]>(),\r\n    };\r\n\r\n    destroy() {\r\n        for (const store of Object.values(this.stores)) store.clear();\r\n        for (const ratelimit of Object.values(this.ratelimits)) ratelimit.clear();\r\n    }\r\n\r\n    async run(intOrMsg: Interaction<\"cached\"> | Message, { commandName, precommand, postcommand, postprocess, postrun, behavior, translations }: {\r\n        commandName?: string,\r\n        precommand?: (intOrMsg: Interaction<\"cached\"> | Message) => boolean | Promise<boolean>,\r\n        postcommand?: (intOrMsg: Interaction<\"cached\"> | Message, command: AnyCommand) => boolean | Promise<boolean>,\r\n        postprocess?: (intOrMsg: Interaction<\"cached\"> | Message, command: AnyCommand) => boolean | Promise<boolean>,\r\n        postrun?: (intOrMsg: Interaction<\"cached\"> | Message, command: AnyCommand, result: any) => boolean | Promise<boolean>,\r\n        behavior?: \"preferIgnore\" | \"preferReply\" | \"auto\",\r\n        translations?: Partial<Record<\"notallowed\" | \"ratelimit\" | \"unavailable\", Partial<Record<LocaleString, string>>>>;\r\n    }) {\r\n        try {\r\n            if ((await precommand?.(intOrMsg)) === false) return;\r\n    \r\n            if (intOrMsg instanceof Message) {\r\n                const command = this.stores.message.get(commandName!);\r\n                if (!command) {\r\n                    if (behavior === \"preferReply\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.unavailable?.[(intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ]\r\n                    });\r\n                    else return;\r\n                }\r\n    \r\n                if ((await postcommand?.(intOrMsg, command)) === false) return;\r\n                \r\n                if (command.enabled === false) {\r\n                    if (behavior === \"preferReply\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.unavailable?.[(intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ]\r\n                    });\r\n                    else return;     \r\n                }\r\n    \r\n                if (\r\n                    (intOrMsg.inGuild() && command.options?.runIn === RunIn.DM) ||\r\n                    (!intOrMsg.inGuild() && command.options?.runIn === RunIn.Guild) ||\r\n                    (intOrMsg.inGuild() && !this.checkPermissions(command, intOrMsg.member!))\r\n                ) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.notallowed?.[(intOrMsg.guild?.preferredLocale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"You cannot use this command.\")\r\n                            .setColor(\"Red\")\r\n                        ]\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                if (this.ratelimit(command, intOrMsg.author.id)) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.ratelimit?.[intOrMsg.guild?.preferredLocale ?? \"en_US\"] ?? \"You're a bit too quick there.\")\r\n                            .setColor(\"Red\")\r\n                        ]\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                const args = command.data.arguments ? this.parseArgs(intOrMsg.content.slice(intOrMsg.content.indexOf(commandName!) - 1 + commandName!.length), command.data.arguments) : {};\r\n    \r\n                if ((await postprocess?.(intOrMsg, command)) === false) return;\r\n    \r\n                const result = await command.run(intOrMsg, args); \r\n    \r\n                if ((await postrun?.(intOrMsg, command, result)) === false) return;\r\n            } else if (intOrMsg.isCommand()) {\r\n                let command: SlashCommand | ContextMenuCommand<\"user\"> | ContextMenuCommand<\"message\"> | undefined;\r\n                intOrMsg.member\r\n                if (intOrMsg.isChatInputCommand()) command = this.stores.slash.get(intOrMsg.commandName);\r\n                else {\r\n                    if (intOrMsg.isUserContextMenuCommand()) command = this.stores.contextMenuUser.get(intOrMsg.commandName);\r\n                    else command = this.stores.contextMenuMessage.get(intOrMsg.commandName)\r\n                }\r\n    \r\n                if (!command) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.unavailable?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                if ((await postcommand?.(intOrMsg, command)) === false) return;\r\n    \r\n                if (command.enabled === false) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                               .setDescription(translations?.unavailable?.[(intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    });\r\n                    else return;     \r\n                }\r\n    \r\n                if (\r\n                    (intOrMsg.inGuild() && command.options?.runIn === RunIn.DM) ||\r\n                    (!intOrMsg.inGuild() && command.options?.runIn === RunIn.Guild) ||\r\n                    (intOrMsg.inGuild() && !this.checkPermissions(command, intOrMsg.member))\r\n                ) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.notallowed?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"You cannot use this command.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                if (this.ratelimit(command, intOrMsg.user.id)) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.ratelimit?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"You're a bit too quick there.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                if ((await postprocess?.(intOrMsg, command)) === false) return;\r\n    \r\n                const result = await (command.run as (interaction: Interaction) => any | Promise<any>)(intOrMsg)\r\n    \r\n                if ((await postrun?.(intOrMsg, command, result)) === false) return;\r\n            } else if (intOrMsg.isAutocomplete()) {\r\n                const command = this.stores.slash.get(intOrMsg.commandName);\r\n                if (!command || command.enabled === false || !(intOrMsg.options.getFocused(true).name in (command.autocomplete ?? {}))) return await intOrMsg.respond([]);\r\n    \r\n                if ((await postcommand?.(intOrMsg, command)) === false) return;\r\n    \r\n                const result = await command.autocomplete![intOrMsg.options.getFocused(true).name](intOrMsg, intOrMsg.options.getFocused());\r\n                \r\n                if ((await postrun?.(intOrMsg, command, result)) === false) return;\r\n            } else {\r\n                let command: SelectMenuCommand<any, any> | ButtonCommand<any> | ModalCommand<any> | undefined;\r\n                const args = this.parseArgs(intOrMsg.customId, command?.arguments ?? []);\r\n    \r\n                if (!args || !args.id) {\r\n                    if (behavior !== \"preferIgnore\" || intOrMsg.isModalSubmit()) return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.unavailable?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return await intOrMsg.update({});\r\n                }\r\n\r\n                if (intOrMsg.isButton() && args.id === \"multipageembed\") return;\r\n    \r\n                if (intOrMsg.isButton()) command = this.stores.button.get(args.id);\r\n                else if (intOrMsg.isAnySelectMenu()) command = this.stores.selectMenu.get(args.id);\r\n                else command = this.stores.modal.get(args.id);\r\n    \r\n                if (!command) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.unavailable?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return;\r\n                }\r\n                \r\n                if ((await postcommand?.(intOrMsg, command)) === false) return;\r\n    \r\n                if (command.enabled === false) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                               .setDescription(translations?.unavailable?.[(intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"This command is unavailable.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    });\r\n                    else return;     \r\n                }\r\n                \r\n                if (args.userId && intOrMsg.user.id !== args.userId) {\r\n                    if (behavior !== \"preferIgnore\") return await intOrMsg.reply({\r\n                        embeds: [\r\n                            new EmbedBuilder()\r\n                            .setDescription(translations?.notallowed?.[(intOrMsg.locale ?? intOrMsg.guild?.preferredLocale) ?? \"en_US\"] ?? \"You are not allowed to use this command.\")\r\n                            .setColor(\"Red\")\r\n                        ],\r\n                        ephemeral: true\r\n                    })\r\n                    else return;\r\n                }\r\n    \r\n                if ((await postprocess?.(intOrMsg, command)) === false) return;\r\n    \r\n                const result = await command.run(intOrMsg, args);\r\n    \r\n                if ((await postrun?.(intOrMsg, command, result)) === false) return;\r\n            }\r\n        }  catch (err) {\r\n            this.client.logger.error(err);\r\n            if (intOrMsg instanceof Message) await intOrMsg.reply({\r\n                embeds: [\r\n                    new EmbedBuilder()\r\n                    .setDescription(\"An error occurred while executing this command.\")\r\n                    .setColor(this.client.color(\"error\"))\r\n                ]\r\n            });\r\n            else {\r\n                if (intOrMsg.isAutocomplete()) {\r\n                    if (!intOrMsg.responded) await intOrMsg.respond([]).catch(() => {});\r\n                } else if (intOrMsg.replied) await intOrMsg.followUp({\r\n                    embeds: [\r\n                        new EmbedBuilder()\r\n                        .setDescription(\"An error occurred while executing this command.\")\r\n                        .setColor(this.client.color(\"error\"))\r\n                    ]\r\n                }).catch(() => {});\r\n                else if (intOrMsg.deferred) await intOrMsg.editReply({\r\n                    embeds: [\r\n                        new EmbedBuilder()\r\n                        .setDescription(\"An error occurred while executing this command.\")\r\n                        .setColor(this.client.color(\"error\"))\r\n                    ]\r\n                }).catch(() => {});\r\n                else await intOrMsg.reply({\r\n                    embeds: [\r\n                        new EmbedBuilder()\r\n                        .setDescription(\"An error occurred while executing this command.\")\r\n                        .setColor(this.client.color(\"error\"))\r\n                    ],\r\n                    ephemeral: true\r\n                }).catch(() => {});\r\n            }\r\n        }\r\n    }\r\n\r\n    checkPermissions(command: MessageCommand<any> | SlashCommand | ContextMenuCommand<\"user\" | \"message\">, user: GuildMember | APIInteractionGuildMember) {\r\n        if (this.client.botOptions.owners?.includes(user.user.id)) return true;\r\n\r\n        const permissions = user instanceof GuildMember ? user.permissions : new PermissionsBitField(BigInt(user.permissions));\r\n        const restricted = command.options?.restricted ?? false;\r\n        if (!command.options?.permissions) return !restricted;\r\n\r\n        if (command.options.permissions.allow) {\r\n            const mode = command.options.permissions.allowMode ?? PermissionsMode.MatchOne;\r\n            \r\n            if (mode === PermissionsMode.MatchOne) {\r\n                for (const permission of command.options.permissions.allow)\r\n                    if (permissions.has(permission, true)) return true;\r\n\r\n                return false;\r\n            } else if (mode === PermissionsMode.MatchAll) {\r\n                for (const permission of command.options.permissions.allow)\r\n                    if (!permissions.has(permission, true)) return false;\r\n\r\n                return true;\r\n            } else {\r\n                for (const permission of command.options.permissions.allow)\r\n                    if (permissions.has(permission, true)) return false;\r\n\r\n                return true;\r\n            }\r\n        }\r\n\r\n        if (command.options.permissions.deny) {\r\n            const mode = command.options.permissions.allowMode ?? PermissionsMode.MatchOne;\r\n            \r\n            if (mode === PermissionsMode.MatchOne) {\r\n                for (const permission of command.options.permissions.deny)\r\n                    if (permissions.has(permission, true)) return false;\r\n\r\n                return true;\r\n            } else if (mode === PermissionsMode.MatchAll) {\r\n                for (const permission of command.options.permissions.deny)\r\n                    if (!permissions.has(permission, true)) return true;\r\n\r\n                return false;\r\n            } else {\r\n                for (const permission of command.options.permissions.deny)\r\n                    if (permissions.has(permission, true)) return true;\r\n\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return !restricted;\r\n    }\r\n\r\n    ratelimit(command: MessageCommand<any> | SlashCommand | ContextMenuCommand<\"user\" | \"message\">, userId: string) {\r\n        const ratelimit = command.options?.ratelimit\r\n        if (!ratelimit) return false;\r\n\r\n        for (const [key, value] of Object.entries(ratelimit)) {\r\n            if (value === 0) continue;\r\n            const now = Date.now();\r\n            const ratelimits = this.ratelimits[key as keyof typeof this.ratelimits];\r\n            \r\n            if (ratelimits.has(userId)) {\r\n                const userRatelimits = ratelimits.get(userId)!;\r\n                ratelimits.set(userId, userRatelimits.filter(r => r.expires > now));\r\n                const commandRatelimit = userRatelimits.find(r => r.command === command.data.name && r.type === command.commandType);\r\n                if (commandRatelimit && commandRatelimit.expires > now) return true;\r\n            }\r\n            \r\n            const expires = now + value;\r\n            ratelimits.set(userId, [...(ratelimits.get(userId) ?? []), { command: command.data.name, type: command.commandType, expires }]);\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    parseArgs<T extends string>(args: string, format: T): MessageArguments<T>;\r\n    parseArgs<T extends string[]>(args: string, format: T): { [K in T[number]]?: string } &  { id: string; userId?: string };\r\n    parseArgs<T extends string | string[]>(args: string, format: T) {\r\n        if (Array.isArray(format)) {\r\n            const argsArray = args.split(\"/\");\r\n\r\n            return {\r\n                id: argsArray.shift(),\r\n                userId: argsArray.shift(),\r\n                ...argsArray.reduce((o, v, i) => { o[format[i]] = v; return o; }, {} as  { [Key in T[number]]?: string })\r\n            } as  { [Key in T[number]]?: string } & { id: string; userId?: string };\r\n        } else if (typeof format === \"string\") {\r\n            const argDefinitions = args.match(/<[^<>\\[\\]]>|\\[[^<>\\[\\]]\\]>/g) ?? [],\r\n                parsedArgs: Record<string, string | boolean | undefined> = {},\r\n                content = args.split(/\\s+/);\r\n\r\n            const getNext = (required: boolean) => {\r\n                const c = content.shift();\r\n                if (required && !c) throw new Error(\"Missing required argument.\");\r\n                else if (!c) return undefined;\r\n                else return c;\r\n            }\r\n            \r\n            for (let i = 0; i < argDefinitions.length; i++) {\r\n                const arg = argDefinitions[i];\r\n                const [name, options] = arg.match(/(?:<|\\[)([a-zA-Z0-9_-]+)(:(?:[a-zA-Z0-9_-],? *)+|\\((?:.+)\\)|\\.\\.\\.)?(?:>|])/) ?? [];\r\n                const isRequired = arg.startsWith(\"<\") && arg.endsWith(\">\");\r\n\r\n                if (!isRequired && (!arg.startsWith(\"[\") || !arg.endsWith(\"]\"))) throw new Error(\"Invalid format.\");\r\n                if (!name) throw new Error(\"Invalid format.\");\r\n\r\n                if (options) {\r\n                    if (options.endsWith(\"...\")) {\r\n                        if (i !== (argDefinitions.length - 1)) throw new Error(\"Rest arguments must be the last argument.\");\r\n                        if (content.length === 0) {\r\n                            if (isRequired) throw new Error(\"Missing required argument.\");\r\n                            else continue;\r\n                        }\r\n\r\n                        const c = args.match(new RegExp(`\\\\s(${escape(content[0])}\\s+)`))![1];\r\n                        parsedArgs[name] = c;\r\n                    }\r\n                    else if (options.startsWith(\"(\") && options.endsWith(\")\")) {\r\n                        const regex = new RegExp(options.slice(1, -1));\r\n                        const c = getNext(isRequired);\r\n                        if (c && !regex.test(c)) {\r\n                            if (isRequired) throw new Error(\"Invalid required argument.\");\r\n                            else {\r\n                                parsedArgs[name] = undefined;\r\n                                continue;\r\n                            };\r\n                        }\r\n                        parsedArgs[name] = c;\r\n                    }\r\n                    else if (options.startsWith(\":\")) {\r\n                        const enums = options.slice(1).split(\",\");\r\n                        const c = getNext(isRequired);\r\n                        if (c && !enums.includes(c)) {\r\n                            if (isRequired) throw new Error(\"Invalid required argument.\");\r\n                            else {\r\n                                parsedArgs[name] = enums.length === 1 ? false : undefined;\r\n                                continue;\r\n                            }\r\n                        }\r\n                        parsedArgs[name] = enums.length === 1 ? true : c;\r\n                    } else throw new Error(\"Invalid format.\");\r\n                } else parsedArgs[name] = getNext(isRequired);\r\n            }\r\n\r\n            return parsedArgs as MessageArguments<T & string>\r\n        } else throw new Error(\"Invalid format.\");\r\n    }\r\n}","import { PermissionResolvable, SlashCommandBuilder, SlashCommandOptionsOnlyBuilder, SlashCommandSubcommandsOnlyBuilder, AutocompleteInteraction, StringSelectMenuInteraction, UserSelectMenuInteraction, ChannelSelectMenuInteraction, RoleSelectMenuInteraction, MentionableSelectMenuInteraction, ButtonInteraction, ContextMenuCommandBuilder, UserContextMenuCommandInteraction, MessageContextMenuCommandInteraction, ModalSubmitInteraction, Message, Collection, Interaction, ChatInputCommandInteraction, LocaleString, GuildMember, APIInteractionGuildMember } from \"discord.js\"\r\nimport { ButtonCommand, ContextMenuCommand, MessageCommand, ModalCommand, SelectMenuCommand, SlashCommand } from \"../structures\";\r\n\r\nexport interface AdvancedCommandOptions {\r\n    runIn?: RunIn;\r\n    ratelimit?: Ratelimit;\r\n    restricted?: boolean;\r\n    users?: {\r\n        deny?: string[];\r\n        allow?: string[];\r\n    };\r\n    roles?: {\r\n        deny?: string[];\r\n        allow?: string[];\r\n    };\r\n    permissions?: PermissionsList;\r\n    help?: Help;\r\n}\r\n\r\nexport enum RunIn {\r\n    DM,\r\n    Guild,\r\n    Any\r\n}\r\n\r\ninterface PermissionsList {\r\n    allow?: PermissionResolvable[];\r\n    deny?: PermissionResolvable[];\r\n    allowMode?: PermissionsMode;\r\n    denyMode?: PermissionsMode;\r\n}\r\n\r\nexport enum PermissionsMode {\r\n    MatchNone,\r\n    MatchOne,\r\n    MatchAll\r\n}\r\n\r\ninterface Ratelimit {\r\n    user?: number;\r\n    guild?: number;\r\n    channel?: number;\r\n    global?: number;\r\n}\r\n\r\nexport interface Help {\r\n    name?: string;\r\n    description?: string;\r\n    usage: string;\r\n    category: string;\r\n    examples: string[];\r\n}\r\n\r\nexport interface BaseCommandOptions {\r\n    enabled?: boolean;\r\n    options?: AdvancedCommandOptions;\r\n}\r\n\r\nexport interface BaseCommand extends BaseCommandOptions {\r\n    commandType: \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\" | \"message\" | \"selectMenu\" | \"button\" | \"modal\";\r\n    isIDBased: () => this is IDBasedCommand<any>\r\n    isSlashCommand: () => this is ISlashCommand \r\n    isContextMenuCommand: () => this is IContextMenuCommand<\"user\" | \"message\"> \r\n    isMessageCommand: () => this is IMessageCommand<any>\r\n}\r\n\r\nexport type MessageArguments<S extends string> = S extends `<${infer Start}> ${infer Rest}` ? \r\n    process<Start, true> & MessageArguments<Rest> :\r\n    S extends `[${infer Start}] ${infer Rest}` ?\r\n    process<Start, false> & MessageArguments<Rest> :\r\n    S extends `<${infer Start}>` ?\r\n    process<Start, true> :\r\n    S extends `[${infer Start}]` ?\r\n    process<Start, false> :\r\n    never\r\n\r\ntype process<arg extends string, required extends boolean> = arg extends `${infer name}:${infer options}` ? \r\noptions extends `${infer _},${infer __}` ? \r\n    required extends true ? { [K in name]: CreateUnionFromCommaSeparated<options> } : { [K in name]?: CreateUnionFromCommaSeparated<options> }\r\n        : required extends true ? { [K in name]: boolean } : { [K in name]?: boolean }\r\n: required extends true ? { [K in Remove<arg>]: string } : { [K in Remove<arg>]?: string }\r\n\r\n// Message command\r\ntype Remove<S extends string> = RemoveRegex<RemoveEllipsis<S>>;\r\ntype RemoveRegex<T extends string> = T extends `${infer WithoutRegex}(${infer _})` ? WithoutRegex : T;\r\ntype RemoveEllipsis<T extends string> = T extends `${infer WithoutEllipsis}...` ? WithoutEllipsis : T;\r\n\r\ntype CreateUnionFromCommaSeparated<T extends string> = T extends `${infer First},${infer Rest}`? First | CreateUnionFromCommaSeparated<Rest>: T;\r\n\r\nexport interface MessageCommandOptions<T extends string> {\r\n    name: string;\r\n    readableName?: string;\r\n    description: string;\r\n    aliases?: string[];\r\n    arguments?: T;\r\n    nameLocalizations?: Partial<Record<LocaleString, string>>;\r\n}\r\n\r\nexport interface IMessageCommandOptions<T extends string> extends BaseCommandOptions {\r\n    data: MessageCommandOptions<T>;\r\n    run: (message: Message, args: MessageArguments<T>) => any | Promise<any>;\r\n}\r\n\r\nexport interface IMessageCommand<T extends string> extends BaseCommand {\r\n    commandType: \"message\";\r\n    data: MessageCommandOptions<T>;\r\n    run: (message: Message, args: MessageArguments<T>) => any | Promise<any>;\r\n}\r\n\r\n// Command Interactions\r\n\r\nexport interface ISlashCommandOptions extends BaseCommandOptions {\r\n    data: SlashCommandBuilder | SlashCommandOptionsOnlyBuilder | SlashCommandSubcommandsOnlyBuilder;\r\n    run: (interaction: ChatInputCommandInteraction<\"cached\">) => any | Promise<any>;\r\n    autocomplete?: Record<string, (interaction: AutocompleteInteraction<\"cached\">, value: string) => any | Promise<any>>;\r\n}\r\n\r\nexport interface ISlashCommand extends BaseCommand {\r\n    commandType: \"slash\";\r\n    data: SlashCommandBuilder | SlashCommandOptionsOnlyBuilder | SlashCommandSubcommandsOnlyBuilder;\r\n    run: (interaction: ChatInputCommandInteraction<\"cached\">) => any | Promise<any>;\r\n    autocomplete?: Record<string, (interaction: AutocompleteInteraction<\"cached\">, value: string) => any | Promise<any>>;\r\n}\r\n\r\nexport interface IContextMenuCommandOptions<T extends \"user\" | \"message\"> extends BaseCommandOptions {\r\n    data: ContextMenuCommandBuilder;\r\n    type: T;\r\n    run: (interaction: T extends \"user\" ? UserContextMenuCommandInteraction<\"cached\"> : MessageContextMenuCommandInteraction<\"cached\">) => any | Promise<any>;\r\n}\r\n\r\nexport interface IContextMenuCommand<T extends \"user\" | \"message\"> extends BaseCommand {\r\n    commandType: T extends \"user\" ? \"contextMenuUser\" : \"contextMenuMessage\";\r\n    data: ContextMenuCommandBuilder;\r\n    type: T;\r\n    run: (interaction: T extends \"user\" ? UserContextMenuCommandInteraction<\"cached\"> : MessageContextMenuCommandInteraction<\"cached\">) => any | Promise<any>;\r\n    isUserContextMenuCommand: () => this is IContextMenuCommand<\"user\">;\r\n    isMessageContextMenuCommand: () => this is IContextMenuCommand<\"message\">;\r\n}\r\n\r\n// ID based interactions\r\n\r\nexport interface SelectMenus {\r\n    string: StringSelectMenuInteraction<\"cached\">;\r\n    user: UserSelectMenuInteraction<\"cached\">;\r\n    channel: ChannelSelectMenuInteraction<\"cached\">;\r\n    role: RoleSelectMenuInteraction<\"cached\">;\r\n    mentionable: MentionableSelectMenuInteraction<\"cached\">;\r\n}\r\n\r\nexport interface IDBasedCommandOptions<T extends string[]> extends Omit<BaseCommandOptions, \"options\"> {\r\n    id: string;\r\n    /**\r\n     * If set to true, checks if the user is the same one in the user argument.\r\n     */\r\n    user?: boolean;\r\n    arguments?: T;\r\n}\r\n\r\nexport interface IDBasedCommand<T extends string[]> extends Omit<BaseCommand, \"options\">, IDBasedCommandOptions<T> {\r\n    id: string;\r\n    /**\r\n     * If set to true, checks if the user is the same one in the user argument.\r\n     */\r\n    user?: boolean;\r\n    arguments?: T;\r\n    isSelectMenuCommand: () => this is ISelectMenuCommand<any, T>\r\n    isButtonCommand: () => this is IButtonCommand<T> \r\n    isModalCommand: () => this is IModalCommand<T>\r\n}\r\n\r\nexport interface ISelectMenuCommandOptions<X extends keyof SelectMenus, T extends string[]> extends IDBasedCommandOptions<T> {\r\n    type: X;\r\n    run: (interaction: SelectMenus[X], args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n}\r\n\r\nexport interface ISelectMenuCommand<X extends keyof SelectMenus, T extends string[]> extends IDBasedCommand<T> {\r\n    commandType: \"selectMenu\";\r\n    type: X;\r\n    run: (interaction: SelectMenus[X], args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n    isStringSelectMenuCommand: () => this is ISelectMenuCommand<\"string\", T>;\r\n    isUserSelectMenuCommand: () => this is ISelectMenuCommand<\"user\", T>;\r\n    isChannelSelectMenuCommand: () => this is ISelectMenuCommand<\"channel\", T>;\r\n    isRoleSelectMenuCommand: () => this is ISelectMenuCommand<\"role\", T>;\r\n    isMentionableSelectMenuCommand: () => this is ISelectMenuCommand<\"mentionable\", T>;\r\n}\r\n\r\nexport interface IButtonCommandOptions<T extends string[]> extends IDBasedCommandOptions<T> {\r\n    run: (interaction: ButtonInteraction<\"cached\">, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n}\r\n\r\nexport interface IButtonCommand<T extends string[]> extends IDBasedCommand<T> {\r\n    commandType: \"button\";\r\n    run: (interaction: ButtonInteraction<\"cached\">, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n}\r\n\r\nexport interface IModalCommandOptions<T extends string[]> extends IDBasedCommandOptions<T> {\r\n    run: (interaction: ModalSubmitInteraction<\"cached\">, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n}\r\n\r\nexport interface IModalCommand<T extends string[]> extends IDBasedCommand<T> {\r\n    commandType: \"modal\";\r\n    run: (interaction: ModalSubmitInteraction<\"cached\">, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n}\r\n\r\nexport type AnyCommand = MessageCommand<any> | SlashCommand | ContextMenuCommand<\"user\"> | ContextMenuCommand<\"message\"> | SelectMenuCommand<keyof SelectMenus, any> | ButtonCommand<any> | ModalCommand<any>;\r\n\r\nexport interface ICommandManager {\r\n    stores: {\r\n        slash: Collection<string, ISlashCommand>;\r\n        contextMenuUser: Collection<string, IContextMenuCommand<\"user\">>;\r\n        contextMenuMessage: Collection<string, IContextMenuCommand<\"message\">>;\r\n        message: Collection<string, IMessageCommand<any>>;\r\n        selectMenu: Collection<string, ISelectMenuCommand<keyof SelectMenus, any>>;\r\n        button: Collection<string, IButtonCommand<any>>;\r\n        modal: Collection<string, IModalCommand<any>>;\r\n    }\r\n\r\n    ratelimits: {\r\n        user: Collection<string, {\r\n            command: string;\r\n            type: \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\" | \"message\";\r\n            expires: number;\r\n        }[]>;\r\n        guild: Collection<string, {\r\n            command: string;\r\n            type: \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\" | \"message\";\r\n            expires: number;\r\n        }[]>;\r\n        channel: Collection<string, {\r\n            command: string;\r\n            type: \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\" | \"message\";\r\n            expires: number;\r\n        }[]>;\r\n        global: Collection<string, {\r\n            command: string;\r\n            type: \"slash\" | \"contextMenuUser\" | \"contextMenuMessage\" | \"message\";\r\n            expires: number;\r\n        }[]>;\r\n    }\r\n\r\n    run(intOrMsg: Interaction<\"cached\"> | Message, { commandName, precommand, postcommand, postrun, behavior, translations }: {\r\n        commandName?: string,\r\n        precommand?: (intOrMsg: Interaction<\"cached\"> | Message) => boolean,\r\n        postcommand?: (intOrMsg: Interaction<\"cached\"> | Message) => boolean,\r\n        postprocess?: (intOrMsg: Interaction<\"cached\"> | Message) => boolean,\r\n        postrun?: (intOrMsg: Interaction<\"cached\"> | Message) => boolean,\r\n        behavior?: \"preferIgnore\" | \"preferReply\" | \"auto\",\r\n        translations?: Partial<Record<\"notallowed\" | \"ratelimit\" | \"unavailable\", Partial<Record<LocaleString, string>>>>;\r\n    }): any | Promise<any>;\r\n\r\n    checkPermissions(command: MessageCommand<any> | SlashCommand | ContextMenuCommand<\"user\" | \"message\">, user: GuildMember | APIInteractionGuildMember): boolean;\r\n    \r\n    ratelimit(command: MessageCommand<any> | SlashCommand | ContextMenuCommand<any>, userId: string): boolean;\r\n\r\n    parseArgs<T extends string>(args: string, format: T): MessageArguments<T>;\r\n    parseArgs<T extends string[]>(args: string, format: T): { [K in T[number]]?: string } & { id: string; userId?: string };\r\n    parseArgs<T extends string | string[]>(args: string, format: T): Record<string, string | boolean | undefined> ;\r\n}","import { Collection, ColorResolvable, Interaction, Message } from \"discord.js\";\r\nimport { AnyCommand, Bot, Emoji } from \"..\";\r\nimport { IPluginManager } from \"../typings/plugins\";\r\nimport { Plugin } from \"../structures/plugins\";\r\n\r\nexport default class PluginManager<Configs extends Record<string, any>, Emojis extends Record<string, Emoji>, Colors extends Record<string, ColorResolvable>> implements IPluginManager {\r\n    public client: Bot<Configs, Emojis, Colors>;\r\n\r\n    constructor(client: Bot<Configs, Emojis, Colors>) {\r\n        this.client = client;\r\n    }\r\n\r\n    public store = new Collection<string, Plugin>();\r\n    \r\n    public events: IPluginManager[\"events\"] = {\r\n        prerun: {},\r\n        postrun: {}\r\n    };\r\n\r\n    public commands: IPluginManager[\"commands\"] = {\r\n        precommand: [],\r\n        postcommand: [],\r\n        postprocess: [],\r\n        postrun: []\r\n    };\r\n\r\n    register(plugin: Plugin) {\r\n        this.store.set(plugin.name, plugin);\r\n\r\n        if (\r\n            (!(plugin.enabled ?? true)) ||\r\n            (!(this.client.botOptions.enablePlugins ?? true) && plugin.enabled !== true)\r\n        ) return;\r\n\r\n        if (plugin.events) {\r\n            for (const [name, options] of Object.entries(plugin.events)) {\r\n                if (options.prerun) {\r\n                    if (!this.events.prerun[name]) this.events.prerun[name] = [];\r\n                    this.events.prerun[name].push(options.prerun);\r\n                }\r\n                if (options.postrun) {\r\n                    if (!this.events.postrun[name]) this.events.postrun[name] = [];\r\n                    this.events.prerun[name].push(options.postrun);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (plugin.commands) {\r\n            if (plugin.commands.precommand)\r\n                this.commands.precommand.push(plugin.commands!.precommand)\r\n            if (plugin.commands.postcommand)\r\n                this.commands.postcommand.push(plugin.commands!.postcommand)\r\n            if (plugin.commands.postprocess)\r\n                this.commands.postprocess.push(plugin.commands!.postprocess!)\r\n            if (plugin.commands.postrun)\r\n                this.commands.postrun.push(plugin.commands!.postrun!)\r\n        }\r\n    }\r\n}","import { ActionRowBuilder, Collection, ColorResolvable, EmbedBuilder, Message } from \"discord.js\";\r\nimport { Bot, ButtonBuilder, Emoji, IMultiPageEmbedData, IMultiPageEmbedManager } from \"..\";\r\nimport { MultiPageEmbed } from \"../structures/multipageembed\";\r\nimport { uuid } from \"@backs/utils\";\r\n\r\nexport default class MultiPageEmbedManager<Configs extends Record<string, any>, Emojis extends Record<string, Emoji>, Colors extends Record<string, ColorResolvable>> implements IMultiPageEmbedManager {\r\n    public client: Bot<Configs, Emojis, Colors>;\r\n\r\n    constructor(client: Bot<Configs, Emojis, Colors>) {\r\n        this.client = client;\r\n\r\n        this.client.on(\"interactionCreate\", async (interaction) => {\r\n            if (interaction.isButton()) {\r\n                const args = this.client.commands.parseArgs(interaction.customId, [\"command\", \"embedId\"]);\r\n\r\n                if (\r\n                    !args.command || !args.embedId ||\r\n                    (args.userId && args.userId !== interaction.user.id)\r\n                ) return await interaction.update({});\r\n                if (args.id === \"multipageembed\") {\r\n                    await interaction.deferUpdate();\r\n                    const shouldUpdate = this.handle(args.embedId, args.command!);\r\n\r\n                    if (shouldUpdate === true) {\r\n                        const handler = this.handlers.get(args.embedId)!;\r\n                        const embed = handler.embed.embeds[handler.index];\r\n                        const row = new ActionRowBuilder<ButtonBuilder>()\r\n                        if (handler.embed.jump) row.addComponents(\r\n                            new ButtonBuilder()\r\n                            .setCustomId(\"multipageembed\")\r\n                            .setUserId(handler.userId)\r\n                            .setArguments(\"jump-start\", args.embedId)\r\n                            .setEmoji(\"⏮️\")\r\n                            .setStyle(\"gray\")\r\n                            .setDisabled(handler.index === 0)\r\n                        )\r\n                        row.addComponents(\r\n                            new ButtonBuilder()\r\n                            .setCustomId(\"multipageembed\")\r\n                            .setUserId(handler.userId)\r\n                            .setArguments(\"previous\", args.embedId)\r\n                            .setEmoji(\"⏪\")\r\n                            .setStyle(\"gray\")\r\n                            .setDisabled(handler.index === 0 && !handler.embed.canLoop),\r\n                            new ButtonBuilder()\r\n                            .setCustomId(\"multipageembed\")\r\n                            .setUserId(handler.userId)\r\n                            .setArguments(\"next\", args.embedId)\r\n                            .setEmoji(\"⏩\")\r\n                            .setStyle(\"gray\")\r\n                            .setDisabled(handler.index === handler.embed.embeds.length - 1 && !handler.embed.canLoop)\r\n                        )\r\n                        if (handler.embed.jump) row.addComponents(\r\n                            new ButtonBuilder()\r\n                            .setCustomId(\"multipageembed\")\r\n                            .setUserId(handler.userId)\r\n                            .setArguments(\"jump-end\", args.embedId)\r\n                            .setEmoji(\"⏭️\")\r\n                            .setStyle(\"gray\")\r\n                            .setDisabled(handler.index === handler.embed.embeds.length - 1)\r\n                        )\r\n                        await interaction.editReply({\r\n                            embeds: [embed, ...interaction.message.embeds.slice(1)],\r\n                            components: [row, ...interaction.message.components.slice(1)]\r\n                        });\r\n                    } else if (shouldUpdate === false) {\r\n                        await interaction.editReply({});\r\n                    } else {\r\n                        await interaction.editReply({\r\n                            components: [...interaction.message.components.slice(1)]\r\n                        });\r\n                    \r\n                    }\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    public embeds: Collection<string, Omit<IMultiPageEmbedData, \"id\">> = new Collection();\r\n    private handlers: Collection<string, {\r\n        embed: MultiPageEmbed;\r\n        index: number;\r\n        expires: number;\r\n        userId: string;\r\n    }> = new Collection();\r\n\r\n    create(data: IMultiPageEmbedData, createEmbed: true, userId: string): MultiPageEmbed;\r\n    create(data: IMultiPageEmbedData, createEmbed: false): undefined;\r\n    create(data: IMultiPageEmbedData, createEmbed: boolean = true, userId?: string): MultiPageEmbed | undefined {\r\n        const embedId = data.id ?? uuid();\r\n        this.embeds.set(embedId, {\r\n            ...data,\r\n            id: undefined\r\n        } as Omit<IMultiPageEmbedData, \"id\">);\r\n\r\n        const id = uuid();\r\n        if (!createEmbed) return;\r\n        const embed = new MultiPageEmbed({\r\n            ...data,\r\n            id\r\n        });\r\n        const expires = embed.expires;\r\n        this.handlers.set(id, {\r\n            embed,\r\n            index: data.startingPage ?? 0,\r\n            expires: Date.now() + expires,\r\n            userId: userId!\r\n        });\r\n        setTimeout(() => this.handlers.delete(id), expires);\r\n        return embed;\r\n    }\r\n\r\n    get(embedId: string, userId: string) {\r\n        const embedData = this.embeds.get(embedId);\r\n        if (!embedData) return;\r\n        const id = uuid();\r\n\r\n        const embed = new MultiPageEmbed({\r\n            ...embedData,\r\n            id\r\n        });\r\n        const expires = embed.expires;\r\n        this.handlers.set(id, {\r\n            embed,\r\n            index: embedData.startingPage ?? 0,\r\n            expires: Date.now() + expires,\r\n            userId: userId!\r\n        });\r\n        setTimeout(() => this.handlers.delete(id), expires);\r\n        return embed;\r\n    }\r\n\r\n    delete(embedId: string): void {\r\n        this.embeds.delete(embedId);\r\n    }\r\n\r\n    private handle(embedId: string, command: string): boolean | undefined {\r\n        const handler = this.handlers.get(embedId);\r\n        if (!handler) return;\r\n\r\n        switch (command) {\r\n            case \"jump-start\":\r\n                if (!handler.embed.jump) return false;\r\n                handler.index = 0;\r\n                break;\r\n            case \"previous\":\r\n                if (handler.index === 0) {\r\n                    if (handler.embed.canLoop) handler.index = handler.embed.embeds.length - 1;\r\n                } else handler.index--;\r\n                break;\r\n            case \"next\":\r\n                if (handler.index === handler.embed.embeds.length - 1) {\r\n                    if (handler.embed.canLoop) handler.index = 0;\r\n                } else handler.index++;\r\n                break;\r\n            case \"jump-end\":\r\n                if (!handler.embed.jump) return false;\r\n                handler.index = handler.embed.embeds.length - 1;\r\n                break;\r\n        }\r\n\r\n        return true\r\n    }\r\n}","import { ActionRowBuilder, EmbedBuilder } from \"discord.js\";\r\nimport { IMultiPageEmbedData, IMultiPageEmbed } from \"../typings\";\r\nimport { ButtonBuilder } from \"../builders\";\r\n\r\nexport class MultiPageEmbed implements IMultiPageEmbed {\r\n    private _id: string;\r\n    private _userId?: string;\r\n    private _expires: number;\r\n    private _startingPage: number;\r\n    private _embeds: EmbedBuilder[];\r\n    private _canLoop: boolean;\r\n    private _jump: boolean;\r\n\r\n    get id() {\r\n        return this._id;\r\n    }\r\n\r\n    get userId() {\r\n        return this._userId;\r\n    }\r\n\r\n    get expires() {\r\n        return this._expires;\r\n    }\r\n\r\n    get startingPage() {\r\n        return this._startingPage;\r\n    }\r\n\r\n    get embeds() {\r\n        return this._embeds;\r\n    }\r\n\r\n    get canLoop() {\r\n        return this._canLoop;\r\n    }\r\n\r\n    get jump() {\r\n        return this._jump;\r\n    }\r\n\r\n    constructor(data: IMultiPageEmbedData) {\r\n        this._id = data.id!;\r\n        this._expires = data.expires ?? 120000;\r\n        this._startingPage = data.startingPage ?? 0;\r\n        this._embeds = data.embeds ?? [];\r\n        this._canLoop = data.canLoop ?? true;\r\n        this._jump = data.jump ?? false;\r\n    }\r\n\r\n    get components() {\r\n        const row = new ActionRowBuilder<ButtonBuilder>()\r\n        if (this.jump) row.addComponents(\r\n            new ButtonBuilder()\r\n            .setCustomId(\"multipageembed\")\r\n            .setUserId(this.userId)\r\n            .setArguments(\"jump-start\", this.id)\r\n            .setEmoji(\"⏮️\")\r\n            .setStyle(\"gray\")\r\n            .setDisabled(this.startingPage === 0)\r\n        )\r\n        row.addComponents(\r\n            new ButtonBuilder()\r\n            .setCustomId(\"multipageembed\")\r\n            .setUserId(this.userId)\r\n            .setArguments(\"previous\", this.id)\r\n            .setEmoji(\"⏪\")\r\n            .setStyle(\"gray\")\r\n            .setDisabled(this.startingPage === 0 && !this.canLoop),\r\n            new ButtonBuilder()\r\n            .setCustomId(\"multipageembed\")\r\n            .setUserId(this.userId)\r\n            .setArguments(\"next\", this.id)\r\n            .setEmoji(\"⏩\")\r\n            .setStyle(\"gray\")\r\n            .setDisabled(this.startingPage === this.embeds.length - 1 && !this.canLoop)\r\n        )\r\n        if (this.jump) row.addComponents(\r\n            new ButtonBuilder()\r\n            .setCustomId(\"multipageembed\")\r\n            .setUserId(this.userId)\r\n            .setArguments(\"jump-end\", this.id)\r\n            .setEmoji(\"⏭️\")\r\n            .setStyle(\"gray\")\r\n            .setDisabled(this.startingPage === this.embeds.length - 1)\r\n        )\r\n        return [row];\r\n    }\r\n\r\n    get page() {\r\n        return this.embeds[this.startingPage];\r\n    }\r\n}","import { \r\n    ButtonBuilder as DiscordButtonBuilder,\r\n    ButtonComponentData,\r\n    APIButtonComponent,\r\n    ButtonStyle\r\n} from \"discord.js\"\r\n\r\nexport class ButtonBuilder extends DiscordButtonBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<ButtonComponentData> | Partial<APIButtonComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    override setStyle(style: \"blurple\" | \"gray\" | \"green\" | \"red\" | \"link\" | ButtonStyle) {\r\n        if (style === \"blurple\") return super.setStyle(ButtonStyle.Primary)\r\n        else if (style === \"gray\") return super.setStyle(ButtonStyle.Secondary)\r\n        else if (style === \"green\") return super.setStyle(ButtonStyle.Success)\r\n        else if (style === \"red\") return super.setStyle(ButtonStyle.Danger)\r\n        else if (style === \"link\") return super.setStyle(ButtonStyle.Link)\r\n        else return super.setStyle(style)\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}","import { \r\n    ModalBuilder as DiscordModalBuilder,\r\n    ModalComponentData,\r\n    APIModalInteractionResponseCallbackData\r\n} from \"discord.js\"\r\n\r\nexport class ModalBuilder extends DiscordModalBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<ModalComponentData> | Partial<APIModalInteractionResponseCallbackData>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}","import {\r\n    StringSelectMenuBuilder as DiscordStringSelectMenuBuilder,\r\n    UserSelectMenuBuilder as DiscordUserSelectMenuBuilder,\r\n    RoleSelectMenuBuilder as DiscordRoleSelectMenuBuilder,\r\n    ChannelSelectMenuBuilder as DiscordChannelSelectMenuBuilder,\r\n    MentionableSelectMenuBuilder as DiscordMentionableSelectMenuBuilder,\r\n    StringSelectMenuComponentData,\r\n    APIStringSelectComponent,\r\n    UserSelectMenuComponentData,\r\n    APIUserSelectComponent,\r\n    RoleSelectMenuComponentData,\r\n    APIRoleSelectComponent,\r\n    ChannelSelectMenuComponentData,\r\n    APIChannelSelectComponent,\r\n    MentionableSelectMenuComponentData,\r\n    APIMentionableSelectComponent,\r\n} from \"discord.js\"\r\n\r\nexport class StringSelectMenuBuilder extends DiscordStringSelectMenuBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<StringSelectMenuComponentData> | Partial<APIStringSelectComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}\r\n\r\nexport class UserSelectMenuBuilder extends DiscordUserSelectMenuBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<UserSelectMenuComponentData> | Partial<APIUserSelectComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}\r\n\r\nexport class RoleSelectMenuBuilder extends DiscordRoleSelectMenuBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<RoleSelectMenuComponentData> | Partial<APIRoleSelectComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}\r\n\r\nexport class ChannelSelectMenuBuilder extends DiscordChannelSelectMenuBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<ChannelSelectMenuComponentData> | Partial<APIChannelSelectComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}\r\n\r\nexport class MentionableSelectMenuBuilder extends DiscordMentionableSelectMenuBuilder {\r\n    private customId: string;\r\n    private userId?: string;\r\n    private arguments: string[];\r\n    \r\n    constructor(data?: Partial<MentionableSelectMenuComponentData> | Partial<APIMentionableSelectComponent>) {\r\n        super(data);\r\n    }\r\n\r\n    override setCustomId(id: string) {\r\n        this.customId = id;\r\n\r\n        const customId = [this.customId, this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setUserId(id?: string) {\r\n        this.userId = id;\r\n\r\n        const customId = [this.customId ?? \"\", this.userId ?? \"\", ...(this.arguments ?? [])].join(\"/\");\r\n\r\n        return super.setCustomId(customId);\r\n    }\r\n\r\n    setArguments(...args: string[]) {\r\n        this.arguments = args;\r\n        args.unshift(this.userId ?? \"\")\r\n        args.unshift(this.customId ?? \"\")\r\n\r\n        return super.setCustomId(args.join(\"/\"));\r\n    }\r\n}","import { SlashCommandBuilder, SlashCommandOptionsOnlyBuilder, SlashCommandSubcommandsOnlyBuilder, ChatInputCommandInteraction, AutocompleteInteraction, ContextMenuCommandBuilder, MessageContextMenuCommandInteraction, UserContextMenuCommandInteraction, Message, ButtonInteraction, ModalSubmitInteraction } from \"discord.js\";\r\nimport { AdvancedCommandOptions, MessageArguments, IButtonCommand, IButtonCommandOptions, IContextMenuCommand, IContextMenuCommandOptions, IDBasedCommand, IMessageCommand, IMessageCommandOptions, IModalCommand, IModalCommandOptions, ISelectMenuCommand, ISelectMenuCommandOptions, ISlashCommand, ISlashCommandOptions, MessageCommandOptions, SelectMenus } from \"../typings/commands\";\r\n\r\nexport class MessageCommand<T extends string> implements IMessageCommand<T> {\r\n    constructor(options: IMessageCommandOptions<T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType = \"message\" as const;\r\n    data: MessageCommandOptions<T>;\r\n    run: (message: Message, args: MessageArguments<T>) => any | Promise<any>;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return false\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return false\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return false\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<T> {\r\n        return true\r\n    }\r\n}\r\n\r\nexport class SlashCommand implements ISlashCommand {\r\n    constructor(options: ISlashCommandOptions) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType = \"slash\" as const;\r\n    data: SlashCommandBuilder | SlashCommandOptionsOnlyBuilder | SlashCommandSubcommandsOnlyBuilder;\r\n    run: (interaction: ChatInputCommandInteraction) => any | Promise<any>;\r\n    autocomplete?: Record<string, (interaction: AutocompleteInteraction, value: string) => any | Promise<any>> | undefined;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return false\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return true\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return false\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<any> {\r\n        return false\r\n    }\r\n}\r\n\r\nexport class ContextMenuCommand<T extends \"user\" | \"message\"> implements IContextMenuCommand<T> {\r\n    constructor(options: IContextMenuCommandOptions<T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType: T extends \"user\" ? \"contextMenuUser\" : \"contextMenuMessage\";\r\n    data: ContextMenuCommandBuilder;\r\n    type: T;\r\n    run: (interaction: T extends \"user\" ? UserContextMenuCommandInteraction : MessageContextMenuCommandInteraction) => any | Promise<any>;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return false\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return false\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return true\r\n    }\r\n    isUserContextMenuCommand(): this is IContextMenuCommand<\"user\"> {\r\n        return this.type === \"user\"\r\n    }\r\n    isMessageContextMenuCommand(): this is IContextMenuCommand<\"message\"> {\r\n        return this.type === \"message\"\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<any> {\r\n        return false\r\n    }\r\n}\r\n\r\nexport class SelectMenuCommand<X extends keyof SelectMenus, T extends string[]> implements ISelectMenuCommand<X, T> {\r\n    constructor(options: ISelectMenuCommandOptions<X, T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType = \"selectMenu\" as const;\r\n    run: (interaction: SelectMenus[X], args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n    id: string;\r\n    type: X;\r\n    user?: boolean | undefined;\r\n    arguments?: T | undefined;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return true\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return false\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return false\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<any> {\r\n        return false\r\n    }\r\n    isSelectMenuCommand(): this is ISelectMenuCommand<X, T> {\r\n        return true\r\n    }\r\n    isButtonCommand(): this is IButtonCommand<T> {\r\n        return false\r\n    }\r\n    isModalCommand(): this is IModalCommand<T> {\r\n        return false\r\n    }\r\n    isStringSelectMenuCommand(): this is ISelectMenuCommand<\"string\", T> {\r\n        return this.type === \"string\"\r\n    }\r\n    isUserSelectMenuCommand(): this is ISelectMenuCommand<\"user\", T> {\r\n        return this.type === \"user\"\r\n    }\r\n    isChannelSelectMenuCommand(): this is ISelectMenuCommand<\"channel\", T> {\r\n        return this.type === \"channel\"\r\n    }\r\n    isRoleSelectMenuCommand(): this is ISelectMenuCommand<\"role\", T> {\r\n        return this.type === \"role\"\r\n    }\r\n    isMentionableSelectMenuCommand(): this is ISelectMenuCommand<\"mentionable\", T> {\r\n        return this.type === \"mentionable\"\r\n    }\r\n}\r\n\r\nexport class ButtonCommand<T extends string[]> implements IButtonCommand<T> {\r\n    constructor(options: IButtonCommandOptions<T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType = \"button\" as const;\r\n    run: (interaction: ButtonInteraction, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n    id: string;\r\n    user?: boolean | undefined;\r\n    arguments?: T | undefined;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return true\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return false\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return false\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<any> {\r\n        return false\r\n    }\r\n    isSelectMenuCommand(): this is ISelectMenuCommand<any, T> {\r\n        return false\r\n    }\r\n    isButtonCommand(): this is IButtonCommand<T> {\r\n        return true\r\n    }\r\n    isModalCommand(): this is IModalCommand<T> {\r\n        return false\r\n    }\r\n}\r\n\r\nexport class ModalCommand<T extends string[]> implements IModalCommand<T> {\r\n    constructor(options: IModalCommandOptions<T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    commandType = \"modal\" as const;\r\n    run: (interaction: ModalSubmitInteraction, args: Record<T[number], string | undefined>) => any | Promise<any>;\r\n    id: string;\r\n    user?: boolean | undefined;\r\n    arguments?: T | undefined;\r\n    enabled?: boolean | undefined;\r\n    options?: AdvancedCommandOptions | undefined;\r\n    isIDBased(): this is IDBasedCommand<any> {\r\n        return true\r\n    }\r\n    isSlashCommand(): this is ISlashCommand {\r\n        return false\r\n    }\r\n    isContextMenuCommand(): this is IContextMenuCommand<\"user\" | \"message\"> {\r\n        return false\r\n    }\r\n    isMessageCommand(): this is IMessageCommand<any> {\r\n        return false\r\n    }\r\n    isSelectMenuCommand(): this is ISelectMenuCommand<any, T> {\r\n        return false\r\n    }\r\n    isButtonCommand(): this is IButtonCommand<T> {\r\n        return false\r\n    }\r\n    isModalCommand(): this is IModalCommand<T> {\r\n        return true\r\n    }\r\n}","import { ClientEvents } from \"discord.js\";\r\nimport { IEvent } from \"../typings/events\";\r\n\r\nexport class Event<T extends keyof ClientEvents> implements IEvent<T> {\r\n    constructor(options: IEvent<T>) {\r\n        Object.assign(this, options);\r\n    }\r\n    name: T;\r\n    readableName?: string;\r\n    enabled?: boolean;\r\n    once?: boolean;\r\n    run: (...args: ClientEvents[T]) => any | Promise<any>;\r\n}","import { ClientEvents } from \"discord.js\";\r\nimport { IPlugin, PluginCommandOptions, PluginEventOptions } from \"../typings/plugins\";\r\n\r\nexport class Plugin implements IPlugin {\r\n    constructor(options: IPlugin) {\r\n        Object.assign(this, options);\r\n    }\r\n\r\n    name: string;\r\n    description: string;\r\n    enabled?: boolean;\r\n    version: `v${number}.${number}.${number}`;\r\n    events?: {\r\n        [name in keyof ClientEvents]: PluginEventOptions<name>\r\n    };\r\n    commands?: PluginCommandOptions | undefined;\r\n    \r\n}"],"mappings":"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","names":["colors","path","RunIn","PermissionsMode","Collection","ActionRowBuilder","Collection","ActionRowBuilder","Collection","Bot","colors","err","path","e"]}