import type { Dict } from '../utils/dict.ts'import type { ChannelTypes, MessagePayload } from './channel.ts'import type { MemberPayload } from './guild.ts'import type { RolePayload } from './role.ts'import type { UserPayload } from './user.ts'
export interface InteractionApplicationCommandOption { name: string type: ApplicationCommandOptionType value?: any options?: InteractionApplicationCommandOption[] focused?: boolean}
export interface InteractionChannelPayload { id: string name: string permissions: string type: ChannelTypes}
export interface InteractionApplicationCommandResolvedPayload { users?: Dict<UserPayload> members?: Dict<MemberPayload> channels?: Dict<InteractionChannelPayload> roles?: Dict<RolePayload> messages?: Dict<MessagePayload>}
export interface InteractionApplicationCommandData { name: string id: string type: ApplicationCommandType options: InteractionApplicationCommandOption[] resolved?: InteractionApplicationCommandResolvedPayload target_id?: string}
export interface ApplicationCommandChoice { name: string value: any}
export type { ApplicationCommandChoice as SlashCommandChoice }
export enum ApplicationCommandOptionType { SUB_COMMAND = 1, SUB_COMMAND_GROUP = 2, STRING = 3, INTEGER = 4, BOOLEAN = 5, USER = 6, CHANNEL = 7, ROLE = 8, MENTIONABLE = 9, NUMBER = 10, ATTACHMENT = 11}
export { ApplicationCommandOptionType as SlashCommandOptionType }
export interface ApplicationCommandOptionBase< T = unknown, OptionType = ApplicationCommandOptionType> { name: string description: string type: OptionType required?: boolean default?: boolean choices?: ApplicationCommandChoice[] options?: T[] autocomplete?: boolean}
export type { ApplicationCommandOptionBase as SlashCommandOptionBase }
export interface ApplicationCommandOptionPayload extends ApplicationCommandOptionBase< ApplicationCommandOptionPayload, ApplicationCommandOptionType > { channel_types?: ChannelTypes[] min_value?: number max_value?: number}
export type { ApplicationCommandOptionPayload as SlashCommandOptionPayload }
export interface ApplicationCommandOption extends ApplicationCommandOptionBase< ApplicationCommandOption, ApplicationCommandOptionType | keyof typeof ApplicationCommandOptionType > { channelTypes?: Array<ChannelTypes | keyof typeof ChannelTypes> minValue?: number maxValue?: number}
export type { ApplicationCommandOption as SlashCommandOption }
export enum ApplicationCommandType { CHAT_INPUT = 1, USER = 2, MESSAGE = 3}
export interface ApplicationCommandPartialBase< T = ApplicationCommandOptionPayload, T2 = ApplicationCommandType> { name: string description?: string options?: T[] type?: T2}
export type { ApplicationCommandPartialBase as SlashCommandPartialBase }
export interface ApplicationCommandPartialPayload extends ApplicationCommandPartialBase { default_permission?: boolean}
export type { ApplicationCommandPartialPayload as SlashCommandPartialPayload }
export interface ApplicationCommandPartial extends ApplicationCommandPartialBase< ApplicationCommandOption, ApplicationCommandType | keyof typeof ApplicationCommandType > { defaultPermission?: boolean}
export type { ApplicationCommandPartial as SlashCommandPartial }
export interface ApplicationCommandPayload extends ApplicationCommandPartialPayload { id: string application_id: string guild_id?: string default_permission: boolean type: ApplicationCommandType options: ApplicationCommandOptionPayload[]}
export type { ApplicationCommandPayload as SlashCommandPayload }
export enum ApplicationCommandPermissionType { ROLE = 1, USER = 2}
export { ApplicationCommandPermissionType as SlashCommandPermissionType }
export interface GuildApplicationCommmandPermissionsBase< T = ApplicationCommandPermissionPayload> { id: string permissions: T[]}
export type { GuildApplicationCommmandPermissionsBase as GuildSlashCommandPermissionsBase }
export interface GuildApplicationCommmandPermissionsPartial extends GuildApplicationCommmandPermissionsBase<ApplicationCommandPermission> {}
export type { GuildApplicationCommmandPermissionsPartial as GuildSlashCommmandPermissionsPartial }
export interface GuildApplicationCommmandPermissionsPayload extends GuildApplicationCommmandPermissionsBase { application_id: string guild_id: string}
export type { GuildApplicationCommmandPermissionsPayload as GuildSlashCommmandPermissionsPayload }
export interface GuildApplicationCommandPermissions extends GuildApplicationCommmandPermissionsPartial { applicationID: string guildID: string}
export type { GuildApplicationCommandPermissions as GuildSlashCommandPermissions }
export interface ApplicationCommandPermissionBase< T = ApplicationCommandPermissionType> { id: string type: T permission: boolean}
export type { ApplicationCommandPermissionBase as SlashCommandPermissionBase }
export interface ApplicationCommandPermission extends ApplicationCommandPermissionBase< | ApplicationCommandPermissionType | keyof typeof ApplicationCommandPermissionType > {}
export type { ApplicationCommandPermission as SlashCommandPermission }
export interface ApplicationCommandPermissionPayload extends ApplicationCommandPermissionBase {}
export type { ApplicationCommandPermissionPayload as SlashCommandPermissionPayload }