Module
x/discord_api_types/payloads/v8/interactions.ts
Up to date Discord API Typings, versioned by the API version
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427import type { Permissions, Snowflake } from '../../globals.ts';import type { RESTPostAPIWebhookWithTokenJSONBody } from '../../rest/v8/mod.ts';import type { APIGuildMember, APIPartialChannel, APIRole, APIUser, MessageFlags } from './mod.ts';
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommand */export interface APIApplicationCommand { /** * Unique id of the command */ id: Snowflake; /** * Unique id of the parent application */ application_id: Snowflake; /** * 1-32 character name matching `^[\w-]{1,32}$` */ name: string; /** * 1-100 character description */ description: string; /** * The parameters for the command */ options?: APIApplicationCommandOption[]; /** * Whether the command is enabled by default when the app is added to a guild * * If missing, this property should be assumed as `true` */ default_permission?: boolean;}
interface APIApplicationCommandOptionBase { type: | ApplicationCommandOptionType.BOOLEAN | ApplicationCommandOptionType.USER | ApplicationCommandOptionType.CHANNEL | ApplicationCommandOptionType.ROLE | ApplicationCommandOptionType.MENTIONABLE; name: string; description: string; default?: boolean; required?: boolean;}
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommandoption */export type APIApplicationCommandOption = | APIApplicationCommandArgumentOptions | APIApplicationCommandSubCommandOptions | APIApplicationCommandOptionBase;
/** * This type is exported as a way to make it stricter for you when you're writing your commands * * If the option is a `SUB_COMMAND` or `SUB_COMMAND_GROUP` type, this nested options will be the parameters */export interface APIApplicationCommandSubCommandOptions extends Omit<APIApplicationCommandOptionBase, 'type'> { type: ApplicationCommandOptionType.SUB_COMMAND | ApplicationCommandOptionType.SUB_COMMAND_GROUP; options?: APIApplicationCommandOption[];}
/** * This type is exported as a way to make it stricter for you when you're writing your commands * * In contrast to `APIApplicationCommandSubCommandOptions`, these types cannot have an `options` array, * but they can have a `choices` one */export interface APIApplicationCommandArgumentOptions extends Omit<APIApplicationCommandOptionBase, 'type'> { type: ApplicationCommandOptionType.STRING | ApplicationCommandOptionType.INTEGER; choices?: APIApplicationCommandOptionChoice[];}
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommandoptiontype */export enum ApplicationCommandOptionType { SUB_COMMAND = 1, SUB_COMMAND_GROUP, STRING, INTEGER, BOOLEAN, USER, CHANNEL, ROLE, MENTIONABLE,}
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommandoptionchoice */export interface APIApplicationCommandOptionChoice { name: string; value: string | number;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction */export interface APIBaseInteraction { /** * ID of the interaction */ id: Snowflake; /** * ID of the application this interaction is for */ application_id: Snowflake; /** * The type of interaction */ type: InteractionType; /** * The command data payload */ data?: APIApplicationCommandInteractionData; /** * The channel it was sent from */ channel_id?: Snowflake; /** * A continuation token for responding to the interaction */ token: string; /** * Read-only property, always `1` */ version: 1;}
/** * https://discord.com/developers/docs/resources/guild#guild-member-object */export interface APIInteractionGuildMember extends APIGuildMember { permissions: Permissions; user: APIUser;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction */export interface APIGuildInteraction extends APIBaseInteraction { /** * The guild it was sent from * * In the case of an `APIDMInteraction`, this will not be present */ guild_id: Snowflake; /** * Guild member data for the invoking user, including permissions */ member: APIInteractionGuildMember; channel_id: Snowflake;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction */export interface APIDMInteraction extends APIBaseInteraction { /** * User object for the invoking user, if invoked in a DM */ user: APIUser; channel_id: Snowflake;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction */export type APIInteraction = APIGuildInteraction | APIDMInteraction;
/** * Like APIGuildInteraction, only with the `data` property always present * * @see APIGuildInteraction */export type APIApplicationCommandGuildInteraction = Required<APIGuildInteraction>;
/** * Like APIDMInteraction, only with the `data` property always present * * @see APIDMInteraction */export type APIApplicationCommandDMInteraction = Required<APIDMInteraction>;
/** * Like APIInteraction, only with the `data` property always present * * @see APIInteraction */export type APIApplicationCommandInteraction = | APIApplicationCommandGuildInteraction | APIApplicationCommandDMInteraction;
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-interactiontype */export enum InteractionType { Ping = 1, ApplicationCommand,}
/** * https://discord.com/developers/docs/interactions/slash-commands#guildapplicationcommandpermissions */export interface APIGuildApplicationCommandPermissions { /** * The id of the command */ id: Snowflake; /** * The id of the application the command belongs to */ application_id: Snowflake; /** * The id of the guild */ guild_id: Snowflake; /** * The permissions for the command in the guild */ permissions: APIApplicationCommandPermission[];}
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissions */export interface APIApplicationCommandPermission { /** * The id of the role or user */ id: Snowflake; /** * Role or user */ type: ApplicationCommandPermissionType; /** * `true` to allow, `false`, to disallow */ permission: boolean;}
/** * https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissiontype */export enum ApplicationCommandPermissionType { ROLE = 1, USER,}
/** * https://discord.com/developers/docs/resources/channel#channel-object */export interface APIInteractionDataResolvedChannel extends Required<APIPartialChannel> { permissions: Permissions;}
/** * https://discord.com/developers/docs/resources/guild#guild-member-object */export interface APIInteractionDataResolvedGuildMember extends Omit<APIGuildMember, 'user' | 'deaf' | 'mute'> { permissions: Permissions;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-applicationcommandinteractiondata */export interface APIApplicationCommandInteractionData { id: Snowflake; name: string; options?: APIApplicationCommandInteractionDataOption[]; resolved?: { users?: Record<string, APIUser>; roles?: Record<string, APIRole>; members?: Record<string, APIInteractionDataResolvedGuildMember>; channels?: Record<string, APIInteractionDataResolvedChannel>; };}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-applicationcommandinteractiondataoption */export type APIApplicationCommandInteractionDataOption = | ApplicationCommandInteractionDataOptionSubCommand | ApplicationCommandInteractionDataOptionSubCommandGroup | APIApplicationCommandInteractionDataOptionWithValues;
export interface ApplicationCommandInteractionDataOptionSubCommand { name: string; type: ApplicationCommandOptionType.SUB_COMMAND; options: APIApplicationCommandInteractionDataOptionWithValues[];}
export interface ApplicationCommandInteractionDataOptionSubCommandGroup { name: string; type: ApplicationCommandOptionType.SUB_COMMAND_GROUP; options: ApplicationCommandInteractionDataOptionSubCommand[];}
export type APIApplicationCommandInteractionDataOptionWithValues = | ApplicationCommandInteractionDataOptionString | ApplicationCommandInteractionDataOptionRole | ApplicationCommandInteractionDataOptionChannel | ApplicationCommandInteractionDataOptionUser | ApplicationCommandInteractionDataOptionMentionable | ApplicationCommandInteractionDataOptionInteger | ApplicationCommandInteractionDataOptionBoolean;
export type ApplicationCommandInteractionDataOptionString = InteractionDataOptionBase< ApplicationCommandOptionType.STRING, string>;
export type ApplicationCommandInteractionDataOptionRole = InteractionDataOptionBase< ApplicationCommandOptionType.ROLE, Snowflake>;
export type ApplicationCommandInteractionDataOptionChannel = InteractionDataOptionBase< ApplicationCommandOptionType.CHANNEL, Snowflake>;
export type ApplicationCommandInteractionDataOptionUser = InteractionDataOptionBase< ApplicationCommandOptionType.USER, Snowflake>;
export type ApplicationCommandInteractionDataOptionMentionable = InteractionDataOptionBase< ApplicationCommandOptionType.MENTIONABLE, Snowflake>;
export type ApplicationCommandInteractionDataOptionInteger = InteractionDataOptionBase< ApplicationCommandOptionType.INTEGER, number>;
export type ApplicationCommandInteractionDataOptionBoolean = InteractionDataOptionBase< ApplicationCommandOptionType.BOOLEAN, boolean>;
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-response */export type APIInteractionResponse = | APIInteractionResponsePong | APIInteractionResponseChannelMessageWithSource | APIInteractionResponseDeferredChannelMessageWithSource;
export interface APIInteractionResponsePong { type: InteractionResponseType.Pong;}
export interface APIInteractionResponseChannelMessageWithSource { type: InteractionResponseType.ChannelMessageWithSource; data: APIInteractionApplicationCommandCallbackData;}
export interface APIInteractionResponseDeferredChannelMessageWithSource { type: InteractionResponseType.DeferredChannelMessageWithSource; data?: Pick<APIInteractionApplicationCommandCallbackData, 'flags'>;}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionresponsetype */export enum InteractionResponseType { /** * ACK a `Ping` */ Pong = 1, /** * Respond to an interaction with a message */ ChannelMessageWithSource = 4, /** * ACK an interaction and edit to a response later, the user sees a loading state */ DeferredChannelMessageWithSource,}
/** * https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionapplicationcommandcallbackdata */export type APIInteractionApplicationCommandCallbackData = Omit< RESTPostAPIWebhookWithTokenJSONBody, 'username' | 'avatar_url'> & { flags?: MessageFlags };
/** * https://discord.com/developers/docs/interactions/slash-commands#messageinteraction */export interface APIMessageInteraction { /** * ID of the interaction */ id: Snowflake; /** * The type of interaction */ type: InteractionType; /** * The name of the ApplicationCommand */ name: string; /** * The user who invoked the interaction */ user: APIUser;}
/** * @internal */interface InteractionDataOptionBase<T extends ApplicationCommandOptionType, D = unknown> { name: string; type: T; value: D;}