{"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;AACD,CAAuF,EAAA;AACtF,EAAA,MAAM,EAAE,yBAAA,EAA8B,GAAA,SAAA,CAAU,MAAO,CAAA,OAAA;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;AAAA,GAC5H,IAAA,KAAA;AACN,EAAA,MAAM,KAAQ,GAAA,aAAA,KAAkB,QAAW,GAAA,CAAA,GAAK,2BAA2B,KAAS,IAAA,CAAA,CAAA;AACpF,EAAA,MAAM,KAAQ,GAAA,aAAA,KAAkB,QAAW,GAAA,CAAA,GAAK,2BAA2B,KAAS,IAAA,CAAA,CAAA;AAEpF,EAAA,IAAI,SAAS,KAAO,EAAA;AACnB,IAAA,MAAM,KAAQ,GAAA,aAAA,IAAiB,yBAA2B,EAAA,KAAA,IAAS,WAAY,CAAA,IAAA;AAC/E,IAAM,MAAA,aAAA,GAAgB,yBAAyB,yBAA2B,EAAA,aAAA;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;AAAA,KACzF,CAAA;AAAA;AAEH;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"]}