trivious 1.5.11 → 1.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/core/client/trivious.client.cjs.map +1 -1
  2. package/dist/core/client/trivious.client.d.cts +1 -1
  3. package/dist/core/client/trivious.client.d.ts +1 -1
  4. package/dist/core/client/trivious.client.js.map +1 -1
  5. package/dist/core/commands/command.base.cjs +37 -1
  6. package/dist/core/commands/command.base.cjs.map +1 -1
  7. package/dist/core/commands/command.base.d.cts +1 -1
  8. package/dist/core/commands/command.base.d.ts +1 -1
  9. package/dist/core/commands/command.base.js +37 -1
  10. package/dist/core/commands/command.base.js.map +1 -1
  11. package/dist/core/commands/subcommand.base.cjs +36 -0
  12. package/dist/core/commands/subcommand.base.cjs.map +1 -1
  13. package/dist/core/commands/subcommand.base.d.cts +1 -1
  14. package/dist/core/commands/subcommand.base.d.ts +1 -1
  15. package/dist/core/commands/subcommand.base.js +36 -0
  16. package/dist/core/commands/subcommand.base.js.map +1 -1
  17. package/dist/core/events/clientReady.d.cts +1 -1
  18. package/dist/core/events/clientReady.d.ts +1 -1
  19. package/dist/core/events/interactionCreate.cjs.map +1 -1
  20. package/dist/core/events/interactionCreate.d.cts +1 -1
  21. package/dist/core/events/interactionCreate.d.ts +1 -1
  22. package/dist/core/events/interactionCreate.js.map +1 -1
  23. package/dist/core/registry/command.registry.d.cts +1 -1
  24. package/dist/core/registry/command.registry.d.ts +1 -1
  25. package/dist/core/registry/component.registry.d.cts +1 -1
  26. package/dist/core/registry/component.registry.d.ts +1 -1
  27. package/dist/core/registry/event.registry.d.cts +1 -1
  28. package/dist/core/registry/event.registry.d.ts +1 -1
  29. package/dist/core/registry/index.d.cts +1 -1
  30. package/dist/core/registry/index.d.ts +1 -1
  31. package/dist/core/registry/module.registry.d.cts +1 -1
  32. package/dist/core/registry/module.registry.d.ts +1 -1
  33. package/dist/{index-CfL5mpMG.d.ts → index-6Un9NsKu.d.ts} +24 -6
  34. package/dist/{index-DzD1aYla.d.cts → index-CYy6VZT0.d.cts} +24 -6
  35. package/dist/index.d.cts +1 -1
  36. package/dist/index.d.ts +1 -1
  37. package/dist/shared/typings/client.d.cts +1 -1
  38. package/dist/shared/typings/client.d.ts +1 -1
  39. package/dist/shared/typings/commands.d.cts +1 -1
  40. package/dist/shared/typings/commands.d.ts +1 -1
  41. package/dist/shared/typings/components.d.cts +1 -1
  42. package/dist/shared/typings/components.d.ts +1 -1
  43. package/dist/shared/typings/events.d.cts +1 -1
  44. package/dist/shared/typings/events.d.ts +1 -1
  45. package/dist/shared/typings/index.d.cts +1 -1
  46. package/dist/shared/typings/index.d.ts +1 -1
  47. package/dist/shared/typings/module.d.cts +1 -1
  48. package/dist/shared/typings/module.d.ts +1 -1
  49. package/dist/shared/typings/permissions.d.cts +1 -1
  50. package/dist/shared/typings/permissions.d.ts +1 -1
  51. package/dist/shared/utility/functions.d.cts +1 -1
  52. package/dist/shared/utility/functions.d.ts +1 -1
  53. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["Client","registries","path","hashCommands","exists","readFileSync","existsSync","mkdirSync","writeFileSync","REST","Routes"],"mappings":"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","file":"trivious.client.cjs","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\nimport { exists, hashCommands } from \"src/shared/utility/functions.js\";\nimport path from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\tpublic readonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\tpublic readonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst { commandHashConfig } = this._options;\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst commands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...commands.map(command => command.toJSON())];\n\n\t\tif (commandHashConfig && commandHashConfig.enabled) {\n\t\t\tconst hashFile = path.join(commandHashConfig.filePath || \"data\", \"commands.hash\");\n\t\t\tconst newHash = await hashCommands(body);\n\t\t\tlet oldHash = \"\";\n\n\t\t\tif (await exists(hashFile)) oldHash = readFileSync(hashFile, \"utf-8\");\n\t\t\tif (newHash === oldHash) {\n\t\t\t\tconsole.debug(`[Trivious] No changes in commands found, skipping deployment`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hashDirectory = path.dirname(hashFile);\n\t\t\tif (!existsSync(hashDirectory)) {\n\t\t\t\tmkdirSync(hashDirectory, { recursive: true });\n\t\t\t}\n\n\t\t\twriteFileSync(hashFile, newHash, { encoding: \"utf-8\" });\n\t\t\tconsole.debug(`[Trivious] Created new command hash: ${hashFile}`);\n\t\t}\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["Client","registries","path","hashCommands","exists","readFileSync","existsSync","mkdirSync","writeFileSync","REST","Routes"],"mappings":";;;;;;;;;;;;AAeA,MAAO,uBAAqCA,iBAAA,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQzC,aAAaC,mBAAA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,YAAY,OAAA,EAAgC;AAC3C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAA,GAAW;AAChB,IAAA,MAAM,EAAE,UAAA,EAAAA,WAAAA,EAAW,GAAI,IAAA;AACvB,IAAA,MAAMA,WAAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA;AACtC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACP,CAAA,kCAAA,EAAqCA,YAAW,QAAA,CAAS,GAAA,GAAM,IAAI,CAAA,WAAA,EAAcA,WAAAA,CAAW,MAAA,CAAO,GAAA,EAAI,CAAE,IAAI,CAAA,SAAA,EAAYA,WAAAA,CAAW,UAAA,CAAW,GAAA,EAAI,CAAE,IAAI,gBAAgBA,WAAAA,CAAW,OAAA,CAAQ,GAAA,EAAI,CAAE,IAAI,CAAA,SAAA;AAAA,KACvM;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,GAAQ;AACb,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AAC/C,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAAA,WACtC,MAAM,IAAI,KAAA,CAAM,oCAAoC,CAAA;AAAA,IAC1D;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,IAAI,CAAA;AACzB,IAAA,MAAM,KAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,IAAA,CAAK,QAAA,CAAS,cAAc,CAAC,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,GAAS;AACd,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,IAAA,CAAK,QAAA;AACnC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAS,iBAAiB,CAAA;AAC5D,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAS,cAAc,CAAA;AACtD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAO,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAEzF,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,WAAW,QAAA,CAAS,GAAA,EAAI,CAAE,MAAA,EAAQ,CAAA;AACnE,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,QAAA,CAAS,IAAI,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA;AAE1D,IAAA,IAAI,iBAAA,IAAqB,kBAAkB,OAAA,EAAS;AACnD,MAAA,MAAM,WAAWC,qBAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,QAAA,IAAY,QAAQ,eAAe,CAAA;AAChF,MAAA,MAAM,OAAA,GAAU,MAAMC,yBAAA,CAAa,IAAI,CAAA;AACvC,MAAA,IAAI,OAAA,GAAU,EAAA;AAEd,MAAA,IAAI,MAAMC,mBAAA,CAAO,QAAQ,GAAG,OAAA,GAAUC,oBAAA,CAAa,UAAU,OAAO,CAAA;AACpE,MAAA,IAAI,YAAY,OAAA,EAAS;AACxB,QAAA,OAAA,CAAQ,MAAM,CAAA,4DAAA,CAA8D,CAAA;AAC5E,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,aAAA,GAAgBH,qBAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC3C,MAAA,IAAI,CAACI,kBAAA,CAAW,aAAa,CAAA,EAAG;AAC/B,QAAAC,iBAAA,CAAU,aAAA,EAAe,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,MAC7C;AAEA,MAAAC,qBAAA,CAAc,QAAA,EAAU,OAAA,EAAS,EAAE,QAAA,EAAU,SAAS,CAAA;AACtD,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,qCAAA,EAAwC,QAAQ,CAAA,CAAE,CAAA;AAAA,IACjE;AAEA,IAAA,MAAM,IAAA,GAAO,IAAIC,eAAA,CAAK,EAAE,SAAS,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA;AACvD,IAAA,MAAM,IAAA,CAAK,IAAIC,iBAAA,CAAO,mBAAA,CAAoB,QAAQ,CAAA,EAAG,EAAE,MAAM,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,IAAA,CAAK,MAAM,CAAA,SAAA,CAAW,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,KAAA,EAAwC;AAC1D,IAAA,IAAA,CAAK,SAAS,eAAA,GAAkB,KAAA;AAAA,EACjC;AAAA,EAEA,IAAI,eAAA,GAAkB;AACrB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,eAAA,IAAmB,EAAC;AAAA,EAC1C;AACD","file":"trivious.client.cjs","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\nimport { exists, hashCommands } from \"src/shared/utility/functions.js\";\nimport path from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\treadonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\treadonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst { commandHashConfig } = this._options;\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst commands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...commands.map(command => command.toJSON())];\n\n\t\tif (commandHashConfig && commandHashConfig.enabled) {\n\t\t\tconst hashFile = path.join(commandHashConfig.filePath || \"data\", \"commands.hash\");\n\t\t\tconst newHash = await hashCommands(body);\n\t\t\tlet oldHash = \"\";\n\n\t\t\tif (await exists(hashFile)) oldHash = readFileSync(hashFile, \"utf-8\");\n\t\t\tif (newHash === oldHash) {\n\t\t\t\tconsole.debug(`[Trivious] No changes in commands found, skipping deployment`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hashDirectory = path.dirname(hashFile);\n\t\t\tif (!existsSync(hashDirectory)) {\n\t\t\t\tmkdirSync(hashDirectory, { recursive: true });\n\t\t\t}\n\n\t\t\twriteFileSync(hashFile, newHash, { encoding: \"utf-8\" });\n\t\t\tconsole.debug(`[Trivious] Created new command hash: ${hashFile}`);\n\t\t}\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { T as default } from '../../index-DzD1aYla.cjs';
1
+ export { T as default } from '../../index-CYy6VZT0.cjs';
2
2
  import 'discord.js';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
- export { T as default } from '../../index-CfL5mpMG.js';
1
+ export { T as default } from '../../index-6Un9NsKu.js';
2
2
  import 'discord.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["registries"],"mappings":"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","file":"trivious.client.js","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\nimport { exists, hashCommands } from \"src/shared/utility/functions.js\";\nimport path from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\tpublic readonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\tpublic readonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst { commandHashConfig } = this._options;\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst commands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...commands.map(command => command.toJSON())];\n\n\t\tif (commandHashConfig && commandHashConfig.enabled) {\n\t\t\tconst hashFile = path.join(commandHashConfig.filePath || \"data\", \"commands.hash\");\n\t\t\tconst newHash = await hashCommands(body);\n\t\t\tlet oldHash = \"\";\n\n\t\t\tif (await exists(hashFile)) oldHash = readFileSync(hashFile, \"utf-8\");\n\t\t\tif (newHash === oldHash) {\n\t\t\t\tconsole.debug(`[Trivious] No changes in commands found, skipping deployment`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hashDirectory = path.dirname(hashFile);\n\t\t\tif (!existsSync(hashDirectory)) {\n\t\t\t\tmkdirSync(hashDirectory, { recursive: true });\n\t\t\t}\n\n\t\t\twriteFileSync(hashFile, newHash, { encoding: \"utf-8\" });\n\t\t\tconsole.debug(`[Trivious] Created new command hash: ${hashFile}`);\n\t\t}\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["registries"],"mappings":"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","file":"trivious.client.js","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\nimport { exists, hashCommands } from \"src/shared/utility/functions.js\";\nimport path from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\treadonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\treadonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst { commandHashConfig } = this._options;\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst commands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...commands.map(command => command.toJSON())];\n\n\t\tif (commandHashConfig && commandHashConfig.enabled) {\n\t\t\tconst hashFile = path.join(commandHashConfig.filePath || \"data\", \"commands.hash\");\n\t\t\tconst newHash = await hashCommands(body);\n\t\t\tlet oldHash = \"\";\n\n\t\t\tif (await exists(hashFile)) oldHash = readFileSync(hashFile, \"utf-8\");\n\t\t\tif (newHash === oldHash) {\n\t\t\t\tconsole.debug(`[Trivious] No changes in commands found, skipping deployment`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hashDirectory = path.dirname(hashFile);\n\t\t\tif (!existsSync(hashDirectory)) {\n\t\t\t\tmkdirSync(hashDirectory, { recursive: true });\n\t\t\t}\n\n\t\t\twriteFileSync(hashFile, newHash, { encoding: \"utf-8\" });\n\t\t\tconsole.debug(`[Trivious] Created new command hash: ${hashFile}`);\n\t\t}\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
@@ -166,7 +166,7 @@ class CommandBuilder extends discord_js.SlashCommandBuilder {
166
166
  return this;
167
167
  }
168
168
  /**
169
- * Set the command as public only.
169
+ * Set the command as only.
170
170
  *
171
171
  * @public
172
172
  * @returns {this}
@@ -218,6 +218,42 @@ class CommandBuilder extends discord_js.SlashCommandBuilder {
218
218
  }
219
219
  };
220
220
  }
221
+ addAttachmentOption(input) {
222
+ super.addAttachmentOption(input);
223
+ return this;
224
+ }
225
+ addBooleanOption(input) {
226
+ super.addBooleanOption(input);
227
+ return this;
228
+ }
229
+ addChannelOption(input) {
230
+ super.addChannelOption(input);
231
+ return this;
232
+ }
233
+ addMentionableOption(input) {
234
+ super.addMentionableOption(input);
235
+ return this;
236
+ }
237
+ addIntegerOption(input) {
238
+ super.addIntegerOption(input);
239
+ return this;
240
+ }
241
+ addNumberOption(input) {
242
+ super.addNumberOption(input);
243
+ return this;
244
+ }
245
+ addRoleOption(input) {
246
+ super.addRoleOption(input);
247
+ return this;
248
+ }
249
+ addStringOption(input) {
250
+ super.addStringOption(input);
251
+ return this;
252
+ }
253
+ addUserOption(input) {
254
+ super.addUserOption(input);
255
+ return this;
256
+ }
221
257
  }
222
258
  class ContextMenuCommand extends Command {
223
259
  constructor(builder) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["hasPermission","PermissionLevel","hasPerm","SlashCommandBuilder","Collection","InteractionContextType","ContextMenuCommandBuilder"],"mappings":"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","file":"command.base.cjs","sourcesContent":["import {\n\tCollection,\n\tContextMenuCommandBuilder,\n\tGuildMember,\n\tInteractionContextType,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandBuilder,\n} from \"discord.js\";\nimport {\n\tAnyCommandBuilder,\n\tAnyCommandMetadata,\n\tCommandInteraction,\n\tCommandMetadata,\n\tContextMenuMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tSubcommand,\n} from \"src/index.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\n\n/**\n * Base class for a Command.\n *\n * @export\n * @abstract\n * @class Command\n * @typedef {Command}\n */\nexport default abstract class Command {\n\tpublic readonly data: SlashCommandBuilder | ContextMenuCommandBuilder;\n\tpublic readonly metadata: AnyCommandMetadata;\n\n\tprotected constructor(builder: AnyCommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Returns whether the command is a SlashCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is SlashCommand}\n\t */\n\tpublic isSlashCommand(this: Command): this is SlashCommand {\n\t\treturn this instanceof SlashCommand;\n\t}\n\n\t/**\n\t * Returns whether the command is a ContextMenuCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is ContextMenuCommand}\n\t */\n\tpublic isContextMenuCommand(this: Command): this is ContextMenuCommand {\n\t\treturn this instanceof ContextMenuCommand;\n\t}\n\n\t/**\n\t * Returns JSON of the command builder.\n\t *\n\t * @public\n\t * @returns {*}\n\t */\n\tpublic toJSON() {\n\t\treturn this.data.toJSON();\n\t}\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @public\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tpublic async reply(\n\t\tinteraction: CommandInteraction,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n\n\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true]\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: CommandInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tif (!interaction.inGuild()) return true;\n\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\tif (!memberHasPermission && doReply) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t});\n\t\t}\n\n\t\treturn memberHasPermission;\n\t}\n}\n\n/**\n * Base SlashCommand.\n *\n * @export\n * @abstract\n * @class SlashCommand\n * @typedef {SlashCommand}\n * @extends {Command}\n */\nexport abstract class SlashCommand extends Command {\n\tdeclare public readonly data: SlashCommandBuilder;\n\tdeclare public readonly metadata: CommandMetadata;\n\n\tprotected constructor(builder: CommandBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.\n\t *\n\t * @abstract\n\t */\n\trun?: (client: TriviousClient, interaction: ChatInputCommandInteraction) => Promise<void>;\n\n\t/**\n\t * General handler for the command and its subcommand, if applicable.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ChatInputCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ChatInputCommandInteraction) {\n\t\tconst { metadata } = this;\n\t\tconst { options } = interaction;\n\n\t\tif (this.run) {\n\t\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\tmetadata.permission,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (hasPerm) await this.run(client, interaction);\n\t\t}\n\n\t\tif (!options.getSubcommand(false)) return;\n\n\t\tconst subcommandName = options.getSubcommand();\n\t\tconst subcommand = metadata.subcommands.get(subcommandName);\n\n\t\tif (!subcommand) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: \"This subcommand no longer exists or is not registered.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tsubcommand.metadata.permission\n\t\t);\n\t\tif (!hasPerm) return;\n\n\t\tawait subcommand.execute(client, interaction);\n\t}\n}\n\n/**\n * Base CommandBuilder.\n *\n * @export\n * @class CommandBuilder\n * @typedef {CommandBuilder}\n * @extends {SlashCommandBuilder}\n */\nexport class CommandBuilder extends SlashCommandBuilder {\n\tprivate _active = true;\n\tprivate _guildOnly = false;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _subcommands = new Collection<string, Subcommand>();\n\tprivate _ephemeralReply = false;\n\tprivate _doProcessReply = false;\n\n\tpublic doProcessReply(doReply: boolean): this {\n\t\tthis._doProcessReply = doReply;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as guild only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setGuildOnly(): this {\n\t\tthis._guildOnly = true;\n\t\tthis._permission = PermissionLevel.USER;\n\t\tthis.setContexts(InteractionContextType.Guild);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as public only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._ownerOnly = true;\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tif (!this._guildOnly) return this;\n\t\tthis._permission = permission;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as CommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\tguildOnly: this._guildOnly,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tsubcommands: this._subcommands,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t\tdoProcessReply: this._doProcessReply,\n\t\t\t} satisfies CommandMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport abstract class ContextMenuCommand extends Command {\n\tdeclare public readonly data: ContextMenuCommandBuilder;\n\tdeclare public readonly metadata: ContextMenuMetadata;\n\n\tprotected constructor(builder: ContextMenuBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Function to run when the command is used.\n\t *\n\t * @abstract\n\t */\n\tabstract run: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ContextMenuCommandInteraction\n\t) => Promise<void>;\n\n\t/**\n\t * Base command handler.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ContextMenuCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ContextMenuCommandInteraction) {\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tthis.metadata.permission\n\t\t);\n\t\tif (hasPerm) await this.run(client, interaction);\n\t}\n}\n\n/**\n * Base ContextMenuBuilder.\n *\n * @export\n * @class ContextMenuBuilder\n * @typedef {ContextMenuBuilder}\n * @extends {ContextMenuCommandBuilder}\n */\nexport class ContextMenuBuilder extends ContextMenuCommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder\n\t *\n\t * @public\n\t * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as ContextMenuBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ContextMenuMetadata,\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["hasPermission","PermissionLevel","hasPerm","SlashCommandBuilder","Collection","InteractionContextType","ContextMenuCommandBuilder"],"mappings":"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","file":"command.base.cjs","sourcesContent":["import {\n\tCollection,\n\tContextMenuCommandBuilder,\n\tGuildMember,\n\tInteractionContextType,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandAttachmentOption,\n\tSlashCommandBooleanOption,\n\tSlashCommandBuilder,\n\tSlashCommandChannelOption,\n\tSlashCommandIntegerOption,\n\tSlashCommandMentionableOption,\n\tSlashCommandNumberOption,\n\tSlashCommandRoleOption,\n\tSlashCommandStringOption,\n\tSlashCommandUserOption,\n} from \"discord.js\";\nimport {\n\tAnyCommandBuilder,\n\tAnyCommandMetadata,\n\tCommandInteraction,\n\tCommandMetadata,\n\tContextMenuMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tSubcommand,\n} from \"src/index.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\n\n/**\n * Base class for a Command.\n *\n * @export\n * @abstract\n * @class Command\n * @typedef {Command}\n */\nexport default abstract class Command {\n\treadonly data: SlashCommandBuilder | ContextMenuCommandBuilder;\n\treadonly metadata: AnyCommandMetadata;\n\n\tprotected constructor(builder: AnyCommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Returns whether the command is a SlashCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is SlashCommand}\n\t */\n\tisSlashCommand(this: Command): this is SlashCommand {\n\t\treturn this instanceof SlashCommand;\n\t}\n\n\t/**\n\t * Returns whether the command is a ContextMenuCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is ContextMenuCommand}\n\t */\n\tisContextMenuCommand(this: Command): this is ContextMenuCommand {\n\t\treturn this instanceof ContextMenuCommand;\n\t}\n\n\t/**\n\t * Returns JSON of the command builder.\n\t *\n\t * @public\n\t * @returns {*}\n\t */\n\ttoJSON() {\n\t\treturn this.data.toJSON();\n\t}\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @public\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: CommandInteraction,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n\n\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true]\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: CommandInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tif (!interaction.inGuild()) return true;\n\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\tif (!memberHasPermission && doReply) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t});\n\t\t}\n\n\t\treturn memberHasPermission;\n\t}\n}\n\n/**\n * Base SlashCommand.\n *\n * @export\n * @abstract\n * @class SlashCommand\n * @typedef {SlashCommand}\n * @extends {Command}\n */\nexport abstract class SlashCommand extends Command {\n\tdeclare readonly data: SlashCommandBuilder;\n\tdeclare readonly metadata: CommandMetadata;\n\n\tprotected constructor(builder: CommandBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.\n\t *\n\t * @abstract\n\t */\n\trun?: (client: TriviousClient, interaction: ChatInputCommandInteraction) => Promise<void>;\n\n\t/**\n\t * General handler for the command and its subcommand, if applicable.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ChatInputCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tasync execute(client: TriviousClient, interaction: ChatInputCommandInteraction) {\n\t\tconst { metadata } = this;\n\t\tconst { options } = interaction;\n\n\t\tif (this.run) {\n\t\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\tmetadata.permission,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (hasPerm) await this.run(client, interaction);\n\t\t}\n\n\t\tif (!options.getSubcommand(false)) return;\n\n\t\tconst subcommandName = options.getSubcommand();\n\t\tconst subcommand = metadata.subcommands.get(subcommandName);\n\n\t\tif (!subcommand) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: \"This subcommand no longer exists or is not registered.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tsubcommand.metadata.permission\n\t\t);\n\t\tif (!hasPerm) return;\n\n\t\tawait subcommand.execute(client, interaction);\n\t}\n}\n\n/**\n * Base CommandBuilder.\n *\n * @export\n * @class CommandBuilder\n * @typedef {CommandBuilder}\n * @extends {SlashCommandBuilder}\n */\nexport class CommandBuilder extends SlashCommandBuilder {\n\tprivate _active = true;\n\tprivate _guildOnly = false;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _subcommands = new Collection<string, Subcommand>();\n\tprivate _ephemeralReply = false;\n\tprivate _doProcessReply = false;\n\n\tdoProcessReply(doReply: boolean): this {\n\t\tthis._doProcessReply = doReply;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as guild only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetGuildOnly(): this {\n\t\tthis._guildOnly = true;\n\t\tthis._permission = PermissionLevel.USER;\n\t\tthis.setContexts(InteractionContextType.Guild);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._ownerOnly = true;\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tif (!this._guildOnly) return this;\n\t\tthis._permission = permission;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as CommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\tguildOnly: this._guildOnly,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tsubcommands: this._subcommands,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t\tdoProcessReply: this._doProcessReply,\n\t\t\t} satisfies CommandMetadata,\n\t\t};\n\t}\n\n\taddAttachmentOption(\n\t\tinput:\n\t\t\t| SlashCommandAttachmentOption\n\t\t\t| ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)\n\t): this {\n\t\tsuper.addAttachmentOption(input);\n\t\treturn this;\n\t}\n\n\taddBooleanOption(\n\t\tinput:\n\t\t\t| SlashCommandBooleanOption\n\t\t\t| ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)\n\t): this {\n\t\tsuper.addBooleanOption(input);\n\t\treturn this;\n\t}\n\n\taddChannelOption(\n\t\tinput:\n\t\t\t| SlashCommandChannelOption\n\t\t\t| ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)\n\t): this {\n\t\tsuper.addChannelOption(input);\n\t\treturn this;\n\t}\n\n\taddMentionableOption(\n\t\tinput:\n\t\t\t| SlashCommandMentionableOption\n\t\t\t| ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)\n\t): this {\n\t\tsuper.addMentionableOption(input);\n\t\treturn this;\n\t}\n\n\taddIntegerOption(\n\t\tinput:\n\t\t\t| SlashCommandIntegerOption\n\t\t\t| ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)\n\t): this {\n\t\tsuper.addIntegerOption(input);\n\t\treturn this;\n\t}\n\n\taddNumberOption(\n\t\tinput:\n\t\t\t| SlashCommandNumberOption\n\t\t\t| ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)\n\t): this {\n\t\tsuper.addNumberOption(input);\n\t\treturn this;\n\t}\n\n\taddRoleOption(\n\t\tinput: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)\n\t): this {\n\t\tsuper.addRoleOption(input);\n\t\treturn this;\n\t}\n\n\taddStringOption(\n\t\tinput:\n\t\t\t| SlashCommandStringOption\n\t\t\t| ((builder: SlashCommandStringOption) => SlashCommandStringOption)\n\t): this {\n\t\tsuper.addStringOption(input);\n\t\treturn this;\n\t}\n\n\taddUserOption(\n\t\tinput: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)\n\t): this {\n\t\tsuper.addUserOption(input);\n\t\treturn this;\n\t}\n}\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport abstract class ContextMenuCommand extends Command {\n\tdeclare readonly data: ContextMenuCommandBuilder;\n\tdeclare readonly metadata: ContextMenuMetadata;\n\n\tprotected constructor(builder: ContextMenuBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Function to run when the command is used.\n\t *\n\t * @abstract\n\t */\n\tabstract run: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ContextMenuCommandInteraction\n\t) => Promise<void>;\n\n\t/**\n\t * Base command handler.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ContextMenuCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tasync execute(client: TriviousClient, interaction: ContextMenuCommandInteraction) {\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tthis.metadata.permission\n\t\t);\n\t\tif (hasPerm) await this.run(client, interaction);\n\t}\n}\n\n/**\n * Base ContextMenuBuilder.\n *\n * @export\n * @class ContextMenuBuilder\n * @typedef {ContextMenuBuilder}\n * @extends {ContextMenuCommandBuilder}\n */\nexport class ContextMenuBuilder extends ContextMenuCommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder\n\t *\n\t * @public\n\t * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as ContextMenuBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ContextMenuMetadata,\n\t\t};\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { l as CommandBuilder, n as ContextMenuBuilder, m as ContextMenuCommand, S as SlashCommand, k as default } from '../../index-DzD1aYla.cjs';
2
+ export { l as CommandBuilder, n as ContextMenuBuilder, m as ContextMenuCommand, S as SlashCommand, k as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { l as CommandBuilder, n as ContextMenuBuilder, m as ContextMenuCommand, S as SlashCommand, k as default } from '../../index-CfL5mpMG.js';
2
+ export { l as CommandBuilder, n as ContextMenuBuilder, m as ContextMenuCommand, S as SlashCommand, k as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -162,7 +162,7 @@ class CommandBuilder extends SlashCommandBuilder {
162
162
  return this;
163
163
  }
164
164
  /**
165
- * Set the command as public only.
165
+ * Set the command as only.
166
166
  *
167
167
  * @public
168
168
  * @returns {this}
@@ -214,6 +214,42 @@ class CommandBuilder extends SlashCommandBuilder {
214
214
  }
215
215
  };
216
216
  }
217
+ addAttachmentOption(input) {
218
+ super.addAttachmentOption(input);
219
+ return this;
220
+ }
221
+ addBooleanOption(input) {
222
+ super.addBooleanOption(input);
223
+ return this;
224
+ }
225
+ addChannelOption(input) {
226
+ super.addChannelOption(input);
227
+ return this;
228
+ }
229
+ addMentionableOption(input) {
230
+ super.addMentionableOption(input);
231
+ return this;
232
+ }
233
+ addIntegerOption(input) {
234
+ super.addIntegerOption(input);
235
+ return this;
236
+ }
237
+ addNumberOption(input) {
238
+ super.addNumberOption(input);
239
+ return this;
240
+ }
241
+ addRoleOption(input) {
242
+ super.addRoleOption(input);
243
+ return this;
244
+ }
245
+ addStringOption(input) {
246
+ super.addStringOption(input);
247
+ return this;
248
+ }
249
+ addUserOption(input) {
250
+ super.addUserOption(input);
251
+ return this;
252
+ }
217
253
  }
218
254
  class ContextMenuCommand extends Command {
219
255
  constructor(builder) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["hasPerm"],"mappings":"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","file":"command.base.js","sourcesContent":["import {\n\tCollection,\n\tContextMenuCommandBuilder,\n\tGuildMember,\n\tInteractionContextType,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandBuilder,\n} from \"discord.js\";\nimport {\n\tAnyCommandBuilder,\n\tAnyCommandMetadata,\n\tCommandInteraction,\n\tCommandMetadata,\n\tContextMenuMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tSubcommand,\n} from \"src/index.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\n\n/**\n * Base class for a Command.\n *\n * @export\n * @abstract\n * @class Command\n * @typedef {Command}\n */\nexport default abstract class Command {\n\tpublic readonly data: SlashCommandBuilder | ContextMenuCommandBuilder;\n\tpublic readonly metadata: AnyCommandMetadata;\n\n\tprotected constructor(builder: AnyCommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Returns whether the command is a SlashCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is SlashCommand}\n\t */\n\tpublic isSlashCommand(this: Command): this is SlashCommand {\n\t\treturn this instanceof SlashCommand;\n\t}\n\n\t/**\n\t * Returns whether the command is a ContextMenuCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is ContextMenuCommand}\n\t */\n\tpublic isContextMenuCommand(this: Command): this is ContextMenuCommand {\n\t\treturn this instanceof ContextMenuCommand;\n\t}\n\n\t/**\n\t * Returns JSON of the command builder.\n\t *\n\t * @public\n\t * @returns {*}\n\t */\n\tpublic toJSON() {\n\t\treturn this.data.toJSON();\n\t}\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @public\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tpublic async reply(\n\t\tinteraction: CommandInteraction,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n\n\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true]\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: CommandInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tif (!interaction.inGuild()) return true;\n\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\tif (!memberHasPermission && doReply) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t});\n\t\t}\n\n\t\treturn memberHasPermission;\n\t}\n}\n\n/**\n * Base SlashCommand.\n *\n * @export\n * @abstract\n * @class SlashCommand\n * @typedef {SlashCommand}\n * @extends {Command}\n */\nexport abstract class SlashCommand extends Command {\n\tdeclare public readonly data: SlashCommandBuilder;\n\tdeclare public readonly metadata: CommandMetadata;\n\n\tprotected constructor(builder: CommandBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.\n\t *\n\t * @abstract\n\t */\n\trun?: (client: TriviousClient, interaction: ChatInputCommandInteraction) => Promise<void>;\n\n\t/**\n\t * General handler for the command and its subcommand, if applicable.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ChatInputCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ChatInputCommandInteraction) {\n\t\tconst { metadata } = this;\n\t\tconst { options } = interaction;\n\n\t\tif (this.run) {\n\t\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\tmetadata.permission,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (hasPerm) await this.run(client, interaction);\n\t\t}\n\n\t\tif (!options.getSubcommand(false)) return;\n\n\t\tconst subcommandName = options.getSubcommand();\n\t\tconst subcommand = metadata.subcommands.get(subcommandName);\n\n\t\tif (!subcommand) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: \"This subcommand no longer exists or is not registered.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tsubcommand.metadata.permission\n\t\t);\n\t\tif (!hasPerm) return;\n\n\t\tawait subcommand.execute(client, interaction);\n\t}\n}\n\n/**\n * Base CommandBuilder.\n *\n * @export\n * @class CommandBuilder\n * @typedef {CommandBuilder}\n * @extends {SlashCommandBuilder}\n */\nexport class CommandBuilder extends SlashCommandBuilder {\n\tprivate _active = true;\n\tprivate _guildOnly = false;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _subcommands = new Collection<string, Subcommand>();\n\tprivate _ephemeralReply = false;\n\tprivate _doProcessReply = false;\n\n\tpublic doProcessReply(doReply: boolean): this {\n\t\tthis._doProcessReply = doReply;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as guild only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setGuildOnly(): this {\n\t\tthis._guildOnly = true;\n\t\tthis._permission = PermissionLevel.USER;\n\t\tthis.setContexts(InteractionContextType.Guild);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as public only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._ownerOnly = true;\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tif (!this._guildOnly) return this;\n\t\tthis._permission = permission;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as CommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\tguildOnly: this._guildOnly,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tsubcommands: this._subcommands,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t\tdoProcessReply: this._doProcessReply,\n\t\t\t} satisfies CommandMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport abstract class ContextMenuCommand extends Command {\n\tdeclare public readonly data: ContextMenuCommandBuilder;\n\tdeclare public readonly metadata: ContextMenuMetadata;\n\n\tprotected constructor(builder: ContextMenuBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Function to run when the command is used.\n\t *\n\t * @abstract\n\t */\n\tabstract run: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ContextMenuCommandInteraction\n\t) => Promise<void>;\n\n\t/**\n\t * Base command handler.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ContextMenuCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ContextMenuCommandInteraction) {\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tthis.metadata.permission\n\t\t);\n\t\tif (hasPerm) await this.run(client, interaction);\n\t}\n}\n\n/**\n * Base ContextMenuBuilder.\n *\n * @export\n * @class ContextMenuBuilder\n * @typedef {ContextMenuBuilder}\n * @extends {ContextMenuCommandBuilder}\n */\nexport class ContextMenuBuilder extends ContextMenuCommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder\n\t *\n\t * @public\n\t * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as ContextMenuBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ContextMenuMetadata,\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["hasPerm"],"mappings":"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","file":"command.base.js","sourcesContent":["import {\n\tCollection,\n\tContextMenuCommandBuilder,\n\tGuildMember,\n\tInteractionContextType,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandAttachmentOption,\n\tSlashCommandBooleanOption,\n\tSlashCommandBuilder,\n\tSlashCommandChannelOption,\n\tSlashCommandIntegerOption,\n\tSlashCommandMentionableOption,\n\tSlashCommandNumberOption,\n\tSlashCommandRoleOption,\n\tSlashCommandStringOption,\n\tSlashCommandUserOption,\n} from \"discord.js\";\nimport {\n\tAnyCommandBuilder,\n\tAnyCommandMetadata,\n\tCommandInteraction,\n\tCommandMetadata,\n\tContextMenuMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tSubcommand,\n} from \"src/index.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\n\n/**\n * Base class for a Command.\n *\n * @export\n * @abstract\n * @class Command\n * @typedef {Command}\n */\nexport default abstract class Command {\n\treadonly data: SlashCommandBuilder | ContextMenuCommandBuilder;\n\treadonly metadata: AnyCommandMetadata;\n\n\tprotected constructor(builder: AnyCommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Returns whether the command is a SlashCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is SlashCommand}\n\t */\n\tisSlashCommand(this: Command): this is SlashCommand {\n\t\treturn this instanceof SlashCommand;\n\t}\n\n\t/**\n\t * Returns whether the command is a ContextMenuCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is ContextMenuCommand}\n\t */\n\tisContextMenuCommand(this: Command): this is ContextMenuCommand {\n\t\treturn this instanceof ContextMenuCommand;\n\t}\n\n\t/**\n\t * Returns JSON of the command builder.\n\t *\n\t * @public\n\t * @returns {*}\n\t */\n\ttoJSON() {\n\t\treturn this.data.toJSON();\n\t}\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @public\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: CommandInteraction,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n\n\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true]\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: CommandInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tif (!interaction.inGuild()) return true;\n\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\tif (!memberHasPermission && doReply) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t});\n\t\t}\n\n\t\treturn memberHasPermission;\n\t}\n}\n\n/**\n * Base SlashCommand.\n *\n * @export\n * @abstract\n * @class SlashCommand\n * @typedef {SlashCommand}\n * @extends {Command}\n */\nexport abstract class SlashCommand extends Command {\n\tdeclare readonly data: SlashCommandBuilder;\n\tdeclare readonly metadata: CommandMetadata;\n\n\tprotected constructor(builder: CommandBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.\n\t *\n\t * @abstract\n\t */\n\trun?: (client: TriviousClient, interaction: ChatInputCommandInteraction) => Promise<void>;\n\n\t/**\n\t * General handler for the command and its subcommand, if applicable.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ChatInputCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tasync execute(client: TriviousClient, interaction: ChatInputCommandInteraction) {\n\t\tconst { metadata } = this;\n\t\tconst { options } = interaction;\n\n\t\tif (this.run) {\n\t\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\tmetadata.permission,\n\t\t\t\ttrue\n\t\t\t);\n\t\t\tif (hasPerm) await this.run(client, interaction);\n\t\t}\n\n\t\tif (!options.getSubcommand(false)) return;\n\n\t\tconst subcommandName = options.getSubcommand();\n\t\tconst subcommand = metadata.subcommands.get(subcommandName);\n\n\t\tif (!subcommand) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: \"This subcommand no longer exists or is not registered.\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tsubcommand.metadata.permission\n\t\t);\n\t\tif (!hasPerm) return;\n\n\t\tawait subcommand.execute(client, interaction);\n\t}\n}\n\n/**\n * Base CommandBuilder.\n *\n * @export\n * @class CommandBuilder\n * @typedef {CommandBuilder}\n * @extends {SlashCommandBuilder}\n */\nexport class CommandBuilder extends SlashCommandBuilder {\n\tprivate _active = true;\n\tprivate _guildOnly = false;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _subcommands = new Collection<string, Subcommand>();\n\tprivate _ephemeralReply = false;\n\tprivate _doProcessReply = false;\n\n\tdoProcessReply(doReply: boolean): this {\n\t\tthis._doProcessReply = doReply;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as guild only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetGuildOnly(): this {\n\t\tthis._guildOnly = true;\n\t\tthis._permission = PermissionLevel.USER;\n\t\tthis.setContexts(InteractionContextType.Guild);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._ownerOnly = true;\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tif (!this._guildOnly) return this;\n\t\tthis._permission = permission;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as CommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\tguildOnly: this._guildOnly,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tsubcommands: this._subcommands,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t\tdoProcessReply: this._doProcessReply,\n\t\t\t} satisfies CommandMetadata,\n\t\t};\n\t}\n\n\taddAttachmentOption(\n\t\tinput:\n\t\t\t| SlashCommandAttachmentOption\n\t\t\t| ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)\n\t): this {\n\t\tsuper.addAttachmentOption(input);\n\t\treturn this;\n\t}\n\n\taddBooleanOption(\n\t\tinput:\n\t\t\t| SlashCommandBooleanOption\n\t\t\t| ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)\n\t): this {\n\t\tsuper.addBooleanOption(input);\n\t\treturn this;\n\t}\n\n\taddChannelOption(\n\t\tinput:\n\t\t\t| SlashCommandChannelOption\n\t\t\t| ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)\n\t): this {\n\t\tsuper.addChannelOption(input);\n\t\treturn this;\n\t}\n\n\taddMentionableOption(\n\t\tinput:\n\t\t\t| SlashCommandMentionableOption\n\t\t\t| ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)\n\t): this {\n\t\tsuper.addMentionableOption(input);\n\t\treturn this;\n\t}\n\n\taddIntegerOption(\n\t\tinput:\n\t\t\t| SlashCommandIntegerOption\n\t\t\t| ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)\n\t): this {\n\t\tsuper.addIntegerOption(input);\n\t\treturn this;\n\t}\n\n\taddNumberOption(\n\t\tinput:\n\t\t\t| SlashCommandNumberOption\n\t\t\t| ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)\n\t): this {\n\t\tsuper.addNumberOption(input);\n\t\treturn this;\n\t}\n\n\taddRoleOption(\n\t\tinput: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)\n\t): this {\n\t\tsuper.addRoleOption(input);\n\t\treturn this;\n\t}\n\n\taddStringOption(\n\t\tinput:\n\t\t\t| SlashCommandStringOption\n\t\t\t| ((builder: SlashCommandStringOption) => SlashCommandStringOption)\n\t): this {\n\t\tsuper.addStringOption(input);\n\t\treturn this;\n\t}\n\n\taddUserOption(\n\t\tinput: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)\n\t): this {\n\t\tsuper.addUserOption(input);\n\t\treturn this;\n\t}\n}\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport abstract class ContextMenuCommand extends Command {\n\tdeclare readonly data: ContextMenuCommandBuilder;\n\tdeclare readonly metadata: ContextMenuMetadata;\n\n\tprotected constructor(builder: ContextMenuBuilder) {\n\t\tsuper(builder);\n\t}\n\n\t/**\n\t * Function to run when the command is used.\n\t *\n\t * @abstract\n\t */\n\tabstract run: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ContextMenuCommandInteraction\n\t) => Promise<void>;\n\n\t/**\n\t * Base command handler.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ContextMenuCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tasync execute(client: TriviousClient, interaction: ContextMenuCommandInteraction) {\n\t\tconst hasPerm = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tthis.metadata.permission\n\t\t);\n\t\tif (hasPerm) await this.run(client, interaction);\n\t}\n}\n\n/**\n * Base ContextMenuBuilder.\n *\n * @export\n * @class ContextMenuBuilder\n * @typedef {ContextMenuBuilder}\n * @extends {ContextMenuCommandBuilder}\n */\nexport class ContextMenuBuilder extends ContextMenuCommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder\n\t *\n\t * @public\n\t * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as ContextMenuBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ContextMenuMetadata,\n\t\t};\n\t}\n}\n"]}
@@ -69,6 +69,42 @@ class SubcommandBuilder extends discord_js.SlashCommandSubcommandBuilder {
69
69
  }
70
70
  };
71
71
  }
72
+ addAttachmentOption(input) {
73
+ super.addAttachmentOption(input);
74
+ return this;
75
+ }
76
+ addBooleanOption(input) {
77
+ super.addBooleanOption(input);
78
+ return this;
79
+ }
80
+ addChannelOption(input) {
81
+ super.addChannelOption(input);
82
+ return this;
83
+ }
84
+ addIntegerOption(input) {
85
+ super.addIntegerOption(input);
86
+ return this;
87
+ }
88
+ addMentionableOption(input) {
89
+ super.addMentionableOption(input);
90
+ return this;
91
+ }
92
+ addNumberOption(input) {
93
+ super.addNumberOption(input);
94
+ return this;
95
+ }
96
+ addRoleOption(input) {
97
+ super.addRoleOption(input);
98
+ return this;
99
+ }
100
+ addStringOption(input) {
101
+ super.addStringOption(input);
102
+ return this;
103
+ }
104
+ addUserOption(input) {
105
+ super.addUserOption(input);
106
+ return this;
107
+ }
72
108
  }
73
109
  class Subcommand {
74
110
  data;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/commands/subcommand.base.ts"],"names":["SlashCommandSubcommandBuilder","PermissionLevel"],"mappings":";;;;;;;AAmBO,MAAM,0BAA0BA,wCAAA,CAA8B;AAAA,EAC5D,OAAA,GAAU,IAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb,cAAcC,wBAAA,CAAgB,IAAA;AAAA,EAC9B,eAAA,GAAkB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnB,OAAA,GAAgB;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,YAAA,GAAqB;AAC3B,IAAA,IAAA,CAAK,cAAcA,wBAAA,CAAgB,SAAA;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,cAAc,UAAA,EAAmC;AACvD,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,KAAA,GAAQ;AACd,IAAA,OAAO;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACT,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,WAAW,IAAA,CAAK,UAAA;AAAA,QAChB,YAAY,IAAA,CAAK,WAAA;AAAA,QACjB,gBAAgB,IAAA,CAAK;AAAA;AACtB,KACD;AAAA,EACD;AACD;AAUA,MAAO,UAAA,CAAkC;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EAEN,YAAY,OAAA,EAA4B;AACjD,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,QAAQ,KAAA,EAAM;AACzC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,KAAA,CACL,WAAA,EACA,OAAA,EACC;AACD,IAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,QAAA,EAAU;AAChD,MAAA,MAAM,WAAA,CAAY,UAAU,OAAsC,CAAA;AAClE,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAChC,IAAA,IAAI,KAAK,QAAA,CAAS,cAAA,EAAgB,UAAA,CAAW,KAAA,GAAQ,CAAC,WAAW,CAAA;AAEjE,IAAA,MAAM,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,EACnC;AACD","file":"subcommand.base.cjs","sourcesContent":["import {\n\tCacheType,\n\tChatInputCommandInteraction,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandSubcommandBuilder,\n} from \"discord.js\";\nimport { PermissionLevel, SubcommandMetadata } from \"src/shared/typings/index.js\";\nimport { TriviousClient } from \"src/index.js\";\n\n/**\n * Base SubcommandBuilder.\n *\n * @export\n * @class SubcommandBuilder\n * @typedef {SubcommandBuilder}\n * @extends {SlashCommandSubcommandBuilder}\n */\nexport class SubcommandBuilder extends SlashCommandSubcommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the subcommand as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the subcommand as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the subcommand.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: SubcommandBuilder; metadata: SubcommandMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as SubcommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies SubcommandMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base Subcommand\n *\n * @export\n * @abstract\n * @class Subcommand\n * @typedef {Subcommand}\n */\nexport default abstract class Subcommand {\n\tpublic readonly data: SubcommandBuilder;\n\tpublic readonly metadata: SubcommandMetadata;\n\n\tprotected constructor(builder: SubcommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Function to execute the subcommand.\n\t *\n\t * @abstract\n\t * @readonly\n\t * @type {(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t * \t) => Promise<void>}\n\t */\n\tabstract readonly execute: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t) => Promise<void>;\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @async\n\t * @param {ChatInputCommandInteraction<CacheType>} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: ChatInputCommandInteraction<CacheType>,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/commands/subcommand.base.ts"],"names":["SlashCommandSubcommandBuilder","PermissionLevel"],"mappings":"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","file":"subcommand.base.cjs","sourcesContent":["import {\n\tCacheType,\n\tChatInputCommandInteraction,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandAttachmentOption,\n\tSlashCommandBooleanOption,\n\tSlashCommandChannelOption,\n\tSlashCommandIntegerOption,\n\tSlashCommandMentionableOption,\n\tSlashCommandNumberOption,\n\tSlashCommandRoleOption,\n\tSlashCommandStringOption,\n\tSlashCommandSubcommandBuilder,\n\tSlashCommandUserOption,\n} from \"discord.js\";\nimport { PermissionLevel, SubcommandMetadata } from \"src/shared/typings/index.js\";\nimport { TriviousClient } from \"src/index.js\";\n\n/**\n * Base SubcommandBuilder.\n *\n * @export\n * @class SubcommandBuilder\n * @typedef {SubcommandBuilder}\n * @extends {SlashCommandSubcommandBuilder}\n */\nexport class SubcommandBuilder extends SlashCommandSubcommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the subcommand as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the subcommand as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the subcommand.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: SubcommandBuilder; metadata: SubcommandMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as SubcommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies SubcommandMetadata,\n\t\t};\n\t}\n\n\taddAttachmentOption(\n\t\tinput:\n\t\t\t| SlashCommandAttachmentOption\n\t\t\t| ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)\n\t): this {\n\t\tsuper.addAttachmentOption(input);\n\t\treturn this;\n\t}\n\n\taddBooleanOption(\n\t\tinput:\n\t\t\t| SlashCommandBooleanOption\n\t\t\t| ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)\n\t): this {\n\t\tsuper.addBooleanOption(input);\n\t\treturn this;\n\t}\n\n\taddChannelOption(\n\t\tinput:\n\t\t\t| SlashCommandChannelOption\n\t\t\t| ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)\n\t): this {\n\t\tsuper.addChannelOption(input);\n\t\treturn this;\n\t}\n\n\taddIntegerOption(\n\t\tinput:\n\t\t\t| SlashCommandIntegerOption\n\t\t\t| ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)\n\t): this {\n\t\tsuper.addIntegerOption(input);\n\t\treturn this;\n\t}\n\n\taddMentionableOption(\n\t\tinput:\n\t\t\t| SlashCommandMentionableOption\n\t\t\t| ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)\n\t): this {\n\t\tsuper.addMentionableOption(input);\n\t\treturn this;\n\t}\n\n\taddNumberOption(\n\t\tinput:\n\t\t\t| SlashCommandNumberOption\n\t\t\t| ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)\n\t): this {\n\t\tsuper.addNumberOption(input);\n\t\treturn this;\n\t}\n\n\taddRoleOption(\n\t\tinput: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)\n\t): this {\n\t\tsuper.addRoleOption(input);\n\t\treturn this;\n\t}\n\n\taddStringOption(\n\t\tinput:\n\t\t\t| SlashCommandStringOption\n\t\t\t| ((builder: SlashCommandStringOption) => SlashCommandStringOption)\n\t): this {\n\t\tsuper.addStringOption(input);\n\t\treturn this;\n\t}\n\n\taddUserOption(\n\t\tinput: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)\n\t): this {\n\t\tsuper.addUserOption(input);\n\t\treturn this;\n\t}\n}\n\n/**\n * Base Subcommand\n *\n * @export\n * @abstract\n * @class Subcommand\n * @typedef {Subcommand}\n */\nexport default abstract class Subcommand {\n\treadonly data: SubcommandBuilder;\n\treadonly metadata: SubcommandMetadata;\n\n\tprotected constructor(builder: SubcommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Function to execute the subcommand.\n\t *\n\t * @abstract\n\t * @readonly\n\t * @type {(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t * \t) => Promise<void>}\n\t */\n\tabstract readonly execute: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t) => Promise<void>;\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @async\n\t * @param {ChatInputCommandInteraction<CacheType>} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: ChatInputCommandInteraction<CacheType>,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { p as SubcommandBuilder, o as default } from '../../index-DzD1aYla.cjs';
2
+ export { p as SubcommandBuilder, o as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { p as SubcommandBuilder, o as default } from '../../index-CfL5mpMG.js';
2
+ export { p as SubcommandBuilder, o as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -65,6 +65,42 @@ class SubcommandBuilder extends SlashCommandSubcommandBuilder {
65
65
  }
66
66
  };
67
67
  }
68
+ addAttachmentOption(input) {
69
+ super.addAttachmentOption(input);
70
+ return this;
71
+ }
72
+ addBooleanOption(input) {
73
+ super.addBooleanOption(input);
74
+ return this;
75
+ }
76
+ addChannelOption(input) {
77
+ super.addChannelOption(input);
78
+ return this;
79
+ }
80
+ addIntegerOption(input) {
81
+ super.addIntegerOption(input);
82
+ return this;
83
+ }
84
+ addMentionableOption(input) {
85
+ super.addMentionableOption(input);
86
+ return this;
87
+ }
88
+ addNumberOption(input) {
89
+ super.addNumberOption(input);
90
+ return this;
91
+ }
92
+ addRoleOption(input) {
93
+ super.addRoleOption(input);
94
+ return this;
95
+ }
96
+ addStringOption(input) {
97
+ super.addStringOption(input);
98
+ return this;
99
+ }
100
+ addUserOption(input) {
101
+ super.addUserOption(input);
102
+ return this;
103
+ }
68
104
  }
69
105
  class Subcommand {
70
106
  data;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/commands/subcommand.base.ts"],"names":[],"mappings":";;;AAmBO,MAAM,0BAA0B,6BAAA,CAA8B;AAAA,EAC5D,OAAA,GAAU,IAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb,cAAc,eAAA,CAAgB,IAAA;AAAA,EAC9B,eAAA,GAAkB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnB,OAAA,GAAgB;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,YAAA,GAAqB;AAC3B,IAAA,IAAA,CAAK,cAAc,eAAA,CAAgB,SAAA;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,cAAc,UAAA,EAAmC;AACvD,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,KAAA,GAAQ;AACd,IAAA,OAAO;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACT,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,WAAW,IAAA,CAAK,UAAA;AAAA,QAChB,YAAY,IAAA,CAAK,WAAA;AAAA,QACjB,gBAAgB,IAAA,CAAK;AAAA;AACtB,KACD;AAAA,EACD;AACD;AAUA,MAAO,UAAA,CAAkC;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EAEN,YAAY,OAAA,EAA4B;AACjD,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,QAAQ,KAAA,EAAM;AACzC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,KAAA,CACL,WAAA,EACA,OAAA,EACC;AACD,IAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,QAAA,EAAU;AAChD,MAAA,MAAM,WAAA,CAAY,UAAU,OAAsC,CAAA;AAClE,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAChC,IAAA,IAAI,KAAK,QAAA,CAAS,cAAA,EAAgB,UAAA,CAAW,KAAA,GAAQ,CAAC,WAAW,CAAA;AAEjE,IAAA,MAAM,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,EACnC;AACD","file":"subcommand.base.js","sourcesContent":["import {\n\tCacheType,\n\tChatInputCommandInteraction,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandSubcommandBuilder,\n} from \"discord.js\";\nimport { PermissionLevel, SubcommandMetadata } from \"src/shared/typings/index.js\";\nimport { TriviousClient } from \"src/index.js\";\n\n/**\n * Base SubcommandBuilder.\n *\n * @export\n * @class SubcommandBuilder\n * @typedef {SubcommandBuilder}\n * @extends {SlashCommandSubcommandBuilder}\n */\nexport class SubcommandBuilder extends SlashCommandSubcommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the subcommand as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the subcommand as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the subcommand.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: SubcommandBuilder; metadata: SubcommandMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as SubcommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies SubcommandMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base Subcommand\n *\n * @export\n * @abstract\n * @class Subcommand\n * @typedef {Subcommand}\n */\nexport default abstract class Subcommand {\n\tpublic readonly data: SubcommandBuilder;\n\tpublic readonly metadata: SubcommandMetadata;\n\n\tprotected constructor(builder: SubcommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Function to execute the subcommand.\n\t *\n\t * @abstract\n\t * @readonly\n\t * @type {(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t * \t) => Promise<void>}\n\t */\n\tabstract readonly execute: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t) => Promise<void>;\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @async\n\t * @param {ChatInputCommandInteraction<CacheType>} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: ChatInputCommandInteraction<CacheType>,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/core/commands/subcommand.base.ts"],"names":[],"mappings":"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","file":"subcommand.base.js","sourcesContent":["import {\n\tCacheType,\n\tChatInputCommandInteraction,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandAttachmentOption,\n\tSlashCommandBooleanOption,\n\tSlashCommandChannelOption,\n\tSlashCommandIntegerOption,\n\tSlashCommandMentionableOption,\n\tSlashCommandNumberOption,\n\tSlashCommandRoleOption,\n\tSlashCommandStringOption,\n\tSlashCommandSubcommandBuilder,\n\tSlashCommandUserOption,\n} from \"discord.js\";\nimport { PermissionLevel, SubcommandMetadata } from \"src/shared/typings/index.js\";\nimport { TriviousClient } from \"src/index.js\";\n\n/**\n * Base SubcommandBuilder.\n *\n * @export\n * @class SubcommandBuilder\n * @typedef {SubcommandBuilder}\n * @extends {SlashCommandSubcommandBuilder}\n */\nexport class SubcommandBuilder extends SlashCommandSubcommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the subcommand as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tdisable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the subcommand as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the subcommand.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tsetPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tsetEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: SubcommandBuilder; metadata: SubcommandMetadata; }}\n\t */\n\tbuild() {\n\t\treturn {\n\t\t\tdata: this as SubcommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies SubcommandMetadata,\n\t\t};\n\t}\n\n\taddAttachmentOption(\n\t\tinput:\n\t\t\t| SlashCommandAttachmentOption\n\t\t\t| ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)\n\t): this {\n\t\tsuper.addAttachmentOption(input);\n\t\treturn this;\n\t}\n\n\taddBooleanOption(\n\t\tinput:\n\t\t\t| SlashCommandBooleanOption\n\t\t\t| ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)\n\t): this {\n\t\tsuper.addBooleanOption(input);\n\t\treturn this;\n\t}\n\n\taddChannelOption(\n\t\tinput:\n\t\t\t| SlashCommandChannelOption\n\t\t\t| ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)\n\t): this {\n\t\tsuper.addChannelOption(input);\n\t\treturn this;\n\t}\n\n\taddIntegerOption(\n\t\tinput:\n\t\t\t| SlashCommandIntegerOption\n\t\t\t| ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)\n\t): this {\n\t\tsuper.addIntegerOption(input);\n\t\treturn this;\n\t}\n\n\taddMentionableOption(\n\t\tinput:\n\t\t\t| SlashCommandMentionableOption\n\t\t\t| ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)\n\t): this {\n\t\tsuper.addMentionableOption(input);\n\t\treturn this;\n\t}\n\n\taddNumberOption(\n\t\tinput:\n\t\t\t| SlashCommandNumberOption\n\t\t\t| ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)\n\t): this {\n\t\tsuper.addNumberOption(input);\n\t\treturn this;\n\t}\n\n\taddRoleOption(\n\t\tinput: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)\n\t): this {\n\t\tsuper.addRoleOption(input);\n\t\treturn this;\n\t}\n\n\taddStringOption(\n\t\tinput:\n\t\t\t| SlashCommandStringOption\n\t\t\t| ((builder: SlashCommandStringOption) => SlashCommandStringOption)\n\t): this {\n\t\tsuper.addStringOption(input);\n\t\treturn this;\n\t}\n\n\taddUserOption(\n\t\tinput: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)\n\t): this {\n\t\tsuper.addUserOption(input);\n\t\treturn this;\n\t}\n}\n\n/**\n * Base Subcommand\n *\n * @export\n * @abstract\n * @class Subcommand\n * @typedef {Subcommand}\n */\nexport default abstract class Subcommand {\n\treadonly data: SubcommandBuilder;\n\treadonly metadata: SubcommandMetadata;\n\n\tprotected constructor(builder: SubcommandBuilder) {\n\t\tconst { data, metadata } = builder.build();\n\t\tthis.data = data;\n\t\tthis.metadata = metadata;\n\t}\n\n\t/**\n\t * Function to execute the subcommand.\n\t *\n\t * @abstract\n\t * @readonly\n\t * @type {(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t * \t) => Promise<void>}\n\t */\n\tabstract readonly execute: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction<CacheType>\n\t) => Promise<void>;\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @async\n\t * @param {ChatInputCommandInteraction<CacheType>} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: ChatInputCommandInteraction<CacheType>,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied || interaction.deferred) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { T as TriviousClient } from '../../index-DzD1aYla.cjs';
2
+ import { T as TriviousClient } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { T as TriviousClient } from '../../index-CfL5mpMG.js';
2
+ import { T as TriviousClient } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
5
5
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":["hasPermission","deconstructCustomId","ComponentType","ButtonInteraction","ModalSubmitInteraction"],"mappings":"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","file":"interactionCreate.cjs","sourcesContent":["import { ButtonInteraction, GuildMember, ModalSubmitInteraction } from \"discord.js\";\nimport {\n\tComponentInteraction,\n\tComponentType,\n\tdeconstructCustomId,\n\tEvent,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport Command from \"../commands/command.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\n\nasync function validateComponentGuildPermission(\n\tclient: TriviousClient,\n\tinteraction: ComponentInteraction,\n\tpermission: PermissionLevel\n) {\n\tif (interaction.guild) {\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\t\treturn memberHasPermission;\n\t}\n\n\treturn false;\n}\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, {\n\t\t\t\t\tcontent:\n\t\t\t\t\t\t\"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ((command.isSlashCommand() && command.metadata.doProcessReply) || command.isContextMenuCommand()) {\n\t\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\t\t\t}\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { compType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (compType === ComponentType.Button && !(interaction instanceof ButtonInteraction)) return;\n\t\t\tif (compType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags && tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.permission;\n\t\t\tconst hasPermission = await validateComponentGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
1
+ {"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":["hasPermission","deconstructCustomId","ComponentType","ButtonInteraction","ModalSubmitInteraction"],"mappings":"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","file":"interactionCreate.cjs","sourcesContent":["import { ButtonInteraction, GuildMember, ModalSubmitInteraction } from \"discord.js\";\nimport {\n\tComponentInteraction,\n\tComponentType,\n\tdeconstructCustomId,\n\tEvent,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport Command from \"../commands/command.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\n\nasync function validateComponentGuildPermission(\n\tclient: TriviousClient,\n\tinteraction: ComponentInteraction,\n\tpermission: PermissionLevel\n) {\n\tif (interaction.guild) {\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\t\treturn memberHasPermission;\n\t}\n\n\treturn false;\n}\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, {\n\t\t\t\t\tcontent:\n\t\t\t\t\t\t\"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(command.isSlashCommand() && command.metadata.doProcessReply) ||\n\t\t\t\tcommand.isContextMenuCommand()\n\t\t\t) {\n\t\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\t\t\t}\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { compType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (compType === ComponentType.Button && !(interaction instanceof ButtonInteraction)) return;\n\t\t\tif (compType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags && tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.permission;\n\t\t\tconst hasPermission = await validateComponentGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { T as TriviousClient } from '../../index-DzD1aYla.cjs';
2
+ import { T as TriviousClient } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { T as TriviousClient } from '../../index-CfL5mpMG.js';
2
+ import { T as TriviousClient } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
5
5
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":["hasPermission"],"mappings":"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","file":"interactionCreate.js","sourcesContent":["import { ButtonInteraction, GuildMember, ModalSubmitInteraction } from \"discord.js\";\nimport {\n\tComponentInteraction,\n\tComponentType,\n\tdeconstructCustomId,\n\tEvent,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport Command from \"../commands/command.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\n\nasync function validateComponentGuildPermission(\n\tclient: TriviousClient,\n\tinteraction: ComponentInteraction,\n\tpermission: PermissionLevel\n) {\n\tif (interaction.guild) {\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\t\treturn memberHasPermission;\n\t}\n\n\treturn false;\n}\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, {\n\t\t\t\t\tcontent:\n\t\t\t\t\t\t\"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ((command.isSlashCommand() && command.metadata.doProcessReply) || command.isContextMenuCommand()) {\n\t\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\t\t\t}\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { compType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (compType === ComponentType.Button && !(interaction instanceof ButtonInteraction)) return;\n\t\t\tif (compType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags && tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.permission;\n\t\t\tconst hasPermission = await validateComponentGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
1
+ {"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":["hasPermission"],"mappings":"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","file":"interactionCreate.js","sourcesContent":["import { ButtonInteraction, GuildMember, ModalSubmitInteraction } from \"discord.js\";\nimport {\n\tComponentInteraction,\n\tComponentType,\n\tdeconstructCustomId,\n\tEvent,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport Command from \"../commands/command.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\n\nasync function validateComponentGuildPermission(\n\tclient: TriviousClient,\n\tinteraction: ComponentInteraction,\n\tpermission: PermissionLevel\n) {\n\tif (interaction.guild) {\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\t\treturn memberHasPermission;\n\t}\n\n\treturn false;\n}\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, {\n\t\t\t\t\tcontent:\n\t\t\t\t\t\t\"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(command.isSlashCommand() && command.metadata.doProcessReply) ||\n\t\t\t\tcommand.isContextMenuCommand()\n\t\t\t) {\n\t\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\t\t\t}\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { compType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (compType === ComponentType.Button && !(interaction instanceof ButtonInteraction)) return;\n\t\t\tif (compType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags && tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.permission;\n\t\t\tconst hasPermission = await validateComponentGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { C as default } from '../../index-DzD1aYla.cjs';
2
+ export { C as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { C as default } from '../../index-CfL5mpMG.js';
2
+ export { C as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { a as default } from '../../index-DzD1aYla.cjs';
2
+ export { a as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { a as default } from '../../index-CfL5mpMG.js';
2
+ export { a as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { E as default } from '../../index-DzD1aYla.cjs';
2
+ export { E as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { E as default } from '../../index-CfL5mpMG.js';
2
+ export { E as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -1,4 +1,4 @@
1
- import { C as CommandRegistry, a as ComponentRegistry, E as EventRegistry, M as ModuleRegistry, b as TriviousClientOptions, T as TriviousClient } from '../../index-DzD1aYla.cjs';
1
+ import { C as CommandRegistry, a as ComponentRegistry, E as EventRegistry, M as ModuleRegistry, b as TriviousClientOptions, T as TriviousClient } from '../../index-CYy6VZT0.cjs';
2
2
  import '../../shared/typings/registry.cjs';
3
3
  import 'discord.js';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
- import { C as CommandRegistry, a as ComponentRegistry, E as EventRegistry, M as ModuleRegistry, b as TriviousClientOptions, T as TriviousClient } from '../../index-CfL5mpMG.js';
1
+ import { C as CommandRegistry, a as ComponentRegistry, E as EventRegistry, M as ModuleRegistry, b as TriviousClientOptions, T as TriviousClient } from '../../index-6Un9NsKu.js';
2
2
  import '../../shared/typings/registry.js';
3
3
  import 'discord.js';
4
4
  import '../builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { M as default } from '../../index-DzD1aYla.cjs';
2
+ export { M as default } from '../../index-CYy6VZT0.cjs';
3
3
  import '../../shared/typings/registry.cjs';
4
4
  import '../builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { M as default } from '../../index-CfL5mpMG.js';
2
+ export { M as default } from '../../index-6Un9NsKu.js';
3
3
  import '../../shared/typings/registry.js';
4
4
  import '../builders/util.builders.js';
@@ -1,6 +1,6 @@
1
1
  import { BaseRegistry } from './shared/typings/registry.js';
2
2
  import * as discord_js from 'discord.js';
3
- import { GuildMember, AnySelectMenuInteraction, CacheType, ButtonInteraction as ButtonInteraction$1, ModalSubmitInteraction as ModalSubmitInteraction$1, SlashCommandBuilder, ContextMenuCommandBuilder, Collection, MessagePayload, InteractionEditReplyOptions, InteractionReplyOptions, SlashCommandSubcommandBuilder, ChatInputCommandInteraction as ChatInputCommandInteraction$1, ClientOptions, ClientEvents, Client, StringSelectMenuInteraction as StringSelectMenuInteraction$1, ContextMenuCommandInteraction as ContextMenuCommandInteraction$1 } from 'discord.js';
3
+ import { GuildMember, AnySelectMenuInteraction, CacheType, ButtonInteraction as ButtonInteraction$1, ModalSubmitInteraction as ModalSubmitInteraction$1, SlashCommandBuilder, ContextMenuCommandBuilder, Collection, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandChannelOption, SlashCommandMentionableOption, SlashCommandIntegerOption, SlashCommandNumberOption, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandUserOption, MessagePayload, InteractionEditReplyOptions, InteractionReplyOptions, SlashCommandSubcommandBuilder, ChatInputCommandInteraction as ChatInputCommandInteraction$1, ClientOptions, ClientEvents, Client, StringSelectMenuInteraction as StringSelectMenuInteraction$1, ContextMenuCommandInteraction as ContextMenuCommandInteraction$1 } from 'discord.js';
4
4
  import './core/builders/util.builders.js';
5
5
 
6
6
  /**
@@ -219,7 +219,7 @@ declare class CommandBuilder extends SlashCommandBuilder {
219
219
  */
220
220
  setGuildOnly(): this;
221
221
  /**
222
- * Set the command as public only.
222
+ * Set the command as only.
223
223
  *
224
224
  * @public
225
225
  * @returns {this}
@@ -258,6 +258,15 @@ declare class CommandBuilder extends SlashCommandBuilder {
258
258
  doProcessReply: boolean;
259
259
  };
260
260
  };
261
+ addAttachmentOption(input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)): this;
262
+ addBooleanOption(input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)): this;
263
+ addChannelOption(input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)): this;
264
+ addMentionableOption(input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)): this;
265
+ addIntegerOption(input: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)): this;
266
+ addNumberOption(input: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)): this;
267
+ addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)): this;
268
+ addStringOption(input: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption)): this;
269
+ addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)): this;
261
270
  }
262
271
  /**
263
272
  * Base ContextMenuCommand.
@@ -405,6 +414,15 @@ declare class SubcommandBuilder extends SlashCommandSubcommandBuilder {
405
414
  ephemeralReply: boolean;
406
415
  };
407
416
  };
417
+ addAttachmentOption(input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)): this;
418
+ addBooleanOption(input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)): this;
419
+ addChannelOption(input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)): this;
420
+ addIntegerOption(input: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)): this;
421
+ addMentionableOption(input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)): this;
422
+ addNumberOption(input: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)): this;
423
+ addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)): this;
424
+ addStringOption(input: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption)): this;
425
+ addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)): this;
408
426
  }
409
427
  /**
410
428
  * Base Subcommand
@@ -492,10 +510,10 @@ interface CommandMetadata {
492
510
  */
493
511
  ephemeralReply: boolean;
494
512
  /**
495
- * Whether the interaction is automatically replied to with "Processing command."
496
- *
497
- * @type {boolean}
498
- */
513
+ * Whether the interaction is automatically replied to with "Processing command."
514
+ *
515
+ * @type {boolean}
516
+ */
499
517
  doProcessReply: boolean;
500
518
  }
501
519
  /**
@@ -1,6 +1,6 @@
1
1
  import { BaseRegistry } from './shared/typings/registry.cjs';
2
2
  import * as discord_js from 'discord.js';
3
- import { GuildMember, AnySelectMenuInteraction, CacheType, ButtonInteraction as ButtonInteraction$1, ModalSubmitInteraction as ModalSubmitInteraction$1, SlashCommandBuilder, ContextMenuCommandBuilder, Collection, MessagePayload, InteractionEditReplyOptions, InteractionReplyOptions, SlashCommandSubcommandBuilder, ChatInputCommandInteraction as ChatInputCommandInteraction$1, ClientOptions, ClientEvents, Client, StringSelectMenuInteraction as StringSelectMenuInteraction$1, ContextMenuCommandInteraction as ContextMenuCommandInteraction$1 } from 'discord.js';
3
+ import { GuildMember, AnySelectMenuInteraction, CacheType, ButtonInteraction as ButtonInteraction$1, ModalSubmitInteraction as ModalSubmitInteraction$1, SlashCommandBuilder, ContextMenuCommandBuilder, Collection, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandChannelOption, SlashCommandMentionableOption, SlashCommandIntegerOption, SlashCommandNumberOption, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandUserOption, MessagePayload, InteractionEditReplyOptions, InteractionReplyOptions, SlashCommandSubcommandBuilder, ChatInputCommandInteraction as ChatInputCommandInteraction$1, ClientOptions, ClientEvents, Client, StringSelectMenuInteraction as StringSelectMenuInteraction$1, ContextMenuCommandInteraction as ContextMenuCommandInteraction$1 } from 'discord.js';
4
4
  import './core/builders/util.builders.cjs';
5
5
 
6
6
  /**
@@ -219,7 +219,7 @@ declare class CommandBuilder extends SlashCommandBuilder {
219
219
  */
220
220
  setGuildOnly(): this;
221
221
  /**
222
- * Set the command as public only.
222
+ * Set the command as only.
223
223
  *
224
224
  * @public
225
225
  * @returns {this}
@@ -258,6 +258,15 @@ declare class CommandBuilder extends SlashCommandBuilder {
258
258
  doProcessReply: boolean;
259
259
  };
260
260
  };
261
+ addAttachmentOption(input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)): this;
262
+ addBooleanOption(input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)): this;
263
+ addChannelOption(input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)): this;
264
+ addMentionableOption(input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)): this;
265
+ addIntegerOption(input: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)): this;
266
+ addNumberOption(input: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)): this;
267
+ addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)): this;
268
+ addStringOption(input: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption)): this;
269
+ addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)): this;
261
270
  }
262
271
  /**
263
272
  * Base ContextMenuCommand.
@@ -405,6 +414,15 @@ declare class SubcommandBuilder extends SlashCommandSubcommandBuilder {
405
414
  ephemeralReply: boolean;
406
415
  };
407
416
  };
417
+ addAttachmentOption(input: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption)): this;
418
+ addBooleanOption(input: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption)): this;
419
+ addChannelOption(input: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption)): this;
420
+ addIntegerOption(input: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption)): this;
421
+ addMentionableOption(input: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption)): this;
422
+ addNumberOption(input: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption)): this;
423
+ addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)): this;
424
+ addStringOption(input: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption)): this;
425
+ addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)): this;
408
426
  }
409
427
  /**
410
428
  * Base Subcommand
@@ -492,10 +510,10 @@ interface CommandMetadata {
492
510
  */
493
511
  ephemeralReply: boolean;
494
512
  /**
495
- * Whether the interaction is automatically replied to with "Processing command."
496
- *
497
- * @type {boolean}
498
- */
513
+ * Whether the interaction is automatically replied to with "Processing command."
514
+ *
515
+ * @type {boolean}
516
+ */
499
517
  doProcessReply: boolean;
500
518
  }
501
519
  /**
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, B as ButtonInteraction, y as ChatInputCommandInteraction, k as Command, l as CommandBuilder, q as CommandInteraction, r as CommandMetadata, C as CommandRegistry, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, a as ComponentRegistry, e as ComponentType, n as ContextMenuBuilder, m as ContextMenuCommand, F as ContextMenuCommandInteraction, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, D as ModalSubmitInteraction, x as Module, P as PermissionLevel, S as SlashCommand, z as StringSelectMenuInteraction, o as Subcommand, p as SubcommandBuilder, s as SubcommandMetadata, T as TriviousClient, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from './index-DzD1aYla.cjs';
2
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, B as ButtonInteraction, y as ChatInputCommandInteraction, k as Command, l as CommandBuilder, q as CommandInteraction, r as CommandMetadata, C as CommandRegistry, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, a as ComponentRegistry, e as ComponentType, n as ContextMenuBuilder, m as ContextMenuCommand, F as ContextMenuCommandInteraction, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, D as ModalSubmitInteraction, x as Module, P as PermissionLevel, S as SlashCommand, z as StringSelectMenuInteraction, o as Subcommand, p as SubcommandBuilder, s as SubcommandMetadata, T as TriviousClient, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from './index-CYy6VZT0.cjs';
3
3
  export { createActionRow, createEmbed } from './core/builders/util.builders.cjs';
4
4
  export { BaseRegistry } from './shared/typings/registry.cjs';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, B as ButtonInteraction, y as ChatInputCommandInteraction, k as Command, l as CommandBuilder, q as CommandInteraction, r as CommandMetadata, C as CommandRegistry, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, a as ComponentRegistry, e as ComponentType, n as ContextMenuBuilder, m as ContextMenuCommand, F as ContextMenuCommandInteraction, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, D as ModalSubmitInteraction, x as Module, P as PermissionLevel, S as SlashCommand, z as StringSelectMenuInteraction, o as Subcommand, p as SubcommandBuilder, s as SubcommandMetadata, T as TriviousClient, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from './index-CfL5mpMG.js';
2
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, B as ButtonInteraction, y as ChatInputCommandInteraction, k as Command, l as CommandBuilder, q as CommandInteraction, r as CommandMetadata, C as CommandRegistry, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, a as ComponentRegistry, e as ComponentType, n as ContextMenuBuilder, m as ContextMenuCommand, F as ContextMenuCommandInteraction, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, D as ModalSubmitInteraction, x as Module, P as PermissionLevel, S as SlashCommand, z as StringSelectMenuInteraction, o as Subcommand, p as SubcommandBuilder, s as SubcommandMetadata, T as TriviousClient, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from './index-6Un9NsKu.js';
3
3
  export { createActionRow, createEmbed } from './core/builders/util.builders.js';
4
4
  export { BaseRegistry } from './shared/typings/registry.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { b as TriviousClientOptions } from '../../index-DzD1aYla.cjs';
2
+ export { b as TriviousClientOptions } from '../../index-CYy6VZT0.cjs';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { b as TriviousClientOptions } from '../../index-CfL5mpMG.js';
2
+ export { b as TriviousClientOptions } from '../../index-6Un9NsKu.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, t as ContextMenuMetadata, s as SubcommandMetadata } from '../../index-DzD1aYla.cjs';
1
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, t as ContextMenuMetadata, s as SubcommandMetadata } from '../../index-CYy6VZT0.cjs';
2
2
  import 'discord.js';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, t as ContextMenuMetadata, s as SubcommandMetadata } from '../../index-CfL5mpMG.js';
1
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, t as ContextMenuMetadata, s as SubcommandMetadata } from '../../index-6Un9NsKu.js';
2
2
  import 'discord.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, i as CustomIdConstructOptions, j as constructCustomId, h as deconstructCustomId } from '../../index-DzD1aYla.cjs';
2
+ export { f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, i as CustomIdConstructOptions, j as constructCustomId, h as deconstructCustomId } from '../../index-CYy6VZT0.cjs';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, i as CustomIdConstructOptions, j as constructCustomId, h as deconstructCustomId } from '../../index-CfL5mpMG.js';
2
+ export { f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, i as CustomIdConstructOptions, j as constructCustomId, h as deconstructCustomId } from '../../index-6Un9NsKu.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { w as Event } from '../../index-DzD1aYla.cjs';
2
+ export { w as Event } from '../../index-CYy6VZT0.cjs';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { w as Event } from '../../index-CfL5mpMG.js';
2
+ export { w as Event } from '../../index-6Un9NsKu.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, x as Module, P as PermissionLevel, s as SubcommandMetadata, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from '../../index-DzD1aYla.cjs';
1
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, x as Module, P as PermissionLevel, s as SubcommandMetadata, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from '../../index-CYy6VZT0.cjs';
2
2
  export { BaseRegistry } from './registry.cjs';
3
3
  import 'discord.js';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
- export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, x as Module, P as PermissionLevel, s as SubcommandMetadata, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from '../../index-CfL5mpMG.js';
1
+ export { A as AnyCommand, u as AnyCommandBuilder, v as AnyCommandMetadata, q as CommandInteraction, r as CommandMetadata, f as Component, c as ComponentCustomIdTag, d as ComponentInteraction, e as ComponentType, t as ContextMenuMetadata, i as CustomIdConstructOptions, w as Event, x as Module, P as PermissionLevel, s as SubcommandMetadata, b as TriviousClientOptions, j as constructCustomId, h as deconstructCustomId, g as getPermissionLevel } from '../../index-6Un9NsKu.js';
2
2
  export { BaseRegistry } from './registry.js';
3
3
  import 'discord.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { x as Module } from '../../index-DzD1aYla.cjs';
2
+ export { x as Module } from '../../index-CYy6VZT0.cjs';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { x as Module } from '../../index-CfL5mpMG.js';
2
+ export { x as Module } from '../../index-6Un9NsKu.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { P as PermissionLevel, g as getPermissionLevel } from '../../index-DzD1aYla.cjs';
2
+ export { P as PermissionLevel, g as getPermissionLevel } from '../../index-CYy6VZT0.cjs';
3
3
  import './registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
1
  import 'discord.js';
2
- export { P as PermissionLevel, g as getPermissionLevel } from '../../index-CfL5mpMG.js';
2
+ export { P as PermissionLevel, g as getPermissionLevel } from '../../index-6Un9NsKu.js';
3
3
  import './registry.js';
4
4
  import '../../core/builders/util.builders.js';
@@ -1,4 +1,4 @@
1
- import { T as TriviousClient, P as PermissionLevel } from '../../index-DzD1aYla.cjs';
1
+ import { T as TriviousClient, P as PermissionLevel } from '../../index-CYy6VZT0.cjs';
2
2
  import { User, GuildMember, RESTPostAPIApplicationCommandsJSONBody } from 'discord.js';
3
3
  import '../typings/registry.cjs';
4
4
  import '../../core/builders/util.builders.cjs';
@@ -1,4 +1,4 @@
1
- import { T as TriviousClient, P as PermissionLevel } from '../../index-CfL5mpMG.js';
1
+ import { T as TriviousClient, P as PermissionLevel } from '../../index-6Un9NsKu.js';
2
2
  import { User, GuildMember, RESTPostAPIApplicationCommandsJSONBody } from 'discord.js';
3
3
  import '../typings/registry.js';
4
4
  import '../../core/builders/util.builders.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trivious",
3
- "version": "1.5.11",
3
+ "version": "1.5.12",
4
4
  "type": "module",
5
5
  "keywords": [
6
6
  "discord-bot",