{"version":3,"file":"ChatInputInteraction.mjs","sourceRoot":"","sources":["../../src/interactions/ChatInputInteraction.mts"],"names":[],"mappings":"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","sourcesContent":["import { APIApplicationCommandInteractionDataOption, APIAttachment, APIChatInputApplicationCommandInteraction, APIInteractionDataResolved, ApplicationCommandOptionType, ApplicationCommandType } from \"discord-api-types/v10\";\nimport { InteractionDataResolvedChannel } from \"../channels/PartialChannel.mjs\";\nimport { InteractionDataResolvedGuildMember } from \"../payloads/Member.mjs\";\nimport Role from \"../payloads/Role.mjs\";\nimport User from \"../payloads/User.mjs\";\nimport ApplicationCommandInteraction from \"./ApplicationCommandInteraction.mjs\";\nimport type { MessageOption } from \"./MessageCommandInteraction.mjs\";\n\n\nexport default class ChatInputInteraction extends ApplicationCommandInteraction {\n    declare commandType: ApplicationCommandType.ChatInput;\n    /** The options that the invoking user has provided for the command */\n    options: ChatInputInteractionOption;\n\n    constructor(interaction: APIChatInputApplicationCommandInteraction) {\n        super(interaction);\n\n        this.options = new ChatInputInteractionOption(interaction.data.options, interaction.data.resolved, this.guildId);\n\n    }\n\n}\n\nexport type Options = StringOption | NumberOption | UserOption | RoleOption | BooleanOption | IntegerOption | ChannelOption | AttachmentOption | MentionableOption | MessageOption;\n\nexport class BaseOption {\n    type: ApplicationCommandOptionType;\n    name: string;\n    value: string | number | boolean;\n\n    constructor(type: ApplicationCommandOptionType, name: string, value: string | number | boolean) {\n        this.type = type;\n        this.name = name;\n        this.value = value;\n    }\n}\n\nexport class StringOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.String;\n    declare value: string;\n\n    constructor(name: string, value: string) {\n        super(ApplicationCommandOptionType.String, name, value);\n    }\n}\n\nexport class NumberOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Number;\n    declare value: number;\n\n    constructor(name: string, value: number) {\n        super(ApplicationCommandOptionType.Number, name, value);\n    }\n}\n\nexport class IntegerOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Number;\n    declare value: number;\n\n    constructor(name: string, value: number) {\n        super(ApplicationCommandOptionType.Number, name, value);\n    }\n\n}\n\nexport class BooleanOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Boolean;\n    declare value: boolean;\n\n    constructor(name: string, value: boolean) {\n        super(ApplicationCommandOptionType.Boolean, name, value);\n    }\n}\n\nexport class UserOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.User;\n    declare value: string;\n    user: User;\n    member?: InteractionDataResolvedGuildMember;\n\n    constructor(name: string, id: string, user: User, member?: InteractionDataResolvedGuildMember) {\n        super(ApplicationCommandOptionType.User, name, id);\n        this.user = user;\n        this.member = member;\n    }\n}\n\nexport class RoleOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Role;\n    declare value: string;\n    role: Role;\n\n    constructor(name: string, id: string, role: Role) {\n        super(ApplicationCommandOptionType.Role, name, id);\n        this.role = role;\n    }\n}\n\nexport type MentionableOption = UserOption | RoleOption;\n\nexport class ChannelOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Channel;\n    declare value: string;\n    channel: InteractionDataResolvedChannel;\n\n    constructor(name: string, id: string, channel: InteractionDataResolvedChannel) {\n        super(ApplicationCommandOptionType.Channel, name, id);\n        this.channel = channel;\n    }\n}\n\nexport class AttachmentOption extends BaseOption {\n    declare type: ApplicationCommandOptionType.Attachment;\n    declare value: string;\n    attachment: APIAttachment;\n\n    constructor(name: string, id: string, attachment: APIAttachment) {\n        super(ApplicationCommandOptionType.Attachment, name, id);\n        this.attachment = attachment;\n    }\n}\n\n\nexport function formatOption(option: APIApplicationCommandInteractionDataOption, resolved: APIInteractionDataResolved | undefined, guildId?: string): Options {\n\n    if (option.type === ApplicationCommandOptionType.String) {\n        return new StringOption(option.name, option.value);\n    }\n\n    if (option.type === ApplicationCommandOptionType.Number) {\n        return new NumberOption(option.name, option.value);\n    }\n\n    if (option.type === ApplicationCommandOptionType.Integer) {\n        return new IntegerOption(option.name, option.value);\n    }\n\n    if (option.type === ApplicationCommandOptionType.Boolean) {\n        return new BooleanOption(option.name, option.value);\n    }\n\n    if (option.type === ApplicationCommandOptionType.User) {\n        const user = resolved?.users?.[option.value];\n        const member = resolved?.members?.[option.value];\n\n        if (user) {\n            const resolvedUser = new User(user);\n            const resolvedMember = member && guildId ? new InteractionDataResolvedGuildMember(member, guildId, user.id) : undefined;\n            return new UserOption(option.name, option.value, resolvedUser, resolvedMember);\n        }\n    }\n\n    if (option.type === ApplicationCommandOptionType.Role) {\n        const role = resolved?.roles?.[option.value];\n\n        if (role) {\n            const resolvedRole = new Role(role);\n            return new RoleOption(option.name, option.value, resolvedRole);\n        }\n    }\n\n    if (option.type === ApplicationCommandOptionType.Channel) {\n        const channel = resolved?.channels?.[option.value];\n\n        if (channel) {\n            const resolvedChannel = new InteractionDataResolvedChannel(channel);\n            return new ChannelOption(option.name, option.value, resolvedChannel);\n        }\n    }\n\n    if (option.type === ApplicationCommandOptionType.Attachment) {\n        const attachment = resolved?.attachments?.[option.value];\n\n        if (attachment) {\n            const resolvedAttachment = attachment;\n            return new AttachmentOption(option.name, option.value, resolvedAttachment);\n        }\n    }\n\n    if (option.type === ApplicationCommandOptionType.Mentionable) {\n        const role = resolved?.roles?.[option.value];\n        const user = resolved?.users?.[option.value];\n        const member = resolved?.members?.[option.value];\n\n        if (role) {\n            const resolvedRole = new Role(role);\n            return new RoleOption(option.name, option.value, resolvedRole);\n        }\n        else if (user) {\n            const resolvedUser = new User(user);\n            const resolvedMember = member && guildId ? new InteractionDataResolvedGuildMember(member, guildId, user.id) : undefined;\n            return new UserOption(option.name, option.value, resolvedUser, resolvedMember);\n        }\n\n    }\n\n    return new StringOption(option.name, \"Unknown\");\n\n}\n\n\nexport class ChatInputInteractionOption {\n    readonly options: Record<string, Options> = {};\n    readonly subCommands: { subCommand?: string, subCommandGroup?: string } = {};\n\n    constructor(options: APIApplicationCommandInteractionDataOption[] | undefined, resolved: APIInteractionDataResolved | undefined, guildId?: string) {\n\n        for (const option of options || []) {\n\n            if (ApplicationCommandOptionType.Subcommand !== option.type && ApplicationCommandOptionType.SubcommandGroup !== option.type) {\n                this.options[option.name] = formatOption(option, resolved, guildId);\n            }\n\n            else if (option.type === ApplicationCommandOptionType.Subcommand) {\n                this.subCommands.subCommand = option.name;\n                for (const subOption of option.options || []) {\n                    this.options[subOption.name] = formatOption(subOption, resolved, guildId);\n                }\n            }\n\n            else if (option.type === ApplicationCommandOptionType.SubcommandGroup) {\n                this.subCommands.subCommandGroup = option.name;\n                for (const subOption of option.options || []) {\n                    this.subCommands.subCommand = subOption.name;\n                    for (const subSubOption of subOption.options || []) {\n                        this.options[subSubOption.name] = formatOption(subSubOption, resolved, guildId);\n                    }\n                }\n            }\n        }\n    }\n\n\n    get(name: string, required: true): Options;\n    get(name: string, required?: boolean): Options | undefined;\n    get(name: string, required?: boolean): Options | undefined {\n\n        const option = this.options[name];\n\n        if (required && !option) {\n            throw new Error(`Option ${name} is required`);\n        }\n\n        return option;\n    }\n\n    getString(name: string, required: true): string;\n    getString(name: string, required?: boolean): string | undefined;\n    getString(name: string, required?: boolean): string | undefined {\n\n        return this.get(name, required)?.value as string;\n    }\n\n    getBoolean(name: string, required: true): boolean;\n    getBoolean(name: string, required?: boolean): boolean | undefined;\n    getBoolean(name: string, required?: boolean): boolean | undefined {\n\n        return this.get(name, required)?.value as boolean;\n    }\n\n    getNumber(name: string, required: true): number;\n    getNumber(name: string, required?: boolean): number | undefined;\n    getNumber(name: string, required?: boolean): number | undefined {\n\n        return this.get(name, required)?.value as number;\n    }\n\n    getInteger(name: string, required: true): number;\n    getInteger(name: string, required?: boolean): number | undefined;\n    getInteger(name: string, required?: boolean): number | undefined {\n\n        return this.get(name, required)?.value as number;\n    }\n\n    getUser(name: string, required: true): User;\n    getUser(name: string, required?: boolean): User | undefined;\n    getUser(name: string, required?: boolean): User | undefined {\n        const option = this.get(name, required) as UserOption;\n        return option?.user;\n    }\n\n    getMember(name: string, required: true): InteractionDataResolvedGuildMember;\n    getMember(name: string, required?: boolean): InteractionDataResolvedGuildMember | undefined;\n    getMember(name: string, required?: boolean): InteractionDataResolvedGuildMember | undefined {\n        const option = this.get(name, required) as UserOption;\n        return option?.member;\n    }\n\n    getRole(name: string, required: true): Role;\n    getRole(name: string, required?: boolean): Role | undefined;\n    getRole(name: string, required?: boolean): Role | undefined {\n        const option = this.get(name, required) as RoleOption;\n        return option?.role;\n    }\n\n    getMentionable(name: string, required: true): User | Role | InteractionDataResolvedGuildMember;\n    getMentionable(name: string, required?: boolean): User | Role | InteractionDataResolvedGuildMember | undefined;\n    getMentionable(name: string, required?: boolean): User | Role | InteractionDataResolvedGuildMember | undefined {\n        const option = this.get(name, required);\n        if (option instanceof UserOption) {\n            return option.member ?? option.user;\n        }\n        else if (option instanceof RoleOption) {\n            return option.role;\n        }\n        return undefined;\n    }\n\n    getAttachment(name: string, required: true): APIAttachment;\n    getAttachment(name: string, required?: boolean): APIAttachment | undefined;\n    getAttachment(name: string, required?: boolean): APIAttachment | undefined {\n        const option = this.get(name, required) as AttachmentOption;\n        return option?.attachment;\n    }\n\n    getChannel(name: string, required: true): InteractionDataResolvedChannel;\n    getChannel(name: string, required?: boolean): InteractionDataResolvedChannel | undefined;\n    getChannel(name: string, required?: boolean): InteractionDataResolvedChannel | undefined {\n        const option = this.get(name, required) as ChannelOption;\n        return option?.channel;\n    }\n\n    getSubcommand(required: true): string;\n    getSubcommand(required?: boolean): string | undefined;\n    getSubcommand(required?: boolean): string | undefined {\n        const value = this.subCommands.subCommand;\n        if (required && !value) throw new Error(\"Missing required subcommand\");\n        return value;\n    }\n\n    getSubcommandGroup(required: true): string;\n    getSubcommandGroup(required?: boolean): string | undefined;\n    getSubcommandGroup(required?: boolean): string | undefined {\n        const value = this.subCommands.subCommandGroup;\n        if (required && !value) throw new Error(\"Missing required subcommand group\");\n        return value;\n    }\n\n}\n"]}