@sapphire/plugin-subcommands 6.0.4-next.68a7a96.0 → 6.0.4-next.7829696

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 (63) hide show
  1. package/dist/cjs/index.cjs +6 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +5 -1
  4. package/dist/cjs/lib/Subcommand.cjs +22 -42
  5. package/dist/cjs/lib/Subcommand.cjs.map +1 -1
  6. package/dist/cjs/lib/precondition-resolvers/subcommandCooldown.cjs +1 -1
  7. package/dist/cjs/lib/precondition-resolvers/subcommandCooldown.cjs.map +1 -1
  8. package/dist/cjs/lib/types/Enums.cjs +1 -1
  9. package/dist/cjs/lib/types/Enums.cjs.map +1 -1
  10. package/dist/cjs/lib/types/Events.cjs +1 -1
  11. package/dist/cjs/lib/types/Events.cjs.map +1 -1
  12. package/dist/cjs/lib/types/SubcommandMappings.cjs +1 -1
  13. package/dist/cjs/lib/types/SubcommandMappings.cjs.map +1 -1
  14. package/dist/cjs/listeners/PluginChatInputSubcommandError.cjs +1 -1
  15. package/dist/cjs/listeners/PluginChatInputSubcommandError.cjs.map +1 -1
  16. package/dist/cjs/listeners/PluginMessageSubcommandError.cjs +1 -1
  17. package/dist/cjs/listeners/PluginMessageSubcommandError.cjs.map +1 -1
  18. package/dist/cjs/listeners/PluginSubcommandMappingIsMissingChatInputCommandHandler.cjs +1 -1
  19. package/dist/cjs/listeners/PluginSubcommandMappingIsMissingChatInputCommandHandler.cjs.map +1 -1
  20. package/dist/cjs/listeners/PluginSubcommandMappingIsMissingMessageCommandHandler.cjs +1 -1
  21. package/dist/cjs/listeners/PluginSubcommandMappingIsMissingMessageCommandHandler.cjs.map +1 -1
  22. package/dist/cjs/listeners/_load.cjs +1 -1
  23. package/dist/cjs/listeners/_load.cjs.map +1 -1
  24. package/dist/cjs/preconditions/PluginSubcommandCooldown.cjs +5 -11
  25. package/dist/cjs/preconditions/PluginSubcommandCooldown.cjs.map +1 -1
  26. package/dist/cjs/preconditions/_load.cjs +1 -1
  27. package/dist/cjs/preconditions/_load.cjs.map +1 -1
  28. package/dist/cjs/register.cjs +1 -1
  29. package/dist/cjs/register.cjs.map +1 -1
  30. package/dist/esm/chunk-3IXKS7M5.mjs +14 -0
  31. package/dist/esm/chunk-3IXKS7M5.mjs.map +1 -0
  32. package/dist/esm/index.d.mts +5 -1
  33. package/dist/esm/index.mjs +4 -3
  34. package/dist/esm/index.mjs.map +1 -1
  35. package/dist/esm/lib/Subcommand.mjs +16 -26
  36. package/dist/esm/lib/Subcommand.mjs.map +1 -1
  37. package/dist/esm/lib/precondition-resolvers/subcommandCooldown.mjs +2 -2
  38. package/dist/esm/lib/precondition-resolvers/subcommandCooldown.mjs.map +1 -1
  39. package/dist/esm/lib/types/Enums.mjs +2 -2
  40. package/dist/esm/lib/types/Enums.mjs.map +1 -1
  41. package/dist/esm/lib/types/Events.mjs +2 -2
  42. package/dist/esm/lib/types/Events.mjs.map +1 -1
  43. package/dist/esm/lib/types/SubcommandMappings.mjs +1 -1
  44. package/dist/esm/lib/types/SubcommandMappings.mjs.map +1 -1
  45. package/dist/esm/listeners/PluginChatInputSubcommandError.mjs +2 -2
  46. package/dist/esm/listeners/PluginChatInputSubcommandError.mjs.map +1 -1
  47. package/dist/esm/listeners/PluginMessageSubcommandError.mjs +2 -2
  48. package/dist/esm/listeners/PluginMessageSubcommandError.mjs.map +1 -1
  49. package/dist/esm/listeners/PluginSubcommandMappingIsMissingChatInputCommandHandler.mjs +2 -2
  50. package/dist/esm/listeners/PluginSubcommandMappingIsMissingChatInputCommandHandler.mjs.map +1 -1
  51. package/dist/esm/listeners/PluginSubcommandMappingIsMissingMessageCommandHandler.mjs +2 -2
  52. package/dist/esm/listeners/PluginSubcommandMappingIsMissingMessageCommandHandler.mjs.map +1 -1
  53. package/dist/esm/listeners/_load.mjs +2 -2
  54. package/dist/esm/listeners/_load.mjs.map +1 -1
  55. package/dist/esm/preconditions/PluginSubcommandCooldown.mjs +5 -8
  56. package/dist/esm/preconditions/PluginSubcommandCooldown.mjs.map +1 -1
  57. package/dist/esm/preconditions/_load.mjs +2 -2
  58. package/dist/esm/preconditions/_load.mjs.map +1 -1
  59. package/dist/esm/register.mjs +2 -2
  60. package/dist/esm/register.mjs.map +1 -1
  61. package/package.json +6 -6
  62. package/dist/esm/chunk-K3DKV2RO.mjs +0 -24
  63. package/dist/esm/chunk-K3DKV2RO.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/listeners/_load.ts"],"names":[],"mappings":";;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB,sCAAsC;AACjE,SAAS,kBAAkB,oCAAoC;AAC/D,SAAS,kBAAkB,+DAA+D;AAC1F,SAAS,kBAAkB,6DAA6D;AAEjF,SAAS,gBAAgB;AAC/B,QAAM,QAAQ;AACd,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,kCAAkC,OAAO,gCAAgC,MAAM,CAAC;AACxH,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,gCAAgC,OAAO,8BAA8B,MAAM,CAAC;AACpH,OAAK,UAAU,OAAO,UAAU;AAAA,IAC/B,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACD,CAAC;AACD,OAAK,UAAU,OAAO,UAAU;AAAA,IAC/B,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACD,CAAC;AACF;AAdgB","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginListener as PluginChatInputSubcommandError } from './PluginChatInputSubcommandError';\nimport { PluginListener as PluginMessageSubcommandError } from './PluginMessageSubcommandError';\nimport { PluginListener as PluginSubcommandMappingIsMissingChatInputCommandHandler } from './PluginSubcommandMappingIsMissingChatInputCommandHandler';\nimport { PluginListener as PluginSubcommandMappingIsMissingMessageCommandHandler } from './PluginSubcommandMappingIsMissingMessageCommandHandler';\n\nexport function loadListeners() {\n\tconst store = 'listeners' as const;\n\tvoid container.stores.loadPiece({ name: 'PluginChatInputSubcommandError', piece: PluginChatInputSubcommandError, store });\n\tvoid container.stores.loadPiece({ name: 'PluginMessageSubcommandError', piece: PluginMessageSubcommandError, store });\n\tvoid container.stores.loadPiece({\n\t\tname: 'PluginSubcommandMappingIsMissingChatInputCommandHandler',\n\t\tpiece: PluginSubcommandMappingIsMissingChatInputCommandHandler,\n\t\tstore\n\t});\n\tvoid container.stores.loadPiece({\n\t\tname: 'PluginSubcommandMappingIsMissingMessageCommandHandler',\n\t\tpiece: PluginSubcommandMappingIsMissingMessageCommandHandler,\n\t\tstore\n\t});\n}\n"]}
1
+ {"version":3,"sources":["../../../src/listeners/_load.ts"],"names":["container","PluginChatInputSubcommandError","PluginMessageSubcommandError","PluginSubcommandMappingIsMissingChatInputCommandHandler","PluginSubcommandMappingIsMissingMessageCommandHandler"],"mappings":";;;;;;;;;;AAMO,SAAS,aAAgB,GAAA;AAC/B,EAAA,MAAM,KAAQ,GAAA,WAAA,CAAA;AACd,EAAK,KAAAA,gBAAA,CAAU,OAAO,SAAU,CAAA,EAAE,MAAM,gCAAkC,EAAA,KAAA,EAAOC,iDAAgC,EAAA,KAAA,EAAO,CAAA,CAAA;AACxH,EAAK,KAAAD,gBAAA,CAAU,OAAO,SAAU,CAAA,EAAE,MAAM,8BAAgC,EAAA,KAAA,EAAOE,+CAA8B,EAAA,KAAA,EAAO,CAAA,CAAA;AACpH,EAAK,KAAAF,gBAAA,CAAU,OAAO,SAAU,CAAA;AAAA,IAC/B,IAAM,EAAA,yDAAA;AAAA,IACN,KAAO,EAAAG,0EAAA;AAAA,IACP,KAAA;AAAA,GACA,CAAA,CAAA;AACD,EAAK,KAAAH,gBAAA,CAAU,OAAO,SAAU,CAAA;AAAA,IAC/B,IAAM,EAAA,uDAAA;AAAA,IACN,KAAO,EAAAI,wEAAA;AAAA,IACP,KAAA;AAAA,GACA,CAAA,CAAA;AACF,CAAA;AAdgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA","file":"_load.cjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginListener as PluginChatInputSubcommandError } from './PluginChatInputSubcommandError';\nimport { PluginListener as PluginMessageSubcommandError } from './PluginMessageSubcommandError';\nimport { PluginListener as PluginSubcommandMappingIsMissingChatInputCommandHandler } from './PluginSubcommandMappingIsMissingChatInputCommandHandler';\nimport { PluginListener as PluginSubcommandMappingIsMissingMessageCommandHandler } from './PluginSubcommandMappingIsMissingMessageCommandHandler';\n\nexport function loadListeners() {\n\tconst store = 'listeners' as const;\n\tvoid container.stores.loadPiece({ name: 'PluginChatInputSubcommandError', piece: PluginChatInputSubcommandError, store });\n\tvoid container.stores.loadPiece({ name: 'PluginMessageSubcommandError', piece: PluginMessageSubcommandError, store });\n\tvoid container.stores.loadPiece({\n\t\tname: 'PluginSubcommandMappingIsMissingChatInputCommandHandler',\n\t\tpiece: PluginSubcommandMappingIsMissingChatInputCommandHandler,\n\t\tstore\n\t});\n\tvoid container.stores.loadPiece({\n\t\tname: 'PluginSubcommandMappingIsMissingMessageCommandHandler',\n\t\tpiece: PluginSubcommandMappingIsMissingMessageCommandHandler,\n\t\tstore\n\t});\n}\n"]}
@@ -9,10 +9,7 @@ var Enums_cjs = require('../lib/types/Enums.cjs');
9
9
  var __defProp = Object.defineProperty;
10
10
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
11
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
12
- var __publicField = (obj, key, value) => {
13
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
14
- return value;
15
- };
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
16
13
  var _PluginPrecondition = class _PluginPrecondition extends framework.AllFlowsPrecondition {
17
14
  constructor() {
18
15
  super(...arguments);
@@ -31,12 +28,9 @@ var _PluginPrecondition = class _PluginPrecondition extends framework.AllFlowsPr
31
28
  return this.sharedRun(interaction.user.id, subcommand, context, cooldownId, "context menu");
32
29
  }
33
30
  sharedRun(authorId, subcommand, context, cooldownId, commandType) {
34
- if (context.external)
35
- return this.ok();
36
- if (!context.delay)
37
- return this.ok();
38
- if (context.filteredUsers?.includes(authorId))
39
- return this.ok();
31
+ if (context.external) return this.ok();
32
+ if (!context.delay) return this.ok();
33
+ if (context.filteredUsers?.includes(authorId)) return this.ok();
40
34
  const rateLimit = this.getManager(subcommand, context).acquire(cooldownId);
41
35
  if (rateLimit.limited) {
42
36
  const remaining = rateLimit.remainingTime;
@@ -92,5 +86,5 @@ __name(_PluginPrecondition, "PluginPrecondition");
92
86
  var PluginPrecondition = _PluginPrecondition;
93
87
 
94
88
  exports.PluginPrecondition = PluginPrecondition;
95
- //# sourceMappingURL=out.js.map
89
+ //# sourceMappingURL=PluginSubcommandCooldown.cjs.map
96
90
  //# sourceMappingURL=PluginSubcommandCooldown.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preconditions/PluginSubcommandCooldown.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAS,sBAAsB,mBAA+C;AAC9E,SAAS,wBAAwB;AACjC;AAAA,EACC;AAAA,EACA;AAAA,OAKM;AACP,OAA2B;AAC3B,SAAS,6BAA6B;AAkB/B,IAAM,sBAAN,MAAM,4BAA2B,qBAAqB;AAAA,EAAtD;AAAA;AACN,wBAAO,qBAAoB,oBAAI,QAA8C;AAAA;AAAA,EAE7D,WACf,SACA,YACA,SAC8B;AAC9B,UAAM,aAAa,KAAK,iBAAiB,SAAS,OAAO;AAEzD,WAAO,KAAK,UAAU,QAAQ,OAAO,IAAI,YAAY,SAAS,YAAY,SAAS;AAAA,EACpF;AAAA,EAEgB,aACf,aACA,YACA,SAC8B;AAC9B,UAAM,aAAa,KAAK,qBAAqB,aAAa,OAAO;AAEjE,WAAO,KAAK,UAAU,YAAY,KAAK,IAAI,YAAY,SAAS,YAAY,YAAY;AAAA,EACzF;AAAA,EAEgB,eACf,aACA,YACA,SAC8B;AAC9B,UAAM,aAAa,KAAK,qBAAqB,aAAa,OAAO;AAEjE,WAAO,KAAK,UAAU,YAAY,KAAK,IAAI,YAA0B,SAAS,YAAY,cAAc;AAAA,EACzG;AAAA,EAEQ,UACP,UACA,YACA,SACA,YACA,aAC8B;AAE9B,QAAI,QAAQ;AAAU,aAAO,KAAK,GAAG;AAGrC,QAAI,CAAC,QAAQ;AAAO,aAAO,KAAK,GAAG;AAGnC,QAAI,QAAQ,eAAe,SAAS,QAAQ;AAAG,aAAO,KAAK,GAAG;AAE9D,UAAM,YAAY,KAAK,WAAW,YAAY,OAAO,EAAE,QAAQ,UAAU;AAEzE,QAAI,UAAU,SAAS;AACtB,YAAM,YAAY,UAAU;AAE5B,YAAM,gBAAgB,KAAK,KAAK,MAAM,UAAU,UAAU,GAAI,GAAG,gBAAgB,YAAY;AAC7F,aAAO,KAAK,MAAM;AAAA,QACjB,YAAY,sBAAsB;AAAA,QAClC,SAAS,0CAA0C,WAAW,mCAAmC,aAAa;AAAA,QAC9G,SAAS,EAAE,UAAU;AAAA,MACtB,CAAC;AAAA,IACF;AAEA,cAAU,QAAQ;AAClB,WAAO,KAAK,GAAG;AAAA,EAChB;AAAA,EAEQ,iBAAiB,SAAkB,SAAsD;AAChG,UAAM,uBAAuB,KAAK,yBAAyB,OAAO;AAClE,YAAQ,QAAQ,OAAO;AAAA,MACtB,KAAK,YAAY;AAChB,eAAO,UAAU,oBAAoB;AAAA,MACtC,KAAK,YAAY;AAChB,eAAO,GAAG,QAAQ,SAAS,IAAI,oBAAoB;AAAA,MACpD,KAAK,YAAY;AAChB,eAAO,GAAG,QAAQ,OAAO,IAAI,oBAAoB,MAAM,GAAG,QAAQ,SAAS,IAAI,oBAAoB;AAAA,MACpG;AACC,eAAO,GAAG,QAAQ,OAAO,EAAE,IAAI,oBAAoB;AAAA,IACrD;AAAA,EACD;AAAA,EAEQ,qBAAqB,aAAiC,SAAsD;AACnH,UAAM,uBAAuB,KAAK,yBAAyB,OAAO;AAClE,YAAQ,QAAQ,OAAO;AAAA,MACtB,KAAK,YAAY;AAChB,eAAO,UAAU,oBAAoB;AAAA,MACtC,KAAK,YAAY;AAChB,eAAO,GAAG,YAAY,SAAS,IAAI,oBAAoB;AAAA,MACxD,KAAK,YAAY;AAChB,eAAO,GAAG,YAAY,OAAO,IAAI,oBAAoB,MAAM,GAAG,YAAY,SAAS,IAAI,oBAAoB;AAAA,MAC5G;AACC,eAAO,GAAG,YAAY,KAAK,EAAE,IAAI,oBAAoB;AAAA,IACvD;AAAA,EACD;AAAA,EAEQ,yBAAyB,SAAsD;AACtF,WAAO,QAAQ,sBAAsB,GAAG,QAAQ,mBAAmB,IAAI,QAAQ,oBAAoB,KAAK,QAAQ;AAAA,EACjH;AAAA,EAEQ,WAAW,YAAwB,SAAsD;AAChG,QAAI,UAAU,KAAK,kBAAkB,IAAI,UAAU;AACnD,QAAI,CAAC,SAAS;AACb,gBAAU,IAAI,iBAAiB,QAAQ,OAAO,QAAQ,KAAK;AAC3D,WAAK,kBAAkB,IAAI,YAAY,OAAO;AAAA,IAC/C;AACA,WAAO;AAAA,EACR;AACD;AA1G6D;AAAtD,IAAM,qBAAN","sourcesContent":["import { AllFlowsPrecondition, BucketScope, Command, CorePreconditions } from '@sapphire/framework';\nimport { RateLimitManager } from '@sapphire/ratelimits';\nimport {\n\tTimestampStyles,\n\ttime,\n\ttype ChatInputCommandInteraction,\n\ttype CommandInteraction,\n\ttype ContextMenuCommandInteraction,\n\ttype Message\n} from 'discord.js';\nimport { Subcommand } from '../lib/Subcommand';\nimport { SubcommandIdentifiers } from '../lib/types/Enums';\n\n/**\n * The context for the subcommand cooldown precondition\n * @since 5.1.0\n */\nexport interface PluginSubcommandCooldownPreconditionContext extends CorePreconditions.CooldownContext {\n\t/** The name of the subcommand */\n\tsubcommandMethodName: string;\n\t/** The name of the subcommand group, if any */\n\tsubcommandGroupName?: string;\n}\n\n/**\n * The subcommand cooldown precondition. This differs from the cooldown precondition in framework by using a separate\n * bucket as well as resolving the id differently to ensure it is specific to a subcommand.\n * @since 5.1.0\n */\nexport class PluginPrecondition extends AllFlowsPrecondition {\n\tpublic subcommandBuckets = new WeakMap<Subcommand, RateLimitManager<string>>();\n\n\tpublic override messageRun(\n\t\tmessage: Message,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromMessage(message, context);\n\n\t\treturn this.sharedRun(message.author.id, subcommand, context, cooldownId, 'message');\n\t}\n\n\tpublic override chatInputRun(\n\t\tinteraction: ChatInputCommandInteraction,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromInteraction(interaction, context);\n\n\t\treturn this.sharedRun(interaction.user.id, subcommand, context, cooldownId, 'chat input');\n\t}\n\n\tpublic override contextMenuRun(\n\t\tinteraction: ContextMenuCommandInteraction,\n\t\tsubcommand: Command,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromInteraction(interaction, context);\n\n\t\treturn this.sharedRun(interaction.user.id, subcommand as Subcommand, context, cooldownId, 'context menu');\n\t}\n\n\tprivate sharedRun(\n\t\tauthorId: string,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext,\n\t\tcooldownId: string,\n\t\tcommandType: string\n\t): AllFlowsPrecondition.Result {\n\t\t// If the subcommand it is testing for is not this one, return ok:\n\t\tif (context.external) return this.ok();\n\n\t\t// If there is no delay (undefined, null, 0), return ok:\n\t\tif (!context.delay) return this.ok();\n\n\t\t// If the user has provided any filtered users and the authorId is in that array, return ok:\n\t\tif (context.filteredUsers?.includes(authorId)) return this.ok();\n\n\t\tconst rateLimit = this.getManager(subcommand, context).acquire(cooldownId);\n\n\t\tif (rateLimit.limited) {\n\t\t\tconst remaining = rateLimit.remainingTime;\n\n\t\t\tconst nextAvailable = time(Math.floor(rateLimit.expires / 1000), TimestampStyles.RelativeTime);\n\t\t\treturn this.error({\n\t\t\t\tidentifier: SubcommandIdentifiers.SubcommandPreconditionCooldown,\n\t\t\t\tmessage: `There is a cooldown in effect for this ${commandType} subcommand. It'll be available ${nextAvailable}.`,\n\t\t\t\tcontext: { remaining }\n\t\t\t});\n\t\t}\n\n\t\trateLimit.consume();\n\t\treturn this.ok();\n\t}\n\n\tprivate getIdFromMessage(message: Message, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tconst subcommandIdentifier = this.getSubcommandMappingName(context);\n\t\tswitch (context.scope) {\n\t\t\tcase BucketScope.Global:\n\t\t\t\treturn `global.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Channel:\n\t\t\t\treturn `${message.channelId}.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Guild:\n\t\t\t\treturn `${message.guildId}.${subcommandIdentifier}` ?? `${message.channelId}.${subcommandIdentifier}`;\n\t\t\tdefault:\n\t\t\t\treturn `${message.author.id}.${subcommandIdentifier}`;\n\t\t}\n\t}\n\n\tprivate getIdFromInteraction(interaction: CommandInteraction, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tconst subcommandIdentifier = this.getSubcommandMappingName(context);\n\t\tswitch (context.scope) {\n\t\t\tcase BucketScope.Global:\n\t\t\t\treturn `global.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Channel:\n\t\t\t\treturn `${interaction.channelId}.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Guild:\n\t\t\t\treturn `${interaction.guildId}.${subcommandIdentifier}` ?? `${interaction.channelId}.${subcommandIdentifier}`;\n\t\t\tdefault:\n\t\t\t\treturn `${interaction.user.id}.${subcommandIdentifier}`;\n\t\t}\n\t}\n\n\tprivate getSubcommandMappingName(context: PluginSubcommandCooldownPreconditionContext) {\n\t\treturn context.subcommandGroupName ? `${context.subcommandGroupName}.${context.subcommandMethodName}` : context.subcommandMethodName;\n\t}\n\n\tprivate getManager(subcommand: Subcommand, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tlet manager = this.subcommandBuckets.get(subcommand);\n\t\tif (!manager) {\n\t\t\tmanager = new RateLimitManager(context.delay, context.limit);\n\t\t\tthis.subcommandBuckets.set(subcommand, manager);\n\t\t}\n\t\treturn manager;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../src/preconditions/PluginSubcommandCooldown.ts"],"names":["AllFlowsPrecondition","time","TimestampStyles","SubcommandIdentifiers","BucketScope","RateLimitManager"],"mappings":"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","file":"PluginSubcommandCooldown.cjs","sourcesContent":["import { AllFlowsPrecondition, BucketScope, Command, CorePreconditions } from '@sapphire/framework';\nimport { RateLimitManager } from '@sapphire/ratelimits';\nimport {\n\tTimestampStyles,\n\ttime,\n\ttype ChatInputCommandInteraction,\n\ttype CommandInteraction,\n\ttype ContextMenuCommandInteraction,\n\ttype Message\n} from 'discord.js';\nimport { Subcommand } from '../lib/Subcommand';\nimport { SubcommandIdentifiers } from '../lib/types/Enums';\n\n/**\n * The context for the subcommand cooldown precondition\n * @since 5.1.0\n */\nexport interface PluginSubcommandCooldownPreconditionContext extends CorePreconditions.CooldownContext {\n\t/** The name of the subcommand */\n\tsubcommandMethodName: string;\n\t/** The name of the subcommand group, if any */\n\tsubcommandGroupName?: string;\n}\n\n/**\n * The subcommand cooldown precondition. This differs from the cooldown precondition in framework by using a separate\n * bucket as well as resolving the id differently to ensure it is specific to a subcommand.\n * @since 5.1.0\n */\nexport class PluginPrecondition extends AllFlowsPrecondition {\n\tpublic subcommandBuckets = new WeakMap<Subcommand, RateLimitManager<string>>();\n\n\tpublic override messageRun(\n\t\tmessage: Message,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromMessage(message, context);\n\n\t\treturn this.sharedRun(message.author.id, subcommand, context, cooldownId, 'message');\n\t}\n\n\tpublic override chatInputRun(\n\t\tinteraction: ChatInputCommandInteraction,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromInteraction(interaction, context);\n\n\t\treturn this.sharedRun(interaction.user.id, subcommand, context, cooldownId, 'chat input');\n\t}\n\n\tpublic override contextMenuRun(\n\t\tinteraction: ContextMenuCommandInteraction,\n\t\tsubcommand: Command,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst cooldownId = this.getIdFromInteraction(interaction, context);\n\n\t\treturn this.sharedRun(interaction.user.id, subcommand as Subcommand, context, cooldownId, 'context menu');\n\t}\n\n\tprivate sharedRun(\n\t\tauthorId: string,\n\t\tsubcommand: Subcommand,\n\t\tcontext: PluginSubcommandCooldownPreconditionContext,\n\t\tcooldownId: string,\n\t\tcommandType: string\n\t): AllFlowsPrecondition.Result {\n\t\t// If the subcommand it is testing for is not this one, return ok:\n\t\tif (context.external) return this.ok();\n\n\t\t// If there is no delay (undefined, null, 0), return ok:\n\t\tif (!context.delay) return this.ok();\n\n\t\t// If the user has provided any filtered users and the authorId is in that array, return ok:\n\t\tif (context.filteredUsers?.includes(authorId)) return this.ok();\n\n\t\tconst rateLimit = this.getManager(subcommand, context).acquire(cooldownId);\n\n\t\tif (rateLimit.limited) {\n\t\t\tconst remaining = rateLimit.remainingTime;\n\n\t\t\tconst nextAvailable = time(Math.floor(rateLimit.expires / 1000), TimestampStyles.RelativeTime);\n\t\t\treturn this.error({\n\t\t\t\tidentifier: SubcommandIdentifiers.SubcommandPreconditionCooldown,\n\t\t\t\tmessage: `There is a cooldown in effect for this ${commandType} subcommand. It'll be available ${nextAvailable}.`,\n\t\t\t\tcontext: { remaining }\n\t\t\t});\n\t\t}\n\n\t\trateLimit.consume();\n\t\treturn this.ok();\n\t}\n\n\tprivate getIdFromMessage(message: Message, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tconst subcommandIdentifier = this.getSubcommandMappingName(context);\n\t\tswitch (context.scope) {\n\t\t\tcase BucketScope.Global:\n\t\t\t\treturn `global.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Channel:\n\t\t\t\treturn `${message.channelId}.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Guild:\n\t\t\t\treturn `${message.guildId}.${subcommandIdentifier}` ?? `${message.channelId}.${subcommandIdentifier}`;\n\t\t\tdefault:\n\t\t\t\treturn `${message.author.id}.${subcommandIdentifier}`;\n\t\t}\n\t}\n\n\tprivate getIdFromInteraction(interaction: CommandInteraction, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tconst subcommandIdentifier = this.getSubcommandMappingName(context);\n\t\tswitch (context.scope) {\n\t\t\tcase BucketScope.Global:\n\t\t\t\treturn `global.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Channel:\n\t\t\t\treturn `${interaction.channelId}.${subcommandIdentifier}`;\n\t\t\tcase BucketScope.Guild:\n\t\t\t\treturn `${interaction.guildId}.${subcommandIdentifier}` ?? `${interaction.channelId}.${subcommandIdentifier}`;\n\t\t\tdefault:\n\t\t\t\treturn `${interaction.user.id}.${subcommandIdentifier}`;\n\t\t}\n\t}\n\n\tprivate getSubcommandMappingName(context: PluginSubcommandCooldownPreconditionContext) {\n\t\treturn context.subcommandGroupName ? `${context.subcommandGroupName}.${context.subcommandMethodName}` : context.subcommandMethodName;\n\t}\n\n\tprivate getManager(subcommand: Subcommand, context: PluginSubcommandCooldownPreconditionContext) {\n\t\tlet manager = this.subcommandBuckets.get(subcommand);\n\t\tif (!manager) {\n\t\t\tmanager = new RateLimitManager(context.delay, context.limit);\n\t\t\tthis.subcommandBuckets.set(subcommand, manager);\n\t\t}\n\t\treturn manager;\n\t}\n}\n"]}
@@ -12,5 +12,5 @@ function loadPreconditions() {
12
12
  __name(loadPreconditions, "loadPreconditions");
13
13
 
14
14
  exports.loadPreconditions = loadPreconditions;
15
- //# sourceMappingURL=out.js.map
15
+ //# sourceMappingURL=_load.cjs.map
16
16
  //# sourceMappingURL=_load.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/preconditions/_load.ts"],"names":[],"mappings":";;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB,gCAAgC;AAExD,SAAS,oBAAoB;AACnC,QAAM,QAAQ;AACd,OAAK,UAAU,OAAO,UAAU,EAAE,MAAM,4BAA4B,OAAO,0BAA0B,MAAM,CAAC;AAC7G;AAHgB","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginPrecondition as PluginSubcommandCooldown } from './PluginSubcommandCooldown';\n\nexport function loadPreconditions() {\n\tconst store = 'preconditions' as const;\n\tvoid container.stores.loadPiece({ name: 'PluginSubcommandCooldown', piece: PluginSubcommandCooldown, store });\n}\n"]}
1
+ {"version":3,"sources":["../../../src/preconditions/_load.ts"],"names":["container","PluginSubcommandCooldown"],"mappings":";;;;;;;AAGO,SAAS,iBAAoB,GAAA;AACnC,EAAA,MAAM,KAAQ,GAAA,eAAA,CAAA;AACd,EAAK,KAAAA,gBAAA,CAAU,OAAO,SAAU,CAAA,EAAE,MAAM,0BAA4B,EAAA,KAAA,EAAOC,+CAA0B,EAAA,KAAA,EAAO,CAAA,CAAA;AAC7G,CAAA;AAHgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"_load.cjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport { PluginPrecondition as PluginSubcommandCooldown } from './PluginSubcommandCooldown';\n\nexport function loadPreconditions() {\n\tconst store = 'preconditions' as const;\n\tvoid container.stores.loadPiece({ name: 'PluginSubcommandCooldown', piece: PluginSubcommandCooldown, store });\n}\n"]}
@@ -21,5 +21,5 @@ var SubcommandsPlugin = _SubcommandsPlugin;
21
21
  framework.SapphireClient.plugins.registerPostInitializationHook(SubcommandsPlugin[framework.postInitialization], "Subcommand-PostInitialization");
22
22
 
23
23
  exports.SubcommandsPlugin = SubcommandsPlugin;
24
- //# sourceMappingURL=out.js.map
24
+ //# sourceMappingURL=register.cjs.map
25
25
  //# sourceMappingURL=register.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/register.ts"],"names":[],"mappings":";;;;AAAA,OAAO;AAEP,SAAS,QAAQ,oBAAoB,sBAAsB;AAE3D,SAAS,eAAe,yBAAyB;AAK1C,IAAM,qBAAN,MAAM,2BAA0B,OAAO;AAAA;AAAA;AAAA;AAAA,EAI7C,QAAe,kBAAkB,EAAwB,SAA8B;AACtF,sBAAkB;AAElB,QAAI,QAAQ,iCAAiC,OAAO;AACnD,oBAAc;AAAA,IACf;AAAA,EACD;AACD;AAX8C;AAAvC,IAAM,oBAAN;AAaP,eAAe,QAAQ,+BAA+B,kBAAkB,kBAAkB,GAAG,+BAA+B","sourcesContent":["import './index';\n\nimport { Plugin, postInitialization, SapphireClient } from '@sapphire/framework';\nimport type { ClientOptions } from 'discord.js';\nimport { loadListeners, loadPreconditions } from './index';\n\n/**\n * @since 3.1.2\n */\nexport class SubcommandsPlugin extends Plugin {\n\t/**\n\t * @since 3.1.2\n\t */\n\tpublic static [postInitialization](this: SapphireClient, options: ClientOptions): void {\n\t\tloadPreconditions();\n\n\t\tif (options.loadSubcommandErrorListeners !== false) {\n\t\t\tloadListeners();\n\t\t}\n\t}\n}\n\nSapphireClient.plugins.registerPostInitializationHook(SubcommandsPlugin[postInitialization], 'Subcommand-PostInitialization');\n"]}
1
+ {"version":3,"sources":["../../src/register.ts"],"names":["Plugin","postInitialization","loadPreconditions","loadListeners","SapphireClient"],"mappings":";;;;;;;AASO,IAAM,kBAAA,GAAN,MAAM,kBAAA,SAA0BA,gBAAO,CAAA;AAAA;AAAA;AAAA;AAAA,EAI7C,QAAeC,4BAAkB,CAAA,CAAwB,OAA8B,EAAA;AACtF,IAAkBC,2BAAA,EAAA,CAAA;AAElB,IAAI,IAAA,OAAA,CAAQ,iCAAiC,KAAO,EAAA;AACnD,MAAcC,uBAAA,EAAA,CAAA;AAAA,KACf;AAAA,GACD;AACD,CAAA,CAAA;AAX8C,MAAA,CAAA,kBAAA,EAAA,mBAAA,CAAA,CAAA;AAAvC,IAAM,iBAAN,GAAA,mBAAA;AAaPC,wBAAA,CAAe,OAAQ,CAAA,8BAAA,CAA+B,iBAAkB,CAAAH,4BAAkB,GAAG,+BAA+B,CAAA","file":"register.cjs","sourcesContent":["import './index';\n\nimport { Plugin, postInitialization, SapphireClient } from '@sapphire/framework';\nimport type { ClientOptions } from 'discord.js';\nimport { loadListeners, loadPreconditions } from './index';\n\n/**\n * @since 3.1.2\n */\nexport class SubcommandsPlugin extends Plugin {\n\t/**\n\t * @since 3.1.2\n\t */\n\tpublic static [postInitialization](this: SapphireClient, options: ClientOptions): void {\n\t\tloadPreconditions();\n\n\t\tif (options.loadSubcommandErrorListeners !== false) {\n\t\t\tloadListeners();\n\t\t}\n\t}\n}\n\nSapphireClient.plugins.registerPostInitializationHook(SubcommandsPlugin[postInitialization], 'Subcommand-PostInitialization');\n"]}
@@ -0,0 +1,14 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
9
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
11
+
12
+ export { __name, __privateAdd, __privateMethod, __publicField };
13
+ //# sourceMappingURL=chunk-3IXKS7M5.mjs.map
14
+ //# sourceMappingURL=chunk-3IXKS7M5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3IXKS7M5.mjs"}
@@ -372,6 +372,8 @@ declare module '@sapphire/framework' {
372
372
  /**
373
373
  * The preconditions specific to subcommands
374
374
  * @since 5.1.0
375
+ * @deprecated - This will be replaced with a regular top level export of {@link PluginSubcommandCooldown}
376
+ * in the next major version as opposed to a namespaced export.
375
377
  */
376
378
  declare const SubcommandPreconditions: {
377
379
  PluginSubcommandCooldown: typeof PluginPrecondition;
@@ -379,6 +381,8 @@ declare const SubcommandPreconditions: {
379
381
  /**
380
382
  * The preconditions specific to subcommands
381
383
  * @since 5.1.0
384
+ * @deprecated - This will be replaced with a regular top level export of {@link PluginSubcommandCooldownPreconditionContext}
385
+ * in the next major version as opposed to a namespaced export.
382
386
  */
383
387
  declare namespace SubcommandPreconditions {
384
388
  /** The context for the subcommand cooldown precondition */
@@ -392,4 +396,4 @@ declare namespace SubcommandPreconditions {
392
396
  */
393
397
  declare const version: string;
394
398
 
395
- export { type ChatInputCommandSubcommandMappingMethod, type ChatInputSubcommandAcceptedPayload, type ChatInputSubcommandDeniedPayload, type ChatInputSubcommandErrorPayload, type ChatInputSubcommandRunPayload, type ChatInputSubcommandSuccessPayload, type IChatInputSubcommandPayload, type IMessageSubcommandPayload, type MessageSubcommandAcceptedPayload, type MessageSubcommandDeniedPayload, type MessageSubcommandErrorPayload, type MessageSubcommandMappingMethod, type MessageSubcommandNoMatchContext, type MessageSubcommandRunPayload, type MessageSubcommandSuccessPayload, Subcommand, SubcommandCommandPreConditions, SubcommandIdentifiers, type SubcommandMapping, type SubcommandMappingArray, type SubcommandMappingGroup, type SubcommandMappingMethod, type SubcommandOptions, SubcommandPluginEvents, SubcommandPluginIdentifiers, subcommandCooldown as SubcommandPreconditionResolvers, SubcommandPreconditions, loadListeners, loadPreconditions, version };
399
+ export { type ChatInputCommandSubcommandMappingMethod, type ChatInputSubcommandAcceptedPayload, type ChatInputSubcommandDeniedPayload, type ChatInputSubcommandErrorPayload, type ChatInputSubcommandRunPayload, type ChatInputSubcommandSuccessPayload, type IChatInputSubcommandPayload, type IMessageSubcommandPayload, type MessageSubcommandAcceptedPayload, type MessageSubcommandDeniedPayload, type MessageSubcommandErrorPayload, type MessageSubcommandMappingMethod, type MessageSubcommandNoMatchContext, type MessageSubcommandRunPayload, type MessageSubcommandSuccessPayload, PluginPrecondition as PluginSubcommandCooldownPrecondition, type PluginSubcommandCooldownPreconditionContext, Subcommand, SubcommandCommandPreConditions, SubcommandIdentifiers, type SubcommandMapping, type SubcommandMappingArray, type SubcommandMappingGroup, type SubcommandMappingMethod, type SubcommandOptions, SubcommandPluginEvents, SubcommandPluginIdentifiers, subcommandCooldown as SubcommandPreconditionResolvers, SubcommandPreconditions, loadListeners, loadPreconditions, version };
@@ -1,5 +1,6 @@
1
- import './chunk-K3DKV2RO.mjs';
1
+ import './chunk-3IXKS7M5.mjs';
2
2
  import { PluginPrecondition } from './preconditions/PluginSubcommandCooldown.mjs';
3
+ export { PluginPrecondition as PluginSubcommandCooldownPrecondition } from './preconditions/PluginSubcommandCooldown.mjs';
3
4
  export * from './lib/Subcommand.mjs';
4
5
  import * as subcommandCooldown_mjs from './lib/precondition-resolvers/subcommandCooldown.mjs';
5
6
  export { subcommandCooldown_mjs as SubcommandPreconditionResolvers };
@@ -12,8 +13,8 @@ export { loadPreconditions } from './preconditions/_load.mjs';
12
13
  var SubcommandPreconditions = {
13
14
  PluginSubcommandCooldown: PluginPrecondition
14
15
  };
15
- var version = "6.0.4-next.68a7a96.0";
16
+ var version = "6.0.4-next.7829696";
16
17
 
17
18
  export { SubcommandPreconditions, version };
18
- //# sourceMappingURL=out.js.map
19
+ //# sourceMappingURL=index.mjs.map
19
20
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA;AAAA,EACC,sBAAsB;AAAA,OAEhB;AAEP,cAAc;AACd,YAAY,qCAAqC;AACjD,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAiC3B,IAAM,0BAA0B;AAAA,EACtC;AACD;AAkBO,IAAM,UAAkB","sourcesContent":["import type { CooldownOptions } from '@sapphire/framework';\nimport {\n\tPluginPrecondition as PluginSubcommandCooldown,\n\ttype PluginSubcommandCooldownPreconditionContext\n} from './preconditions/PluginSubcommandCooldown';\n\nexport * from './lib/Subcommand';\nexport * as SubcommandPreconditionResolvers from './lib/precondition-resolvers/subcommandCooldown';\nexport * from './lib/types/Enums';\nexport * from './lib/types/Events';\nexport * from './lib/types/SubcommandMappings';\n\nexport { loadListeners } from './listeners/_load';\nexport { loadPreconditions } from './preconditions/_load';\n\ndeclare module 'discord.js' {\n\tinterface ClientOptions {\n\t\t/**\n\t\t * If Plugin-subcommand to load pre-included subcommand error event listeners that log any encountered errors to the {@link SapphireClient.logger} instance\n\t\t * @since 3.1.2\n\t\t * @default true\n\t\t */\n\t\tloadSubcommandErrorListeners?: boolean;\n\t\t/**\n\t\t * Sets the default cooldown time for all subcommands.\n\t\t * @remark This is separate from {@link ClientOptions.defaultCooldown} as it is only used for subcommands\n\t\t * @remark Note that for the `filteredCommands` option you have to provide it as\n\t\t * - For a subcommand without a group: `commandName.subcommandName` (e.g. `config.show`).\n\t\t * - For a subcommand with a group: `commandName.groupName.subcommandName` (e.g. `config.set.prefix`).\n\t\t * @since 5.1.0\n\t\t * @default \"No cooldown options\"\n\t\t */\n\t\tsubcommandDefaultCooldown?: CooldownOptions;\n\t}\n}\n\ndeclare module '@sapphire/framework' {\n\tinterface Preconditions {\n\t\tPluginSubcommandCooldown: SubcommandPreconditions.PluginSubcommandCooldownContext;\n\t}\n}\n\n/**\n * The preconditions specific to subcommands\n * @since 5.1.0\n */\nexport const SubcommandPreconditions = {\n\tPluginSubcommandCooldown\n};\n\n/**\n * The preconditions specific to subcommands\n * @since 5.1.0\n */\nexport namespace SubcommandPreconditions {\n\t/** The context for the subcommand cooldown precondition */\n\texport type PluginSubcommandCooldownContext = PluginSubcommandCooldownPreconditionContext;\n}\n\n/**\n * The [@sapphire/plugin-subcommands](https://github.com/sapphiredev/plugins/blob/main/packages/subcommands) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '6.0.4-next.68a7a96.0';\n"]}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["PluginSubcommandCooldown"],"mappings":";;;;;;;;;;;;AAoDO,IAAM,uBAA0B,GAAA;AAAA,4BACtCA,kBAAA;AACD,EAAA;AAoBO,IAAM,OAAkB,GAAA","file":"index.mjs","sourcesContent":["import type { CooldownOptions } from '@sapphire/framework';\nimport {\n\tPluginPrecondition as PluginSubcommandCooldown,\n\ttype PluginSubcommandCooldownPreconditionContext\n} from './preconditions/PluginSubcommandCooldown';\n\nexport * from './lib/Subcommand';\nexport * as SubcommandPreconditionResolvers from './lib/precondition-resolvers/subcommandCooldown';\nexport * from './lib/types/Enums';\nexport * from './lib/types/Events';\nexport * from './lib/types/SubcommandMappings';\nexport {\n\tPluginPrecondition as PluginSubcommandCooldownPrecondition,\n\ttype PluginSubcommandCooldownPreconditionContext\n} from './preconditions/PluginSubcommandCooldown';\n\nexport { loadListeners } from './listeners/_load';\nexport { loadPreconditions } from './preconditions/_load';\n\ndeclare module 'discord.js' {\n\tinterface ClientOptions {\n\t\t/**\n\t\t * If Plugin-subcommand to load pre-included subcommand error event listeners that log any encountered errors to the {@link SapphireClient.logger} instance\n\t\t * @since 3.1.2\n\t\t * @default true\n\t\t */\n\t\tloadSubcommandErrorListeners?: boolean;\n\t\t/**\n\t\t * Sets the default cooldown time for all subcommands.\n\t\t * @remark This is separate from {@link ClientOptions.defaultCooldown} as it is only used for subcommands\n\t\t * @remark Note that for the `filteredCommands` option you have to provide it as\n\t\t * - For a subcommand without a group: `commandName.subcommandName` (e.g. `config.show`).\n\t\t * - For a subcommand with a group: `commandName.groupName.subcommandName` (e.g. `config.set.prefix`).\n\t\t * @since 5.1.0\n\t\t * @default \"No cooldown options\"\n\t\t */\n\t\tsubcommandDefaultCooldown?: CooldownOptions;\n\t}\n}\n\ndeclare module '@sapphire/framework' {\n\tinterface Preconditions {\n\t\tPluginSubcommandCooldown: SubcommandPreconditions.PluginSubcommandCooldownContext;\n\t}\n}\n\n/**\n * The preconditions specific to subcommands\n * @since 5.1.0\n * @deprecated - This will be replaced with a regular top level export of {@link PluginSubcommandCooldown}\n * in the next major version as opposed to a namespaced export.\n */\nexport const SubcommandPreconditions = {\n\tPluginSubcommandCooldown\n};\n\n/**\n * The preconditions specific to subcommands\n * @since 5.1.0\n * @deprecated - This will be replaced with a regular top level export of {@link PluginSubcommandCooldownPreconditionContext}\n * in the next major version as opposed to a namespaced export.\n */\nexport namespace SubcommandPreconditions {\n\t/** The context for the subcommand cooldown precondition */\n\texport type PluginSubcommandCooldownContext = PluginSubcommandCooldownPreconditionContext;\n}\n\n/**\n * The [@sapphire/plugin-subcommands](https://github.com/sapphiredev/plugins/blob/main/packages/subcommands) version that you are currently using.\n * An example use of this is showing it of in a bot information command.\n *\n * Note to Sapphire developers: This needs to explicitly be `string` so it is not typed as the string that gets replaced by esbuild\n */\n// eslint-disable-next-line @typescript-eslint/no-inferrable-types\nexport const version: string = '6.0.4-next.7829696';\n"]}
@@ -1,18 +1,14 @@
1
- import { __name, __privateAdd, __publicField, __privateMethod } from '../chunk-K3DKV2RO.mjs';
1
+ import { __name, __privateAdd, __publicField, __privateMethod } from '../chunk-3IXKS7M5.mjs';
2
2
  import { Command, PreconditionContainerArray, PreconditionResolvers, UserError, Result } from '@sapphire/framework';
3
3
  import { deepClone, cast } from '@sapphire/utilities';
4
4
  import { SubcommandPreconditionResolvers } from '../index.mjs';
5
5
  import { SubcommandPluginIdentifiers, SubcommandPluginEvents } from './types/Events.mjs';
6
6
 
7
- var _getMessageParametersAsString, getMessageParametersAsString_fn, _handleMessageRun, handleMessageRun_fn, _handleChatInputInteractionRun, handleChatInputInteractionRun_fn, _findSubcommand, findSubcommand_fn, _supportsCommandType, supportsCommandType_fn;
7
+ var _Subcommand_instances, getMessageParametersAsString_fn, handleMessageRun_fn, handleChatInputInteractionRun_fn, findSubcommand_fn, supportsCommandType_fn;
8
8
  var _Subcommand = class _Subcommand extends Command {
9
9
  constructor(context, options) {
10
10
  super(context, options);
11
- __privateAdd(this, _getMessageParametersAsString);
12
- __privateAdd(this, _handleMessageRun);
13
- __privateAdd(this, _handleChatInputInteractionRun);
14
- __privateAdd(this, _findSubcommand);
15
- __privateAdd(this, _supportsCommandType);
11
+ __privateAdd(this, _Subcommand_instances);
16
12
  /**
17
13
  * The preconditions to be run for each specified subcommand.
18
14
  * @since 4.1.0
@@ -155,14 +151,14 @@ var _Subcommand = class _Subcommand extends Command {
155
151
  * @returns `true` if this command has message-based subcommands, otherwise `false`
156
152
  */
157
153
  supportsMessageCommands() {
158
- return __privateMethod(this, _supportsCommandType, supportsCommandType_fn).call(this, "messageRun");
154
+ return __privateMethod(this, _Subcommand_instances, supportsCommandType_fn).call(this, "messageRun");
159
155
  }
160
156
  /**
161
157
  * Whether this command has chat input subcommands or not
162
158
  * @returns `true` if this command has chat input subcommands, otherwise `false`
163
159
  */
164
160
  supportsChatInputCommands() {
165
- return __privateMethod(this, _supportsCommandType, supportsCommandType_fn).call(this, "chatInputRun");
161
+ return __privateMethod(this, _Subcommand_instances, supportsCommandType_fn).call(this, "chatInputRun");
166
162
  }
167
163
  /**
168
164
  * The method that is ran when a message-based subcommand is ran.
@@ -193,7 +189,7 @@ var _Subcommand = class _Subcommand extends Command {
193
189
  const unwrappedSubcommandGroupName = subcommandOrGroup.unwrap();
194
190
  const unwrappedSubcommandName = subcommandName.unwrap();
195
191
  if (mapping.name === unwrappedSubcommandGroupName) {
196
- const findResult = __privateMethod(this, _findSubcommand, findSubcommand_fn).call(this, mapping.entries, this.caseInsensitiveSubcommands ? unwrappedSubcommandName.toLowerCase() : unwrappedSubcommandName);
192
+ const findResult = __privateMethod(this, _Subcommand_instances, findSubcommand_fn).call(this, mapping.entries, this.caseInsensitiveSubcommands ? unwrappedSubcommandName.toLowerCase() : unwrappedSubcommandName);
197
193
  if (findResult.defaultMatch) {
198
194
  defaultCommand = findResult.mapping;
199
195
  matchedWithGroupedSubcommand = true;
@@ -213,7 +209,7 @@ var _Subcommand = class _Subcommand extends Command {
213
209
  subcommandGroupName = subcommandOrGroup.unwrap();
214
210
  args.next();
215
211
  }
216
- return __privateMethod(this, _handleMessageRun, handleMessageRun_fn).call(this, message, args, context, actualSubcommandToRun, subcommandGroupName);
212
+ return __privateMethod(this, _Subcommand_instances, handleMessageRun_fn).call(this, message, args, context, actualSubcommandToRun, subcommandGroupName);
217
213
  }
218
214
  if (defaultCommand) {
219
215
  let subcommandGroupName = void 0;
@@ -221,7 +217,7 @@ var _Subcommand = class _Subcommand extends Command {
221
217
  subcommandGroupName = subcommandOrGroup.unwrap();
222
218
  args.next();
223
219
  }
224
- return __privateMethod(this, _handleMessageRun, handleMessageRun_fn).call(this, message, args, context, defaultCommand, subcommandGroupName);
220
+ return __privateMethod(this, _Subcommand_instances, handleMessageRun_fn).call(this, message, args, context, defaultCommand, subcommandGroupName);
225
221
  }
226
222
  throw new UserError({
227
223
  identifier: SubcommandPluginIdentifiers.MessageSubcommandNoMatch,
@@ -244,18 +240,16 @@ var _Subcommand = class _Subcommand extends Command {
244
240
  for (const mapping of this.parsedSubcommandMappings) {
245
241
  mapping.type ??= "method";
246
242
  if (subcommandGroupName && subcommandName) {
247
- if (mapping.type !== "group")
248
- continue;
249
- if (mapping.name !== subcommandGroupName)
250
- continue;
251
- const foundSubcommand = __privateMethod(this, _findSubcommand, findSubcommand_fn).call(this, mapping.entries, subcommandName);
243
+ if (mapping.type !== "group") continue;
244
+ if (mapping.name !== subcommandGroupName) continue;
245
+ const foundSubcommand = __privateMethod(this, _Subcommand_instances, findSubcommand_fn).call(this, mapping.entries, subcommandName);
252
246
  if (!foundSubcommand.defaultMatch) {
253
- return __privateMethod(this, _handleChatInputInteractionRun, handleChatInputInteractionRun_fn).call(this, interaction, context, foundSubcommand.mapping, subcommandGroupName);
247
+ return __privateMethod(this, _Subcommand_instances, handleChatInputInteractionRun_fn).call(this, interaction, context, foundSubcommand.mapping, subcommandGroupName);
254
248
  }
255
249
  continue;
256
250
  }
257
251
  if (mapping.type === "method" && mapping.name === subcommandName) {
258
- return __privateMethod(this, _handleChatInputInteractionRun, handleChatInputInteractionRun_fn).call(this, interaction, context, mapping, void 0);
252
+ return __privateMethod(this, _Subcommand_instances, handleChatInputInteractionRun_fn).call(this, interaction, context, mapping, void 0);
259
253
  }
260
254
  }
261
255
  throw new UserError({
@@ -265,7 +259,7 @@ var _Subcommand = class _Subcommand extends Command {
265
259
  });
266
260
  }
267
261
  };
268
- _getMessageParametersAsString = new WeakSet();
262
+ _Subcommand_instances = new WeakSet();
269
263
  getMessageParametersAsString_fn = /* @__PURE__ */ __name(async function(args) {
270
264
  args.save();
271
265
  const parameters = await args.restResult("string");
@@ -276,7 +270,6 @@ getMessageParametersAsString_fn = /* @__PURE__ */ __name(async function(args) {
276
270
  }
277
271
  return params;
278
272
  }, "#getMessageParametersAsString");
279
- _handleMessageRun = new WeakSet();
280
273
  handleMessageRun_fn = /* @__PURE__ */ __name(async function(message, args, context, subcommand, subcommandGroupName) {
281
274
  const payload = {
282
275
  message,
@@ -288,7 +281,7 @@ handleMessageRun_fn = /* @__PURE__ */ __name(async function(message, args, conte
288
281
  subcommandGroupName ? `${subcommandGroupName}.${subcommand.name}` : subcommand.name
289
282
  );
290
283
  if (preconditionsForSubcommand) {
291
- const messageParametersAsString = await __privateMethod(this, _getMessageParametersAsString, getMessageParametersAsString_fn).call(this, args);
284
+ const messageParametersAsString = await __privateMethod(this, _Subcommand_instances, getMessageParametersAsString_fn).call(this, args);
292
285
  const preconditionPayload = { ...messageParametersAsString, ...payload };
293
286
  const localSubcommandResult = await preconditionsForSubcommand.messageRun(message, this, preconditionPayload);
294
287
  if (localSubcommandResult.isErr()) {
@@ -321,7 +314,6 @@ handleMessageRun_fn = /* @__PURE__ */ __name(async function(message, args, conte
321
314
  });
322
315
  result.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.MessageSubcommandError, error, payload));
323
316
  }, "#handleMessageRun");
324
- _handleChatInputInteractionRun = new WeakSet();
325
317
  handleChatInputInteractionRun_fn = /* @__PURE__ */ __name(async function(interaction, context, subcommand, subcommandGroupName) {
326
318
  const payload = {
327
319
  command: this,
@@ -369,7 +361,6 @@ handleChatInputInteractionRun_fn = /* @__PURE__ */ __name(async function(interac
369
361
  });
370
362
  result.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandError, error, payload));
371
363
  }, "#handleChatInputInteractionRun");
372
- _findSubcommand = new WeakSet();
373
364
  findSubcommand_fn = /* @__PURE__ */ __name(function(mappings, expectedName) {
374
365
  let foundDefault = null;
375
366
  for (const mapping of mappings) {
@@ -383,7 +374,6 @@ findSubcommand_fn = /* @__PURE__ */ __name(function(mappings, expectedName) {
383
374
  }
384
375
  return { mapping: foundDefault, defaultMatch: true };
385
376
  }, "#findSubcommand");
386
- _supportsCommandType = new WeakSet();
387
377
  supportsCommandType_fn = /* @__PURE__ */ __name(function(commandType) {
388
378
  return this.parsedSubcommandMappings.some((mapping) => {
389
379
  if (mapping.type === "group") {
@@ -396,5 +386,5 @@ __name(_Subcommand, "Subcommand");
396
386
  var Subcommand = _Subcommand;
397
387
 
398
388
  export { Subcommand };
399
- //# sourceMappingURL=out.js.map
389
+ //# sourceMappingURL=Subcommand.mjs.map
400
390
  //# sourceMappingURL=Subcommand.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/Subcommand.ts"],"names":["result"],"mappings":"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","sourcesContent":["import {\n\tCommand,\n\tPreconditionContainerArray,\n\tPreconditionResolvers,\n\tResult,\n\tUserError,\n\ttype Args,\n\ttype ChatInputCommand,\n\ttype MessageCommand,\n\ttype MessageCommandDeniedPayload\n} from '@sapphire/framework';\nimport { cast, deepClone } from '@sapphire/utilities';\nimport type { CacheType, Message } from 'discord.js';\nimport { SubcommandPreconditionResolvers } from '../index';\nimport {\n\tSubcommandPluginEvents,\n\tSubcommandPluginIdentifiers,\n\ttype ChatInputSubcommandAcceptedPayload,\n\ttype MessageSubcommandAcceptedPayload\n} from './types/Events';\nimport type {\n\tChatInputCommandSubcommandMappingMethod,\n\tMessageSubcommandMappingMethod,\n\tSubcommandMappingArray,\n\tSubcommandMappingMethod\n} from './types/SubcommandMappings';\n\n/**\n * The class to extends for commands that have subcommands.\n * Specify the subcommands through the {@link Subcommand.Options.subcommands} option.\n *\n * Note that you should not make **all** your commands extend this class, _only_ the ones that have subcommands.\n * The reason for this is that this class implements {@link Command.messageRun} and {@link Command.chatInputRun}\n * which you wouldn't necessarily want to do for commands that don't have subcommands.\n * Furthermore, it also just adds general unnecessary memory overhead.\n */\nexport class Subcommand<PreParseReturn extends Args = Args, Options extends Subcommand.Options = Subcommand.Options> extends Command<\n\tPreParseReturn,\n\tOptions\n> {\n\t/**\n\t * The preconditions to be run for each specified subcommand.\n\t * @since 4.1.0\n\t */\n\tpublic readonly subcommandPreconditions = new Map<string, PreconditionContainerArray>();\n\n\t/**\n\t * The parsed subcommand mappings that were provided with the {@link SubcommandOptions.subcommands} option.\n\t * This is built at construction time and is used to determine which subcommand to run.\n\t */\n\tpublic parsedSubcommandMappings: SubcommandMappingArray;\n\n\t/**\n\t * Whether to use case insensitive subcommands. This is only relevant for message-command styled commands as\n\t * chat input commands are always lowercase. This can be enabled through `clientOptions.caseInsensitiveCommands`.\n\t */\n\tpublic caseInsensitiveSubcommands = false;\n\n\tpublic constructor(context: Subcommand.LoaderContext, options: Options) {\n\t\t// #region Base parsing\n\t\tsuper(context, options);\n\t\tthis.parsedSubcommandMappings = options.subcommands ?? [];\n\n\t\tconst clientOptions = this.container.client.options;\n\t\t// #endregion\n\n\t\t// #region Case Insensitive Commands\n\t\tif (clientOptions.caseInsensitiveCommands) {\n\t\t\tthis.caseInsensitiveSubcommands = true;\n\n\t\t\t// Because slash commands must be lowercase anyway, we can transform all to lowercase.\n\t\t\tfor (const cmd of this.parsedSubcommandMappings) {\n\t\t\t\tcmd.name = cmd.name.toLowerCase();\n\t\t\t\tif (cmd.type === 'group') {\n\t\t\t\t\tfor (const groupCommand of cmd.entries) {\n\t\t\t\t\t\tgroupCommand.name = groupCommand.name.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\n\t\t// #region Generate Dashless Aliases\n\t\tif (options.generateDashLessAliases) {\n\t\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\t\tif (!Reflect.has(mapping, 'messageRun')) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst dashLessMappings: SubcommandMappingArray = [];\n\n\t\t\t\tif (mapping.type === 'group') {\n\t\t\t\t\t// Keep track of whether we have changed entries or not, so we don't need to do expensive object comparison later.\n\t\t\t\t\tlet hasChangedEntries: boolean | null = null;\n\n\t\t\t\t\t// Deeply clone the entire mapping to avoid mutating the original.\n\t\t\t\t\tconst clonedMapping = deepClone(mapping);\n\n\t\t\t\t\t// Loop through the group's subcommands and add a dash-less alias for each, if applicable.\n\t\t\t\t\tfor (const groupCommand of mapping.entries) {\n\t\t\t\t\t\tif (groupCommand.name.includes('-')) {\n\t\t\t\t\t\t\t// If we are inside this if statement then we flip `hasChangedEntries` to true to be able to read it later.\n\t\t\t\t\t\t\thasChangedEntries ??= true;\n\n\t\t\t\t\t\t\tclonedMapping.entries.push({\n\t\t\t\t\t\t\t\t...groupCommand,\n\t\t\t\t\t\t\t\tname: groupCommand.name.replaceAll('-', '')\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * If any of the entries in the group had a dash then `hasChangedEntries` was flipped to true\n\t\t\t\t\t * and so we want to register a mapping with the base name and all dash-less entries\n\t\t\t\t\t * in the group.\n\t\t\t\t\t */\n\t\t\t\t\tif (hasChangedEntries) {\n\t\t\t\t\t\tdashLessMappings.push({\n\t\t\t\t\t\t\t...mapping,\n\t\t\t\t\t\t\tentries: clonedMapping.entries\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * If the group name itself has a dash then register a dash-less copy of it.\n\t\t\t\t\t * If the entries in the group didn't have any dashes then `clonedMapping.entries` is still\n\t\t\t\t\t * the same original array, so it can be safely overwritten.\n\t\t\t\t\t *\n\t\t\t\t\t * If the entries in the group did have any dashes then `clonedMapping.entries` has\n\t\t\t\t\t * all entries both with and without dashes.\n\t\t\t\t\t */\n\t\t\t\t\tif (clonedMapping.name.includes('-')) {\n\t\t\t\t\t\tclonedMapping.name = clonedMapping.name.replaceAll('-', '');\n\t\t\t\t\t\tdashLessMappings.push(clonedMapping);\n\t\t\t\t\t}\n\t\t\t\t} else if (mapping.name.includes('-')) {\n\t\t\t\t\tdashLessMappings.push({\n\t\t\t\t\t\t...mapping,\n\t\t\t\t\t\tname: mapping.name.replaceAll('-', '')\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// For every dash-less mapping, push a new subcommand\n\t\t\t\tfor (const dashLessMapping of dashLessMappings) {\n\t\t\t\t\tthis.parsedSubcommandMappings.push(dashLessMapping);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\n\t\t// #region Subcommand Preconditions\n\t\tfor (const subcommand of this.parsedSubcommandMappings) {\n\t\t\tsubcommand.type ??= 'method';\n\n\t\t\tif (subcommand.type === 'method') {\n\t\t\t\tconst preconditionContainerArray = new PreconditionContainerArray(subcommand.preconditions);\n\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRunIn(\n\t\t\t\t\tsubcommand.runIn,\n\t\t\t\t\tthis.resolveConstructorPreConditionsRunType.bind(this),\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsNsfw(subcommand.nsfw, preconditionContainerArray);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredClientPermissions(\n\t\t\t\t\tsubcommand.requiredClientPermissions,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredUserPermissions(\n\t\t\t\t\tsubcommand.requiredUserPermissions,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tSubcommandPreconditionResolvers.parseSubcommandConstructorPreConditionsCooldown({\n\t\t\t\t\tsubcommand: this,\n\t\t\t\t\tcooldownDelay: subcommand.cooldownDelay,\n\t\t\t\t\tcooldownFilteredUsers: subcommand.cooldownFilteredUsers,\n\t\t\t\t\tcooldownLimit: subcommand.cooldownLimit,\n\t\t\t\t\tcooldownScope: subcommand.cooldownScope,\n\t\t\t\t\tsubcommandMethodName: subcommand.name,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t});\n\n\t\t\t\tthis.subcommandPreconditions.set(subcommand.name, preconditionContainerArray);\n\t\t\t}\n\n\t\t\tif (subcommand.type === 'group') {\n\t\t\t\tfor (const groupedSubcommand of subcommand.entries) {\n\t\t\t\t\tconst preconditionContainerArray = new PreconditionContainerArray(groupedSubcommand.preconditions);\n\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRunIn(\n\t\t\t\t\t\tgroupedSubcommand.runIn,\n\t\t\t\t\t\tthis.resolveConstructorPreConditionsRunType.bind(this),\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsNsfw(groupedSubcommand.nsfw, preconditionContainerArray);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredClientPermissions(\n\t\t\t\t\t\tgroupedSubcommand.requiredClientPermissions,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredUserPermissions(\n\t\t\t\t\t\tgroupedSubcommand.requiredUserPermissions,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tSubcommandPreconditionResolvers.parseSubcommandConstructorPreConditionsCooldown({\n\t\t\t\t\t\tsubcommand: this,\n\t\t\t\t\t\tcooldownDelay: groupedSubcommand.cooldownDelay,\n\t\t\t\t\t\tcooldownFilteredUsers: groupedSubcommand.cooldownFilteredUsers,\n\t\t\t\t\t\tcooldownLimit: groupedSubcommand.cooldownLimit,\n\t\t\t\t\t\tcooldownScope: groupedSubcommand.cooldownScope,\n\t\t\t\t\t\tsubcommandGroupName: subcommand.name,\n\t\t\t\t\t\tsubcommandMethodName: groupedSubcommand.name,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.subcommandPreconditions.set(`${subcommand.name}.${groupedSubcommand.name}`, preconditionContainerArray);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\t}\n\n\tpublic override onLoad() {\n\t\tsuper.onLoad();\n\n\t\tconst externalMapping = Reflect.get(this, 'subcommandMappings');\n\t\tif (externalMapping) {\n\t\t\tconst subcommands = Array.isArray(externalMapping) ? externalMapping : [];\n\t\t\tthis.parsedSubcommandMappings = subcommands;\n\t\t\tthis.options.subcommands = subcommands;\n\t\t}\n\t}\n\n\t/**\n\t * Whether this command has message-based subcommands or not\n\t * @returns `true` if this command has message-based subcommands, otherwise `false`\n\t */\n\tpublic override supportsMessageCommands(): boolean {\n\t\treturn this.#supportsCommandType('messageRun');\n\t}\n\n\t/**\n\t * Whether this command has chat input subcommands or not\n\t * @returns `true` if this command has chat input subcommands, otherwise `false`\n\t */\n\tpublic override supportsChatInputCommands(): this is ChatInputCommand {\n\t\treturn this.#supportsCommandType('chatInputRun');\n\t}\n\n\t/**\n\t * The method that is ran when a message-based subcommand is ran.\n\t *\n\t * **DO NOT** override this in your implementation of a subcommand!\n\t */\n\tpublic override async messageRun(message: Message, args: PreParseReturn, context: MessageCommand.RunContext) {\n\t\targs.save();\n\t\tconst subcommandOrGroup = args.nextMaybe();\n\t\tconst subcommandName = args.nextMaybe();\n\t\tlet defaultCommand: SubcommandMappingMethod | null = null;\n\t\tlet actualSubcommandToRun: SubcommandMappingMethod | null = null;\n\t\tlet matchedWithGroupedSubcommand = false;\n\n\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\tif (mapping.type === 'method') {\n\t\t\t\tif (mapping.default && !defaultCommand) {\n\t\t\t\t\tmatchedWithGroupedSubcommand = false;\n\t\t\t\t\tdefaultCommand = mapping;\n\t\t\t\t}\n\n\t\t\t\tif (subcommandOrGroup.isSomeAnd((value) => mapping.name === (this.caseInsensitiveSubcommands ? value.toLowerCase() : value))) {\n\t\t\t\t\tactualSubcommandToRun = mapping;\n\t\t\t\t\tmatchedWithGroupedSubcommand = false;\n\t\t\t\t\t// Exit early\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We expect a group mapping\n\t\t\tif (mapping.type === 'group' && subcommandOrGroup.isSome() && subcommandName.isSome()) {\n\t\t\t\tconst unwrappedSubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\tconst unwrappedSubcommandName = subcommandName.unwrap();\n\n\t\t\t\t// We know a group was passed in here\n\t\t\t\tif (mapping.name === unwrappedSubcommandGroupName) {\n\t\t\t\t\t// Find the actual subcommand to run\n\t\t\t\t\tconst findResult = this.#findSubcommand(\n\t\t\t\t\t\tmapping.entries,\n\t\t\t\t\t\tthis.caseInsensitiveSubcommands ? unwrappedSubcommandName.toLowerCase() : unwrappedSubcommandName\n\t\t\t\t\t);\n\n\t\t\t\t\tif (findResult.defaultMatch) {\n\t\t\t\t\t\tdefaultCommand = findResult.mapping;\n\t\t\t\t\t\tmatchedWithGroupedSubcommand = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactualSubcommandToRun = findResult.mapping;\n\t\t\t\t\t\tmatchedWithGroupedSubcommand = true;\n\t\t\t\t\t\t// Exit early\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Preemptively restore the args state, to provide a correct args result for users\n\t\targs.restore();\n\n\t\tif (actualSubcommandToRun) {\n\t\t\t// Skip over the subcommandOrGroup\n\t\t\targs.next();\n\n\t\t\t// If we matched with a subcommand in a group we need to skip 1 more arg\n\t\t\tlet subcommandGroupName: string | undefined = undefined;\n\t\t\tif (matchedWithGroupedSubcommand) {\n\t\t\t\tsubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\targs.next();\n\t\t\t}\n\n\t\t\treturn this.#handleMessageRun(message, args, context, actualSubcommandToRun, subcommandGroupName);\n\t\t}\n\n\t\t// No subcommand matched, let's try to run default, if any:\n\t\tif (defaultCommand) {\n\t\t\t// If we matched with a subcommand in a group we need to skip 1 the group name\n\t\t\tlet subcommandGroupName: string | undefined = undefined;\n\t\t\tif (matchedWithGroupedSubcommand) {\n\t\t\t\tsubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\targs.next();\n\t\t\t}\n\n\t\t\treturn this.#handleMessageRun(message, args, context, defaultCommand, subcommandGroupName);\n\t\t}\n\n\t\t// No match and no subcommand, return an err:\n\t\tthrow new UserError({\n\t\t\tidentifier: SubcommandPluginIdentifiers.MessageSubcommandNoMatch,\n\t\t\tmessage: 'No subcommand was matched with the provided arguments.',\n\t\t\tcontext: {\n\t\t\t\t...context,\n\t\t\t\tpossibleSubcommandName: subcommandName.unwrapOr(null),\n\t\t\t\tpossibleSubcommandGroupOrName: subcommandOrGroup.unwrapOr(null)\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * The method that is ran when a chat input based subcommand is ran.\n\t *\n\t * **DO NOT** override this in your implementation of a subcommand!\n\t */\n\tpublic override async chatInputRun(interaction: ChatInputCommand.Interaction, context: ChatInputCommand.RunContext) {\n\t\tconst subcommandName = interaction.options.getSubcommand(false);\n\t\tconst subcommandGroupName = interaction.options.getSubcommandGroup(false);\n\n\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\t// If we have a group, we know we also have a subcommand and we should find and run it\n\t\t\tif (subcommandGroupName && subcommandName) {\n\t\t\t\tif (mapping.type !== 'group') continue;\n\t\t\t\tif (mapping.name !== subcommandGroupName) continue;\n\n\t\t\t\tconst foundSubcommand = this.#findSubcommand(mapping.entries, subcommandName!);\n\n\t\t\t\t// Only run if its not the \"default\" found command mapping, as interactions don't have that\n\t\t\t\tif (!foundSubcommand.defaultMatch) {\n\t\t\t\t\treturn this.#handleChatInputInteractionRun(interaction, context, foundSubcommand.mapping, subcommandGroupName);\n\t\t\t\t}\n\n\t\t\t\t// Skip to the next entry\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If we have a direct subcommand, and no group, then run the mapping\n\t\t\tif (mapping.type === 'method' && mapping.name === subcommandName) {\n\t\t\t\treturn this.#handleChatInputInteractionRun(interaction, context, mapping, undefined);\n\t\t\t}\n\t\t}\n\n\t\t// No match and no subcommand, return an err:\n\t\tthrow new UserError({\n\t\t\tidentifier: SubcommandPluginIdentifiers.ChatInputSubcommandNoMatch,\n\t\t\tmessage: 'No subcommand was matched with the provided command.',\n\t\t\tcontext\n\t\t});\n\t}\n\n\tasync #getMessageParametersAsString(args: Args): Promise<Partial<Pick<MessageCommandDeniedPayload, 'parameters'>>> {\n\t\targs.save();\n\t\tconst parameters = await args.restResult('string');\n\t\targs.restore();\n\n\t\tconst params: Partial<Pick<MessageCommandDeniedPayload, 'parameters'>> = {};\n\n\t\tif (parameters.isOk()) {\n\t\t\tparams.parameters = parameters.unwrap();\n\t\t}\n\n\t\treturn params;\n\t}\n\n\tasync #handleMessageRun(\n\t\tmessage: Message,\n\t\targs: Args,\n\t\tcontext: MessageCommand.RunContext,\n\t\tsubcommand: SubcommandMappingMethod,\n\t\tsubcommandGroupName: string | undefined\n\t) {\n\t\tconst payload: MessageSubcommandAcceptedPayload = {\n\t\t\tmessage,\n\t\t\tcommand: this,\n\t\t\tcontext,\n\t\t\tmatchedSubcommandMapping: subcommand\n\t\t};\n\n\t\t// Check if any subcommand preconditions were defined for thus subcommand:\n\t\tconst preconditionsForSubcommand = this.subcommandPreconditions.get(\n\t\t\tsubcommandGroupName ? `${subcommandGroupName}.${subcommand.name}` : subcommand.name\n\t\t);\n\n\t\tif (preconditionsForSubcommand) {\n\t\t\t// Attempt to get the remaining parameters as string:\n\t\t\tconst messageParametersAsString = await this.#getMessageParametersAsString(args);\n\n\t\t\t// Build the precondition payload:\n\t\t\tconst preconditionPayload = { ...messageParametersAsString, ...payload };\n\n\t\t\t// Run the subcommand specific preconditions:\n\t\t\tconst localSubcommandResult = await preconditionsForSubcommand.messageRun(message, this, preconditionPayload as any);\n\t\t\tif (localSubcommandResult.isErr()) {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandDenied, localSubcommandResult.unwrapErr(), preconditionPayload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If subcommand preconditions have passed then we run the actual subcommand:\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tif (subcommand.messageRun) {\n\t\t\t\tconst casted = subcommand as MessageSubcommandMappingMethod;\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandRun, message, casted, payload);\n\t\t\t\tlet result: unknown;\n\n\t\t\t\tif (typeof subcommand.messageRun === 'string') {\n\t\t\t\t\tconst method = Reflect.get(this, subcommand.messageRun);\n\t\t\t\t\tif (!method) {\n\t\t\t\t\t\tthrow new UserError({\n\t\t\t\t\t\t\tidentifier: SubcommandPluginIdentifiers.SubcommandNotFound,\n\t\t\t\t\t\t\tmessage: `The method configured at \"messageRun\" for the subcommand ${subcommand.name} was not implemented in the class.`,\n\t\t\t\t\t\t\tcontext: { ...payload }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = await Reflect.apply(cast<this['messageRun']>(method), this, [message, args, context]);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await subcommand.messageRun(message, args, context);\n\t\t\t\t}\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandSuccess, message, casted, { ...payload, result });\n\t\t\t} else {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.SubcommandMappingIsMissingMessageCommandHandler, message, subcommand, payload);\n\t\t\t}\n\t\t});\n\n\t\tresult.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.MessageSubcommandError, error, payload));\n\t}\n\n\tasync #handleChatInputInteractionRun(\n\t\tinteraction: ChatInputCommand.Interaction,\n\t\tcontext: ChatInputCommand.RunContext,\n\t\tsubcommand: SubcommandMappingMethod,\n\t\tsubcommandGroupName: string | undefined\n\t) {\n\t\tconst payload: ChatInputSubcommandAcceptedPayload = {\n\t\t\tcommand: this,\n\t\t\tcontext,\n\t\t\tinteraction,\n\t\t\tmatchedSubcommandMapping: subcommand\n\t\t};\n\n\t\t// Check if any subcommand preconditions were defined for thus subcommand:\n\t\tconst preconditionsForSubcommand = this.subcommandPreconditions.get(\n\t\t\tsubcommandGroupName ? `${subcommandGroupName}.${subcommand.name}` : subcommand.name\n\t\t);\n\n\t\tif (preconditionsForSubcommand) {\n\t\t\t// Run the subcommand specific preconditions:\n\t\t\tconst localSubcommandResult = await preconditionsForSubcommand.chatInputRun(interaction, this, payload as any);\n\t\t\tif (localSubcommandResult.isErr()) {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandDenied, localSubcommandResult.unwrapErr(), payload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tif (subcommand.chatInputRun) {\n\t\t\t\tconst casted = subcommand as ChatInputCommandSubcommandMappingMethod;\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandRun, interaction, casted, payload);\n\t\t\t\tlet result: unknown;\n\n\t\t\t\tif (typeof subcommand.chatInputRun === 'string') {\n\t\t\t\t\tconst method = Reflect.get(this, subcommand.chatInputRun);\n\t\t\t\t\tif (!method) {\n\t\t\t\t\t\tthrow new UserError({\n\t\t\t\t\t\t\tidentifier: SubcommandPluginIdentifiers.SubcommandNotFound,\n\t\t\t\t\t\t\tmessage: `The method configured at \"chatInputRun\" for the subcommand ${subcommand.name} was not implemented in the class.`,\n\t\t\t\t\t\t\tcontext: { ...payload }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = await Reflect.apply(cast<this['chatInputRun']>(method), this, [interaction, context]);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await subcommand.chatInputRun(interaction, context);\n\t\t\t\t}\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandSuccess, interaction, casted, { ...payload, result });\n\t\t\t} else {\n\t\t\t\tthis.container.client.emit(\n\t\t\t\t\tSubcommandPluginEvents.SubcommandMappingIsMissingChatInputCommandHandler,\n\t\t\t\t\tinteraction,\n\t\t\t\t\tsubcommand,\n\t\t\t\t\tpayload\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tresult.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandError, error, payload));\n\t}\n\n\t#findSubcommand(mappings: SubcommandMappingMethod[], expectedName: string) {\n\t\tlet foundDefault: SubcommandMappingMethod | null = null;\n\n\t\tfor (const mapping of mappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\tif (mapping.default) {\n\t\t\t\tfoundDefault = mapping;\n\t\t\t}\n\n\t\t\tif (mapping.name === expectedName) {\n\t\t\t\treturn { mapping, defaultMatch: false } as const;\n\t\t\t}\n\t\t}\n\n\t\treturn { mapping: foundDefault, defaultMatch: true } as const;\n\t}\n\n\t#supportsCommandType(commandType: 'messageRun' | 'chatInputRun'): boolean {\n\t\treturn this.parsedSubcommandMappings.some((mapping) => {\n\t\t\tif (mapping.type === 'group') {\n\t\t\t\treturn mapping.entries.some((groupCommand) => Reflect.has(groupCommand, commandType));\n\t\t\t}\n\t\t\treturn Reflect.has(mapping, commandType);\n\t\t});\n\t}\n}\n\nexport interface SubcommandOptions extends Command.Options {\n\tsubcommands?: SubcommandMappingArray;\n\t/**\n\t * Whether to add aliases for subcommands with dashes in them\n\t *\n\t * When this option is enabled *and* the subcommand implements `messageRun`, dashless aliases will be added.\n\t *\n\t * For subcommands groups both the group itself and all subcommands within the group will have dashless aliases added.\n\t *\n\t * @since 3.0.0\n\t * @default false\n\t */\n\tgenerateDashLessAliases?: boolean;\n}\n\nexport namespace Subcommand {\n\texport type Options = SubcommandOptions;\n\texport type JSON = Command.JSON;\n\t/** @deprecated Use {@linkcode LoaderContext} instead. */\n\texport type Context = LoaderContext;\n\texport type LoaderContext = Command.LoaderContext;\n\texport type RunInTypes = Command.RunInTypes;\n\texport type ChatInputCommandInteraction<Cached extends CacheType = CacheType> = Command.ChatInputCommandInteraction<Cached>;\n\texport type ContextMenuCommandInteraction<Cached extends CacheType = CacheType> = Command.ContextMenuCommandInteraction<Cached>;\n\texport type AutocompleteInteraction<Cached extends CacheType = CacheType> = Command.AutocompleteInteraction<Cached>;\n\texport type Registry = Command.Registry;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/lib/Subcommand.ts"],"names":["result"],"mappings":"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","file":"Subcommand.mjs","sourcesContent":["import {\n\tCommand,\n\tPreconditionContainerArray,\n\tPreconditionResolvers,\n\tResult,\n\tUserError,\n\ttype Args,\n\ttype ChatInputCommand,\n\ttype MessageCommand,\n\ttype MessageCommandDeniedPayload\n} from '@sapphire/framework';\nimport { cast, deepClone } from '@sapphire/utilities';\nimport type { CacheType, Message } from 'discord.js';\nimport { SubcommandPreconditionResolvers } from '../index';\nimport {\n\tSubcommandPluginEvents,\n\tSubcommandPluginIdentifiers,\n\ttype ChatInputSubcommandAcceptedPayload,\n\ttype MessageSubcommandAcceptedPayload\n} from './types/Events';\nimport type {\n\tChatInputCommandSubcommandMappingMethod,\n\tMessageSubcommandMappingMethod,\n\tSubcommandMappingArray,\n\tSubcommandMappingMethod\n} from './types/SubcommandMappings';\n\n/**\n * The class to extends for commands that have subcommands.\n * Specify the subcommands through the {@link Subcommand.Options.subcommands} option.\n *\n * Note that you should not make **all** your commands extend this class, _only_ the ones that have subcommands.\n * The reason for this is that this class implements {@link Command.messageRun} and {@link Command.chatInputRun}\n * which you wouldn't necessarily want to do for commands that don't have subcommands.\n * Furthermore, it also just adds general unnecessary memory overhead.\n */\nexport class Subcommand<PreParseReturn extends Args = Args, Options extends Subcommand.Options = Subcommand.Options> extends Command<\n\tPreParseReturn,\n\tOptions\n> {\n\t/**\n\t * The preconditions to be run for each specified subcommand.\n\t * @since 4.1.0\n\t */\n\tpublic readonly subcommandPreconditions = new Map<string, PreconditionContainerArray>();\n\n\t/**\n\t * The parsed subcommand mappings that were provided with the {@link SubcommandOptions.subcommands} option.\n\t * This is built at construction time and is used to determine which subcommand to run.\n\t */\n\tpublic parsedSubcommandMappings: SubcommandMappingArray;\n\n\t/**\n\t * Whether to use case insensitive subcommands. This is only relevant for message-command styled commands as\n\t * chat input commands are always lowercase. This can be enabled through `clientOptions.caseInsensitiveCommands`.\n\t */\n\tpublic caseInsensitiveSubcommands = false;\n\n\tpublic constructor(context: Subcommand.LoaderContext, options: Options) {\n\t\t// #region Base parsing\n\t\tsuper(context, options);\n\t\tthis.parsedSubcommandMappings = options.subcommands ?? [];\n\n\t\tconst clientOptions = this.container.client.options;\n\t\t// #endregion\n\n\t\t// #region Case Insensitive Commands\n\t\tif (clientOptions.caseInsensitiveCommands) {\n\t\t\tthis.caseInsensitiveSubcommands = true;\n\n\t\t\t// Because slash commands must be lowercase anyway, we can transform all to lowercase.\n\t\t\tfor (const cmd of this.parsedSubcommandMappings) {\n\t\t\t\tcmd.name = cmd.name.toLowerCase();\n\t\t\t\tif (cmd.type === 'group') {\n\t\t\t\t\tfor (const groupCommand of cmd.entries) {\n\t\t\t\t\t\tgroupCommand.name = groupCommand.name.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\n\t\t// #region Generate Dashless Aliases\n\t\tif (options.generateDashLessAliases) {\n\t\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\t\tif (!Reflect.has(mapping, 'messageRun')) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst dashLessMappings: SubcommandMappingArray = [];\n\n\t\t\t\tif (mapping.type === 'group') {\n\t\t\t\t\t// Keep track of whether we have changed entries or not, so we don't need to do expensive object comparison later.\n\t\t\t\t\tlet hasChangedEntries: boolean | null = null;\n\n\t\t\t\t\t// Deeply clone the entire mapping to avoid mutating the original.\n\t\t\t\t\tconst clonedMapping = deepClone(mapping);\n\n\t\t\t\t\t// Loop through the group's subcommands and add a dash-less alias for each, if applicable.\n\t\t\t\t\tfor (const groupCommand of mapping.entries) {\n\t\t\t\t\t\tif (groupCommand.name.includes('-')) {\n\t\t\t\t\t\t\t// If we are inside this if statement then we flip `hasChangedEntries` to true to be able to read it later.\n\t\t\t\t\t\t\thasChangedEntries ??= true;\n\n\t\t\t\t\t\t\tclonedMapping.entries.push({\n\t\t\t\t\t\t\t\t...groupCommand,\n\t\t\t\t\t\t\t\tname: groupCommand.name.replaceAll('-', '')\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * If any of the entries in the group had a dash then `hasChangedEntries` was flipped to true\n\t\t\t\t\t * and so we want to register a mapping with the base name and all dash-less entries\n\t\t\t\t\t * in the group.\n\t\t\t\t\t */\n\t\t\t\t\tif (hasChangedEntries) {\n\t\t\t\t\t\tdashLessMappings.push({\n\t\t\t\t\t\t\t...mapping,\n\t\t\t\t\t\t\tentries: clonedMapping.entries\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t/**\n\t\t\t\t\t * If the group name itself has a dash then register a dash-less copy of it.\n\t\t\t\t\t * If the entries in the group didn't have any dashes then `clonedMapping.entries` is still\n\t\t\t\t\t * the same original array, so it can be safely overwritten.\n\t\t\t\t\t *\n\t\t\t\t\t * If the entries in the group did have any dashes then `clonedMapping.entries` has\n\t\t\t\t\t * all entries both with and without dashes.\n\t\t\t\t\t */\n\t\t\t\t\tif (clonedMapping.name.includes('-')) {\n\t\t\t\t\t\tclonedMapping.name = clonedMapping.name.replaceAll('-', '');\n\t\t\t\t\t\tdashLessMappings.push(clonedMapping);\n\t\t\t\t\t}\n\t\t\t\t} else if (mapping.name.includes('-')) {\n\t\t\t\t\tdashLessMappings.push({\n\t\t\t\t\t\t...mapping,\n\t\t\t\t\t\tname: mapping.name.replaceAll('-', '')\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// For every dash-less mapping, push a new subcommand\n\t\t\t\tfor (const dashLessMapping of dashLessMappings) {\n\t\t\t\t\tthis.parsedSubcommandMappings.push(dashLessMapping);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\n\t\t// #region Subcommand Preconditions\n\t\tfor (const subcommand of this.parsedSubcommandMappings) {\n\t\t\tsubcommand.type ??= 'method';\n\n\t\t\tif (subcommand.type === 'method') {\n\t\t\t\tconst preconditionContainerArray = new PreconditionContainerArray(subcommand.preconditions);\n\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRunIn(\n\t\t\t\t\tsubcommand.runIn,\n\t\t\t\t\tthis.resolveConstructorPreConditionsRunType.bind(this),\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsNsfw(subcommand.nsfw, preconditionContainerArray);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredClientPermissions(\n\t\t\t\t\tsubcommand.requiredClientPermissions,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredUserPermissions(\n\t\t\t\t\tsubcommand.requiredUserPermissions,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t);\n\t\t\t\tSubcommandPreconditionResolvers.parseSubcommandConstructorPreConditionsCooldown({\n\t\t\t\t\tsubcommand: this,\n\t\t\t\t\tcooldownDelay: subcommand.cooldownDelay,\n\t\t\t\t\tcooldownFilteredUsers: subcommand.cooldownFilteredUsers,\n\t\t\t\t\tcooldownLimit: subcommand.cooldownLimit,\n\t\t\t\t\tcooldownScope: subcommand.cooldownScope,\n\t\t\t\t\tsubcommandMethodName: subcommand.name,\n\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t});\n\n\t\t\t\tthis.subcommandPreconditions.set(subcommand.name, preconditionContainerArray);\n\t\t\t}\n\n\t\t\tif (subcommand.type === 'group') {\n\t\t\t\tfor (const groupedSubcommand of subcommand.entries) {\n\t\t\t\t\tconst preconditionContainerArray = new PreconditionContainerArray(groupedSubcommand.preconditions);\n\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRunIn(\n\t\t\t\t\t\tgroupedSubcommand.runIn,\n\t\t\t\t\t\tthis.resolveConstructorPreConditionsRunType.bind(this),\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsNsfw(groupedSubcommand.nsfw, preconditionContainerArray);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredClientPermissions(\n\t\t\t\t\t\tgroupedSubcommand.requiredClientPermissions,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tPreconditionResolvers.parseConstructorPreConditionsRequiredUserPermissions(\n\t\t\t\t\t\tgroupedSubcommand.requiredUserPermissions,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t);\n\t\t\t\t\tSubcommandPreconditionResolvers.parseSubcommandConstructorPreConditionsCooldown({\n\t\t\t\t\t\tsubcommand: this,\n\t\t\t\t\t\tcooldownDelay: groupedSubcommand.cooldownDelay,\n\t\t\t\t\t\tcooldownFilteredUsers: groupedSubcommand.cooldownFilteredUsers,\n\t\t\t\t\t\tcooldownLimit: groupedSubcommand.cooldownLimit,\n\t\t\t\t\t\tcooldownScope: groupedSubcommand.cooldownScope,\n\t\t\t\t\t\tsubcommandGroupName: subcommand.name,\n\t\t\t\t\t\tsubcommandMethodName: groupedSubcommand.name,\n\t\t\t\t\t\tpreconditionContainerArray\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.subcommandPreconditions.set(`${subcommand.name}.${groupedSubcommand.name}`, preconditionContainerArray);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// #endregion\n\t}\n\n\tpublic override onLoad() {\n\t\tsuper.onLoad();\n\n\t\tconst externalMapping = Reflect.get(this, 'subcommandMappings');\n\t\tif (externalMapping) {\n\t\t\tconst subcommands = Array.isArray(externalMapping) ? externalMapping : [];\n\t\t\tthis.parsedSubcommandMappings = subcommands;\n\t\t\tthis.options.subcommands = subcommands;\n\t\t}\n\t}\n\n\t/**\n\t * Whether this command has message-based subcommands or not\n\t * @returns `true` if this command has message-based subcommands, otherwise `false`\n\t */\n\tpublic override supportsMessageCommands(): boolean {\n\t\treturn this.#supportsCommandType('messageRun');\n\t}\n\n\t/**\n\t * Whether this command has chat input subcommands or not\n\t * @returns `true` if this command has chat input subcommands, otherwise `false`\n\t */\n\tpublic override supportsChatInputCommands(): this is ChatInputCommand {\n\t\treturn this.#supportsCommandType('chatInputRun');\n\t}\n\n\t/**\n\t * The method that is ran when a message-based subcommand is ran.\n\t *\n\t * **DO NOT** override this in your implementation of a subcommand!\n\t */\n\tpublic override async messageRun(message: Message, args: PreParseReturn, context: MessageCommand.RunContext) {\n\t\targs.save();\n\t\tconst subcommandOrGroup = args.nextMaybe();\n\t\tconst subcommandName = args.nextMaybe();\n\t\tlet defaultCommand: SubcommandMappingMethod | null = null;\n\t\tlet actualSubcommandToRun: SubcommandMappingMethod | null = null;\n\t\tlet matchedWithGroupedSubcommand = false;\n\n\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\tif (mapping.type === 'method') {\n\t\t\t\tif (mapping.default && !defaultCommand) {\n\t\t\t\t\tmatchedWithGroupedSubcommand = false;\n\t\t\t\t\tdefaultCommand = mapping;\n\t\t\t\t}\n\n\t\t\t\tif (subcommandOrGroup.isSomeAnd((value) => mapping.name === (this.caseInsensitiveSubcommands ? value.toLowerCase() : value))) {\n\t\t\t\t\tactualSubcommandToRun = mapping;\n\t\t\t\t\tmatchedWithGroupedSubcommand = false;\n\t\t\t\t\t// Exit early\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We expect a group mapping\n\t\t\tif (mapping.type === 'group' && subcommandOrGroup.isSome() && subcommandName.isSome()) {\n\t\t\t\tconst unwrappedSubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\tconst unwrappedSubcommandName = subcommandName.unwrap();\n\n\t\t\t\t// We know a group was passed in here\n\t\t\t\tif (mapping.name === unwrappedSubcommandGroupName) {\n\t\t\t\t\t// Find the actual subcommand to run\n\t\t\t\t\tconst findResult = this.#findSubcommand(\n\t\t\t\t\t\tmapping.entries,\n\t\t\t\t\t\tthis.caseInsensitiveSubcommands ? unwrappedSubcommandName.toLowerCase() : unwrappedSubcommandName\n\t\t\t\t\t);\n\n\t\t\t\t\tif (findResult.defaultMatch) {\n\t\t\t\t\t\tdefaultCommand = findResult.mapping;\n\t\t\t\t\t\tmatchedWithGroupedSubcommand = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactualSubcommandToRun = findResult.mapping;\n\t\t\t\t\t\tmatchedWithGroupedSubcommand = true;\n\t\t\t\t\t\t// Exit early\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Preemptively restore the args state, to provide a correct args result for users\n\t\targs.restore();\n\n\t\tif (actualSubcommandToRun) {\n\t\t\t// Skip over the subcommandOrGroup\n\t\t\targs.next();\n\n\t\t\t// If we matched with a subcommand in a group we need to skip 1 more arg\n\t\t\tlet subcommandGroupName: string | undefined = undefined;\n\t\t\tif (matchedWithGroupedSubcommand) {\n\t\t\t\tsubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\targs.next();\n\t\t\t}\n\n\t\t\treturn this.#handleMessageRun(message, args, context, actualSubcommandToRun, subcommandGroupName);\n\t\t}\n\n\t\t// No subcommand matched, let's try to run default, if any:\n\t\tif (defaultCommand) {\n\t\t\t// If we matched with a subcommand in a group we need to skip 1 the group name\n\t\t\tlet subcommandGroupName: string | undefined = undefined;\n\t\t\tif (matchedWithGroupedSubcommand) {\n\t\t\t\tsubcommandGroupName = subcommandOrGroup.unwrap();\n\t\t\t\targs.next();\n\t\t\t}\n\n\t\t\treturn this.#handleMessageRun(message, args, context, defaultCommand, subcommandGroupName);\n\t\t}\n\n\t\t// No match and no subcommand, return an err:\n\t\tthrow new UserError({\n\t\t\tidentifier: SubcommandPluginIdentifiers.MessageSubcommandNoMatch,\n\t\t\tmessage: 'No subcommand was matched with the provided arguments.',\n\t\t\tcontext: {\n\t\t\t\t...context,\n\t\t\t\tpossibleSubcommandName: subcommandName.unwrapOr(null),\n\t\t\t\tpossibleSubcommandGroupOrName: subcommandOrGroup.unwrapOr(null)\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * The method that is ran when a chat input based subcommand is ran.\n\t *\n\t * **DO NOT** override this in your implementation of a subcommand!\n\t */\n\tpublic override async chatInputRun(interaction: ChatInputCommand.Interaction, context: ChatInputCommand.RunContext) {\n\t\tconst subcommandName = interaction.options.getSubcommand(false);\n\t\tconst subcommandGroupName = interaction.options.getSubcommandGroup(false);\n\n\t\tfor (const mapping of this.parsedSubcommandMappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\t// If we have a group, we know we also have a subcommand and we should find and run it\n\t\t\tif (subcommandGroupName && subcommandName) {\n\t\t\t\tif (mapping.type !== 'group') continue;\n\t\t\t\tif (mapping.name !== subcommandGroupName) continue;\n\n\t\t\t\tconst foundSubcommand = this.#findSubcommand(mapping.entries, subcommandName!);\n\n\t\t\t\t// Only run if its not the \"default\" found command mapping, as interactions don't have that\n\t\t\t\tif (!foundSubcommand.defaultMatch) {\n\t\t\t\t\treturn this.#handleChatInputInteractionRun(interaction, context, foundSubcommand.mapping, subcommandGroupName);\n\t\t\t\t}\n\n\t\t\t\t// Skip to the next entry\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If we have a direct subcommand, and no group, then run the mapping\n\t\t\tif (mapping.type === 'method' && mapping.name === subcommandName) {\n\t\t\t\treturn this.#handleChatInputInteractionRun(interaction, context, mapping, undefined);\n\t\t\t}\n\t\t}\n\n\t\t// No match and no subcommand, return an err:\n\t\tthrow new UserError({\n\t\t\tidentifier: SubcommandPluginIdentifiers.ChatInputSubcommandNoMatch,\n\t\t\tmessage: 'No subcommand was matched with the provided command.',\n\t\t\tcontext\n\t\t});\n\t}\n\n\tasync #getMessageParametersAsString(args: Args): Promise<Partial<Pick<MessageCommandDeniedPayload, 'parameters'>>> {\n\t\targs.save();\n\t\tconst parameters = await args.restResult('string');\n\t\targs.restore();\n\n\t\tconst params: Partial<Pick<MessageCommandDeniedPayload, 'parameters'>> = {};\n\n\t\tif (parameters.isOk()) {\n\t\t\tparams.parameters = parameters.unwrap();\n\t\t}\n\n\t\treturn params;\n\t}\n\n\tasync #handleMessageRun(\n\t\tmessage: Message,\n\t\targs: Args,\n\t\tcontext: MessageCommand.RunContext,\n\t\tsubcommand: SubcommandMappingMethod,\n\t\tsubcommandGroupName: string | undefined\n\t) {\n\t\tconst payload: MessageSubcommandAcceptedPayload = {\n\t\t\tmessage,\n\t\t\tcommand: this,\n\t\t\tcontext,\n\t\t\tmatchedSubcommandMapping: subcommand\n\t\t};\n\n\t\t// Check if any subcommand preconditions were defined for thus subcommand:\n\t\tconst preconditionsForSubcommand = this.subcommandPreconditions.get(\n\t\t\tsubcommandGroupName ? `${subcommandGroupName}.${subcommand.name}` : subcommand.name\n\t\t);\n\n\t\tif (preconditionsForSubcommand) {\n\t\t\t// Attempt to get the remaining parameters as string:\n\t\t\tconst messageParametersAsString = await this.#getMessageParametersAsString(args);\n\n\t\t\t// Build the precondition payload:\n\t\t\tconst preconditionPayload = { ...messageParametersAsString, ...payload };\n\n\t\t\t// Run the subcommand specific preconditions:\n\t\t\tconst localSubcommandResult = await preconditionsForSubcommand.messageRun(message, this, preconditionPayload as any);\n\t\t\tif (localSubcommandResult.isErr()) {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandDenied, localSubcommandResult.unwrapErr(), preconditionPayload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If subcommand preconditions have passed then we run the actual subcommand:\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tif (subcommand.messageRun) {\n\t\t\t\tconst casted = subcommand as MessageSubcommandMappingMethod;\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandRun, message, casted, payload);\n\t\t\t\tlet result: unknown;\n\n\t\t\t\tif (typeof subcommand.messageRun === 'string') {\n\t\t\t\t\tconst method = Reflect.get(this, subcommand.messageRun);\n\t\t\t\t\tif (!method) {\n\t\t\t\t\t\tthrow new UserError({\n\t\t\t\t\t\t\tidentifier: SubcommandPluginIdentifiers.SubcommandNotFound,\n\t\t\t\t\t\t\tmessage: `The method configured at \"messageRun\" for the subcommand ${subcommand.name} was not implemented in the class.`,\n\t\t\t\t\t\t\tcontext: { ...payload }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = await Reflect.apply(cast<this['messageRun']>(method), this, [message, args, context]);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await subcommand.messageRun(message, args, context);\n\t\t\t\t}\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandSuccess, message, casted, { ...payload, result });\n\t\t\t} else {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.SubcommandMappingIsMissingMessageCommandHandler, message, subcommand, payload);\n\t\t\t}\n\t\t});\n\n\t\tresult.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.MessageSubcommandError, error, payload));\n\t}\n\n\tasync #handleChatInputInteractionRun(\n\t\tinteraction: ChatInputCommand.Interaction,\n\t\tcontext: ChatInputCommand.RunContext,\n\t\tsubcommand: SubcommandMappingMethod,\n\t\tsubcommandGroupName: string | undefined\n\t) {\n\t\tconst payload: ChatInputSubcommandAcceptedPayload = {\n\t\t\tcommand: this,\n\t\t\tcontext,\n\t\t\tinteraction,\n\t\t\tmatchedSubcommandMapping: subcommand\n\t\t};\n\n\t\t// Check if any subcommand preconditions were defined for thus subcommand:\n\t\tconst preconditionsForSubcommand = this.subcommandPreconditions.get(\n\t\t\tsubcommandGroupName ? `${subcommandGroupName}.${subcommand.name}` : subcommand.name\n\t\t);\n\n\t\tif (preconditionsForSubcommand) {\n\t\t\t// Run the subcommand specific preconditions:\n\t\t\tconst localSubcommandResult = await preconditionsForSubcommand.chatInputRun(interaction, this, payload as any);\n\t\t\tif (localSubcommandResult.isErr()) {\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandDenied, localSubcommandResult.unwrapErr(), payload);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst result = await Result.fromAsync(async () => {\n\t\t\tif (subcommand.chatInputRun) {\n\t\t\t\tconst casted = subcommand as ChatInputCommandSubcommandMappingMethod;\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandRun, interaction, casted, payload);\n\t\t\t\tlet result: unknown;\n\n\t\t\t\tif (typeof subcommand.chatInputRun === 'string') {\n\t\t\t\t\tconst method = Reflect.get(this, subcommand.chatInputRun);\n\t\t\t\t\tif (!method) {\n\t\t\t\t\t\tthrow new UserError({\n\t\t\t\t\t\t\tidentifier: SubcommandPluginIdentifiers.SubcommandNotFound,\n\t\t\t\t\t\t\tmessage: `The method configured at \"chatInputRun\" for the subcommand ${subcommand.name} was not implemented in the class.`,\n\t\t\t\t\t\t\tcontext: { ...payload }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = await Reflect.apply(cast<this['chatInputRun']>(method), this, [interaction, context]);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await subcommand.chatInputRun(interaction, context);\n\t\t\t\t}\n\n\t\t\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandSuccess, interaction, casted, { ...payload, result });\n\t\t\t} else {\n\t\t\t\tthis.container.client.emit(\n\t\t\t\t\tSubcommandPluginEvents.SubcommandMappingIsMissingChatInputCommandHandler,\n\t\t\t\t\tinteraction,\n\t\t\t\t\tsubcommand,\n\t\t\t\t\tpayload\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tresult.inspectErr((error) => this.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandError, error, payload));\n\t}\n\n\t#findSubcommand(mappings: SubcommandMappingMethod[], expectedName: string) {\n\t\tlet foundDefault: SubcommandMappingMethod | null = null;\n\n\t\tfor (const mapping of mappings) {\n\t\t\tmapping.type ??= 'method';\n\n\t\t\tif (mapping.default) {\n\t\t\t\tfoundDefault = mapping;\n\t\t\t}\n\n\t\t\tif (mapping.name === expectedName) {\n\t\t\t\treturn { mapping, defaultMatch: false } as const;\n\t\t\t}\n\t\t}\n\n\t\treturn { mapping: foundDefault, defaultMatch: true } as const;\n\t}\n\n\t#supportsCommandType(commandType: 'messageRun' | 'chatInputRun'): boolean {\n\t\treturn this.parsedSubcommandMappings.some((mapping) => {\n\t\t\tif (mapping.type === 'group') {\n\t\t\t\treturn mapping.entries.some((groupCommand) => Reflect.has(groupCommand, commandType));\n\t\t\t}\n\t\t\treturn Reflect.has(mapping, commandType);\n\t\t});\n\t}\n}\n\nexport interface SubcommandOptions extends Command.Options {\n\tsubcommands?: SubcommandMappingArray;\n\t/**\n\t * Whether to add aliases for subcommands with dashes in them\n\t *\n\t * When this option is enabled *and* the subcommand implements `messageRun`, dashless aliases will be added.\n\t *\n\t * For subcommands groups both the group itself and all subcommands within the group will have dashless aliases added.\n\t *\n\t * @since 3.0.0\n\t * @default false\n\t */\n\tgenerateDashLessAliases?: boolean;\n}\n\nexport namespace Subcommand {\n\texport type Options = SubcommandOptions;\n\texport type JSON = Command.JSON;\n\t/** @deprecated Use {@linkcode LoaderContext} instead. */\n\texport type Context = LoaderContext;\n\texport type LoaderContext = Command.LoaderContext;\n\texport type RunInTypes = Command.RunInTypes;\n\texport type ChatInputCommandInteraction<Cached extends CacheType = CacheType> = Command.ChatInputCommandInteraction<Cached>;\n\texport type ContextMenuCommandInteraction<Cached extends CacheType = CacheType> = Command.ContextMenuCommandInteraction<Cached>;\n\texport type AutocompleteInteraction<Cached extends CacheType = CacheType> = Command.AutocompleteInteraction<Cached>;\n\texport type Registry = Command.Registry;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { __name } from '../../chunk-K3DKV2RO.mjs';
1
+ import { __name } from '../../chunk-3IXKS7M5.mjs';
2
2
  import { BucketScope } from '@sapphire/framework';
3
3
  import { container } from '@sapphire/pieces';
4
4
  import '../Subcommand.mjs';
@@ -32,5 +32,5 @@ function parseSubcommandConstructorPreConditionsCooldown({
32
32
  __name(parseSubcommandConstructorPreConditionsCooldown, "parseSubcommandConstructorPreConditionsCooldown");
33
33
 
34
34
  export { parseSubcommandConstructorPreConditionsCooldown };
35
- //# sourceMappingURL=out.js.map
35
+ //# sourceMappingURL=subcommandCooldown.mjs.map
36
36
  //# sourceMappingURL=subcommandCooldown.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/precondition-resolvers/subcommandCooldown.ts"],"names":[],"mappings":";;;;;AAAA,SAAe,mBAA+C;AAC9D,SAAS,iBAAiB;AAC1B,OAA2B;AAC3B,SAAS,sCAAsC;AA+BxC,SAAS,gDAGd;AAAA,EACD,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAuF;AACtF,QAAM,EAAE,0BAA0B,IAAI,UAAU,OAAO;AAKvD,QAAM,WACL,2BAA2B,kBAAkB;AAAA,IAC5C,sBAAsB,GAAG,QAAQ,IAAI,IAAI,mBAAmB,IAAI,oBAAoB,KAAK,GAAG,QAAQ,IAAI,IAAI,oBAAoB;AAAA,EACjI,KAAK;AACN,QAAM,QAAQ,kBAAkB,WAAW,IAAI,2BAA2B,SAAS;AACnF,QAAM,QAAQ,kBAAkB,WAAW,IAAI,2BAA2B,SAAS;AAEnF,MAAI,SAAS,OAAO;AACnB,UAAM,QAAQ,iBAAiB,2BAA2B,SAAS,YAAY;AAC/E,UAAM,gBAAgB,yBAAyB,2BAA2B;AAE1E,+BAA2B,OAAO;AAAA,MACjC,MAAM,+BAA+B;AAAA,MACrC,SAAS,EAAE,OAAO,OAAO,OAAO,eAAe,qBAAqB,qBAAqB;AAAA,IAC1F,CAAC;AAAA,EACF;AACD;AAlCgB","sourcesContent":["import { Args, BucketScope, PreconditionContainerArray } from '@sapphire/framework';\nimport { container } from '@sapphire/pieces';\nimport { Subcommand } from '../Subcommand';\nimport { SubcommandCommandPreConditions } from '../types/Enums';\n\n/** The options for adding this subcommand cooldown precondition */\nexport interface ParseSubcommandConstructorPreConditionsCooldownParameters<\n\tPreParseReturn extends Args = Args,\n\tOptions extends Subcommand.Options = Subcommand.Options\n> {\n\t/** The command to parse cooldowns for. */\n\tsubcommand: Subcommand<PreParseReturn, Options>;\n\t/** The cooldown limit to use. */\n\tcooldownLimit: number | undefined;\n\t/** The cooldown delay to use. */\n\tcooldownDelay: number | undefined;\n\t/** The cooldown scope to use. */\n\tcooldownScope: BucketScope | undefined;\n\t/** The cooldown filtered users to use. */\n\tcooldownFilteredUsers: string[] | undefined;\n\t/** The name this precondition is for. */\n\tsubcommandMethodName: string;\n\t/** The group this precondition is for, if any. */\n\tsubcommandGroupName?: string;\n\t/** The precondition container array to append the precondition to. */\n\tpreconditionContainerArray: PreconditionContainerArray;\n}\n\n/**\n * Appends the `PluginSubcommandCooldown` precondition when {@link Subcommand.Options.cooldownLimit} and\n * {@link Subcommand.Options.cooldownDelay} are both non-zero.\n *\n * @param options The {@link ParseSubcommandConstructorPreConditionsCooldownParameters} for adding this subcommand cooldown precondition\n */\nexport function parseSubcommandConstructorPreConditionsCooldown<\n\tPreParseReturn extends Args = Args,\n\tOptions extends Subcommand.Options = Subcommand.Options\n>({\n\tsubcommand: command,\n\tcooldownLimit,\n\tcooldownDelay,\n\tcooldownScope,\n\tcooldownFilteredUsers,\n\tsubcommandMethodName,\n\tsubcommandGroupName,\n\tpreconditionContainerArray\n}: ParseSubcommandConstructorPreConditionsCooldownParameters<PreParseReturn, Options>) {\n\tconst { subcommandDefaultCooldown } = container.client.options;\n\n\t// We will check for whether the subcommand is filtered from the defaults, but we will allow overridden values to\n\t// be set. If an overridden value is passed, it will have priority. Otherwise, it will default to 0 if filtered\n\t// (causing the precondition to not be registered) or the default value with a fallback to a single-use cooldown.\n\tconst filtered =\n\t\tsubcommandDefaultCooldown?.filteredCommands?.includes(\n\t\t\tsubcommandGroupName ? `${command.name}.${subcommandGroupName}.${subcommandMethodName}` : `${command.name}.${subcommandMethodName}`\n\t\t) ?? false;\n\tconst limit = cooldownLimit ?? (filtered ? 0 : subcommandDefaultCooldown?.limit ?? 1);\n\tconst delay = cooldownDelay ?? (filtered ? 0 : subcommandDefaultCooldown?.delay ?? 0);\n\n\tif (limit && delay) {\n\t\tconst scope = cooldownScope ?? subcommandDefaultCooldown?.scope ?? BucketScope.User;\n\t\tconst filteredUsers = cooldownFilteredUsers ?? subcommandDefaultCooldown?.filteredUsers;\n\n\t\tpreconditionContainerArray.append({\n\t\t\tname: SubcommandCommandPreConditions.PluginSubcommandCooldown,\n\t\t\tcontext: { scope, limit, delay, filteredUsers, subcommandGroupName, subcommandMethodName }\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/lib/precondition-resolvers/subcommandCooldown.ts"],"names":[],"mappings":";;;;;;AAkCO,SAAS,+CAGd,CAAA;AAAA,EACD,UAAY,EAAA,OAAA;AAAA,EACZ,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,mBAAA;AAAA,EACA,0BAAA;AACD,CAAuF,EAAA;AACtF,EAAA,MAAM,EAAE,yBAAA,EAA8B,GAAA,SAAA,CAAU,MAAO,CAAA,OAAA,CAAA;AAKvD,EAAM,MAAA,QAAA,GACL,2BAA2B,gBAAkB,EAAA,QAAA;AAAA,IAC5C,mBAAsB,GAAA,CAAA,EAAG,OAAQ,CAAA,IAAI,CAAI,CAAA,EAAA,mBAAmB,CAAI,CAAA,EAAA,oBAAoB,CAAK,CAAA,GAAA,CAAA,EAAG,OAAQ,CAAA,IAAI,IAAI,oBAAoB,CAAA,CAAA;AAAA,GAC5H,IAAA,KAAA,CAAA;AACN,EAAA,MAAM,KAAQ,GAAA,aAAA,KAAkB,QAAW,GAAA,CAAA,GAAK,2BAA2B,KAAS,IAAA,CAAA,CAAA,CAAA;AACpF,EAAA,MAAM,KAAQ,GAAA,aAAA,KAAkB,QAAW,GAAA,CAAA,GAAK,2BAA2B,KAAS,IAAA,CAAA,CAAA,CAAA;AAEpF,EAAA,IAAI,SAAS,KAAO,EAAA;AACnB,IAAA,MAAM,KAAQ,GAAA,aAAA,IAAiB,yBAA2B,EAAA,KAAA,IAAS,WAAY,CAAA,IAAA,CAAA;AAC/E,IAAM,MAAA,aAAA,GAAgB,yBAAyB,yBAA2B,EAAA,aAAA,CAAA;AAE1E,IAAA,0BAAA,CAA2B,MAAO,CAAA;AAAA,MACjC,MAAM,8BAA+B,CAAA,wBAAA;AAAA,MACrC,SAAS,EAAE,KAAA,EAAO,OAAO,KAAO,EAAA,aAAA,EAAe,qBAAqB,oBAAqB,EAAA;AAAA,KACzF,CAAA,CAAA;AAAA,GACF;AACD,CAAA;AAlCgB,MAAA,CAAA,+CAAA,EAAA,iDAAA,CAAA","file":"subcommandCooldown.mjs","sourcesContent":["import { Args, BucketScope, PreconditionContainerArray } from '@sapphire/framework';\nimport { container } from '@sapphire/pieces';\nimport { Subcommand } from '../Subcommand';\nimport { SubcommandCommandPreConditions } from '../types/Enums';\n\n/** The options for adding this subcommand cooldown precondition */\nexport interface ParseSubcommandConstructorPreConditionsCooldownParameters<\n\tPreParseReturn extends Args = Args,\n\tOptions extends Subcommand.Options = Subcommand.Options\n> {\n\t/** The command to parse cooldowns for. */\n\tsubcommand: Subcommand<PreParseReturn, Options>;\n\t/** The cooldown limit to use. */\n\tcooldownLimit: number | undefined;\n\t/** The cooldown delay to use. */\n\tcooldownDelay: number | undefined;\n\t/** The cooldown scope to use. */\n\tcooldownScope: BucketScope | undefined;\n\t/** The cooldown filtered users to use. */\n\tcooldownFilteredUsers: string[] | undefined;\n\t/** The name this precondition is for. */\n\tsubcommandMethodName: string;\n\t/** The group this precondition is for, if any. */\n\tsubcommandGroupName?: string;\n\t/** The precondition container array to append the precondition to. */\n\tpreconditionContainerArray: PreconditionContainerArray;\n}\n\n/**\n * Appends the `PluginSubcommandCooldown` precondition when {@link Subcommand.Options.cooldownLimit} and\n * {@link Subcommand.Options.cooldownDelay} are both non-zero.\n *\n * @param options The {@link ParseSubcommandConstructorPreConditionsCooldownParameters} for adding this subcommand cooldown precondition\n */\nexport function parseSubcommandConstructorPreConditionsCooldown<\n\tPreParseReturn extends Args = Args,\n\tOptions extends Subcommand.Options = Subcommand.Options\n>({\n\tsubcommand: command,\n\tcooldownLimit,\n\tcooldownDelay,\n\tcooldownScope,\n\tcooldownFilteredUsers,\n\tsubcommandMethodName,\n\tsubcommandGroupName,\n\tpreconditionContainerArray\n}: ParseSubcommandConstructorPreConditionsCooldownParameters<PreParseReturn, Options>) {\n\tconst { subcommandDefaultCooldown } = container.client.options;\n\n\t// We will check for whether the subcommand is filtered from the defaults, but we will allow overridden values to\n\t// be set. If an overridden value is passed, it will have priority. Otherwise, it will default to 0 if filtered\n\t// (causing the precondition to not be registered) or the default value with a fallback to a single-use cooldown.\n\tconst filtered =\n\t\tsubcommandDefaultCooldown?.filteredCommands?.includes(\n\t\t\tsubcommandGroupName ? `${command.name}.${subcommandGroupName}.${subcommandMethodName}` : `${command.name}.${subcommandMethodName}`\n\t\t) ?? false;\n\tconst limit = cooldownLimit ?? (filtered ? 0 : (subcommandDefaultCooldown?.limit ?? 1));\n\tconst delay = cooldownDelay ?? (filtered ? 0 : (subcommandDefaultCooldown?.delay ?? 0));\n\n\tif (limit && delay) {\n\t\tconst scope = cooldownScope ?? subcommandDefaultCooldown?.scope ?? BucketScope.User;\n\t\tconst filteredUsers = cooldownFilteredUsers ?? subcommandDefaultCooldown?.filteredUsers;\n\n\t\tpreconditionContainerArray.append({\n\t\t\tname: SubcommandCommandPreConditions.PluginSubcommandCooldown,\n\t\t\tcontext: { scope, limit, delay, filteredUsers, subcommandGroupName, subcommandMethodName }\n\t\t});\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import '../../chunk-K3DKV2RO.mjs';
1
+ import '../../chunk-3IXKS7M5.mjs';
2
2
 
3
3
  // src/lib/types/Enums.ts
4
4
  var SubcommandCommandPreConditions = /* @__PURE__ */ ((SubcommandCommandPreConditions2) => {
@@ -11,5 +11,5 @@ var SubcommandIdentifiers = /* @__PURE__ */ ((SubcommandIdentifiers2) => {
11
11
  })(SubcommandIdentifiers || {});
12
12
 
13
13
  export { SubcommandCommandPreConditions, SubcommandIdentifiers };
14
- //# sourceMappingURL=out.js.map
14
+ //# sourceMappingURL=Enums.mjs.map
15
15
  //# sourceMappingURL=Enums.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/types/Enums.ts"],"names":["SubcommandCommandPreConditions","SubcommandIdentifiers"],"mappings":";;;AAIO,IAAK,iCAAL,kBAAKA,oCAAL;AACN,EAAAA,gCAAA,8BAA2B;AADhB,SAAAA;AAAA,GAAA;AAQL,IAAK,wBAAL,kBAAKC,2BAAL;AAEN,EAAAA,uBAAA,oCAAiC;AAFtB,SAAAA;AAAA,GAAA","sourcesContent":["/**\n * The available command pre-conditions.\n * @since 2.0.0\n */\nexport enum SubcommandCommandPreConditions {\n\tPluginSubcommandCooldown = 'PluginSubcommandCooldown'\n}\n\n/**\n * The available subcommand pre-conditions.\n * @since 5.1.0\n */\nexport enum SubcommandIdentifiers {\n\t/** The identifier for the subcommand cooldown precondition */\n\tSubcommandPreconditionCooldown = 'subcommandPreconditionCooldown'\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/lib/types/Enums.ts"],"names":["SubcommandCommandPreConditions","SubcommandIdentifiers"],"mappings":";;;AAIY,IAAA,8BAAA,qBAAAA,+BAAL,KAAA;AACN,EAAAA,gCAAA,0BAA2B,CAAA,GAAA,0BAAA,CAAA;AADhB,EAAAA,OAAAA,+BAAAA,CAAAA;AAAA,CAAA,EAAA,8BAAA,IAAA,EAAA,EAAA;AAQA,IAAA,qBAAA,qBAAAC,sBAAL,KAAA;AAEN,EAAAA,uBAAA,gCAAiC,CAAA,GAAA,gCAAA,CAAA;AAFtB,EAAAA,OAAAA,sBAAAA,CAAAA;AAAA,CAAA,EAAA,qBAAA,IAAA,EAAA","file":"Enums.mjs","sourcesContent":["/**\n * The available command pre-conditions.\n * @since 2.0.0\n */\nexport enum SubcommandCommandPreConditions {\n\tPluginSubcommandCooldown = 'PluginSubcommandCooldown'\n}\n\n/**\n * The available subcommand pre-conditions.\n * @since 5.1.0\n */\nexport enum SubcommandIdentifiers {\n\t/** The identifier for the subcommand cooldown precondition */\n\tSubcommandPreconditionCooldown = 'subcommandPreconditionCooldown'\n}\n"]}