{"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(): this is MessageCommand {\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\tconst commandPrefix = this.#getCommandPrefix(message.content, args.commandContext.prefix);\n\t\tconst prefixLessContent = message.content.slice(commandPrefix.length).trim();\n\n\t\t// No match and no subcommand, emit an error:\n\t\tthis.container.client.emit(SubcommandPluginEvents.MessageSubcommandNoMatch, message, args, {\n\t\t\t...context,\n\t\t\tcommand: this,\n\t\t\tidentifier: SubcommandPluginIdentifiers.MessageSubcommandNoMatch,\n\t\t\tmessage: `Unable to match a subcommand on message command \"${this.name}\" at path \"${this.location.full}\" with content ${prefixLessContent}`,\n\t\t\tpossibleSubcommandName: subcommandName.unwrapOr(null),\n\t\t\tpossibleSubcommandGroupOrName: subcommandOrGroup.unwrapOr(null)\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, emit an error:\n\t\tthis.container.client.emit(SubcommandPluginEvents.ChatInputSubcommandNoMatch, interaction, {\n\t\t\t...context,\n\t\t\tcommand: this,\n\t\t\tidentifier: SubcommandPluginIdentifiers.ChatInputSubcommandNoMatch,\n\t\t\tmessage: `Unable to match a subcommand on chat input command \"${this.name}\" at path \"${this.location.full}\"`\n\t\t});\n\t}\n\n\t#getCommandPrefix(content: string, prefix: string | RegExp): string {\n\t\treturn typeof prefix === 'string' ? prefix : prefix.exec(content)![0];\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"]}