import type { ApplicationCommandOptionType, ApplicationCommandType, APIGuildMember, APIPartialChannel, APIRole, Permissions, APIAttachment, ComponentType, ModalSubmitActionRowComponent, Snowflake, APIMessage, APIUser } from "discord-api-types/v10"; import type { APIChannel, APIInteractionDataResolvedChannel, APIInteractionDataResolvedGuildMember, Attachment, CacheType, CacheTypeReducer, Channel, Collection, GuildBasedChannel, GuildMember, Message, Role, User } from "discord.js"; export type CommandPayload = Readonly<{ name: string; type?: ApplicationCommandType | undefined; }>; export type ComponentPayload = Readonly<{ componentType: ComponentType; components?: ModalSubmitActionRowComponent[] | undefined; customId: string; values?: string[] | undefined; }>; export declare const enum Runtime { Raw = 0, Discordjs = 1 } type Option = Readonly<{ name: string; required?: boolean | undefined; } & ({ choices?: readonly Readonly<{ name: string; value: number; }>[] | undefined; type: ApplicationCommandOptionType.Integer | ApplicationCommandOptionType.Number; } | { choices?: readonly Readonly<{ name: string; value: string; }>[] | undefined; type: ApplicationCommandOptionType.String; } | { options?: readonly Option[] | undefined; type: ApplicationCommandOptionType.Subcommand | ApplicationCommandOptionType.SubcommandGroup; } | { type: ApplicationCommandOptionType.Attachment | ApplicationCommandOptionType.Boolean | ApplicationCommandOptionType.Channel | ApplicationCommandOptionType.Mentionable | ApplicationCommandOptionType.Role | ApplicationCommandOptionType.User; })>; type UnionToIntersection = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never; type TypeIdToType = T extends ApplicationCommandOptionType.Subcommand ? ArgumentsOfRaw : T extends ApplicationCommandOptionType.SubcommandGroup ? ArgumentsOfRaw : T extends ApplicationCommandOptionType.String ? C extends readonly { value: string; }[] ? C[number]["value"] : string : T extends ApplicationCommandOptionType.Integer | ApplicationCommandOptionType.Number ? C extends readonly { value: number; }[] ? C[number]["value"] : number : T extends ApplicationCommandOptionType.Boolean ? boolean : T extends ApplicationCommandOptionType.User ? P extends Runtime.Discordjs ? { member?: CacheTypeReducer | undefined; user: User; } : { member?: (APIGuildMember & { permissions: Permissions; }) | undefined; user: APIUser; } : T extends ApplicationCommandOptionType.Channel ? P extends Runtime.Discordjs ? CacheTypeReducer : APIPartialChannel & { permissions: Permissions; } : T extends ApplicationCommandOptionType.Role ? P extends Runtime.Discordjs ? CacheTypeReducer : APIRole : T extends ApplicationCommandOptionType.Mentionable ? P extends Runtime.Discordjs ? CacheTypeReducer | { member?: CacheTypeReducer; user: User; } | undefined : APIRole | { member?: (APIGuildMember & { permissions: Permissions; }) | undefined; user: APIUser; } | undefined : T extends ApplicationCommandOptionType.Attachment ? P extends Runtime.Discordjs ? Attachment : APIAttachment : never; type OptionToObject = O extends { choices?: infer C | undefined; name: infer K; options?: infer O | undefined; required?: infer R | undefined; type: infer T; } ? K extends string ? R extends true ? { [k in K]: TypeIdToType; } : T extends ApplicationCommandOptionType.Subcommand | ApplicationCommandOptionType.SubcommandGroup ? { [k in K]: TypeIdToType; } : { [k in K]?: TypeIdToType | undefined; } : never : never; type ArgumentsOfRaw = O extends readonly any[] ? UnionToIntersection> : never; export type ArgumentsOf = C extends { options: readonly Option[]; } ? UnionToIntersection> : C extends { type: ApplicationCommandType.Message; } ? { message: P extends Runtime.Discordjs ? Message : APIMessage; } : C extends { type: ApplicationCommandType.User; } ? P extends Runtime.Discordjs ? { user: { member?: CacheTypeReducer | undefined; user: User; }; } : { user: { member?: (APIGuildMember & { permissions: Permissions; }) | undefined; user: APIUser; }; } : C extends { componentType: ComponentType.Button; } ? never : C extends { componentType: ComponentType.ChannelSelect; } ? P extends Runtime.Discordjs ? { channels: Collection>; } : { channels: Map; } : C extends { componentType: ComponentType.MentionableSelect; } ? P extends Runtime.Discordjs ? { members: Collection>; roles: Collection>; users: Collection; } : { members: Map; roles: Map; users: Map; } : C extends { componentType: ComponentType.RoleSelect; } ? P extends Runtime.Discordjs ? { roles: Collection>; } : { roles: Map; } : C extends { componentType: ComponentType.StringSelect; } ? { values: string[]; } : C extends { componentType: ComponentType.TextInput; } ? { value: string; } : C extends { componentType: ComponentType.UserSelect; } ? P extends Runtime.Discordjs ? { members: Collection>; users: Collection; } : { members: Map; users: Map; } : never; export {}; //# sourceMappingURL=ArgumentsOf.d.ts.map