From cfac62e44a02a535b8ed412dae263b8c31475c4a Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Tue, 8 Apr 2025 22:54:35 +0200 Subject: [PATCH] fix: Ensure autocomplete option values resolve to string for numerical types (#1198) * fix: string values for autocomplete * fix: default types * test: add tests --- .../_chatInput/integer.ts | 8 ++++-- .../_applicationCommands/_chatInput/number.ts | 8 ++++-- .../_chatInput/subcommand.ts | 5 ++-- .../_chatInput/subcommandGroup.ts | 7 +++-- .../_applicationCommands/chatInput.ts | 27 ++++++++++++------ .../v10/_interactions/autocomplete.ts | 6 ++-- .../_chatInput/integer.ts | 8 ++++-- .../_applicationCommands/_chatInput/number.ts | 8 ++++-- .../_chatInput/subcommand.ts | 5 ++-- .../_chatInput/subcommandGroup.ts | 7 +++-- .../_applicationCommands/chatInput.ts | 27 ++++++++++++------ .../payloads/v9/_interactions/autocomplete.ts | 6 ++-- .../_chatInput/integer.ts | 8 ++++-- .../_applicationCommands/_chatInput/number.ts | 8 ++++-- .../_chatInput/subcommand.ts | 5 ++-- .../_chatInput/subcommandGroup.ts | 7 +++-- .../_applicationCommands/chatInput.ts | 27 ++++++++++++------ payloads/v10/_interactions/autocomplete.ts | 6 ++-- .../_chatInput/integer.ts | 8 ++++-- .../_applicationCommands/_chatInput/number.ts | 8 ++++-- .../_chatInput/subcommand.ts | 5 ++-- .../_chatInput/subcommandGroup.ts | 7 +++-- .../_applicationCommands/chatInput.ts | 27 ++++++++++++------ payloads/v9/_interactions/autocomplete.ts | 6 ++-- tests/v10/interactions.ts | 28 ++++++++++++++++++- 25 files changed, 191 insertions(+), 81 deletions(-) diff --git a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts index c31f79d5..fb7a05b4 100644 --- a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts +++ b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandIntegerOption = APIApplicationCommandOptionWith APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataIntegerOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataIntegerOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Integer, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts index fe003650..177670b8 100644 --- a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts +++ b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandNumberOption = APIApplicationCommandOptionWithA APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataNumberOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataNumberOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Number, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts index 5c7e132a..1e5de4cd 100644 --- a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts +++ b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandBasicOption, APIApplicationCommandInteractionDataBasicOption } from '../chatInput.ts'; import type { APIApplicationCommandOptionBase } from './base.ts'; import type { ApplicationCommandOptionType } from './shared.ts'; @@ -7,8 +8,8 @@ export interface APIApplicationCommandSubcommandOption options?: APIApplicationCommandBasicOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandOption { +export interface APIApplicationCommandInteractionDataSubcommandOption { name: string; type: ApplicationCommandOptionType.Subcommand; - options?: APIApplicationCommandInteractionDataBasicOption[]; + options?: APIApplicationCommandInteractionDataBasicOption[]; } diff --git a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts index 78698d1d..db0c4187 100644 --- a/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts +++ b/deno/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase } from './base.ts'; import type { ApplicationCommandOptionType } from './shared.ts'; import type { @@ -10,8 +11,10 @@ export interface APIApplicationCommandSubcommandGroupOption options?: APIApplicationCommandSubcommandOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandGroupOption { +export interface APIApplicationCommandInteractionDataSubcommandGroupOption< + Type extends InteractionType = InteractionType, +> { name: string; type: ApplicationCommandOptionType.SubcommandGroup; - options: APIApplicationCommandInteractionDataSubcommandOption[]; + options: APIApplicationCommandInteractionDataSubcommandOption[]; } diff --git a/deno/payloads/v10/_interactions/_applicationCommands/chatInput.ts b/deno/payloads/v10/_interactions/_applicationCommands/chatInput.ts index c22f69c9..3ef9aeec 100644 --- a/deno/payloads/v10/_interactions/_applicationCommands/chatInput.ts +++ b/deno/payloads/v10/_interactions/_applicationCommands/chatInput.ts @@ -1,4 +1,4 @@ -import type { APIInteractionDataResolved } from '../../mod.ts'; +import type { APIInteractionDataResolved, InteractionType } from '../../mod.ts'; import type { APIApplicationCommandInteractionWrapper, ApplicationCommandType } from '../applicationCommands.ts'; import type { APIDMInteractionWrapper, APIGuildInteractionWrapper } from '../base.ts'; import type { @@ -86,18 +86,18 @@ export type APIApplicationCommandOption = /** * https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-interaction-data-option-structure */ -export type APIApplicationCommandInteractionDataOption = - | APIApplicationCommandInteractionDataBasicOption - | APIApplicationCommandInteractionDataSubcommandGroupOption - | APIApplicationCommandInteractionDataSubcommandOption; +export type APIApplicationCommandInteractionDataOption = + | APIApplicationCommandInteractionDataBasicOption + | APIApplicationCommandInteractionDataSubcommandGroupOption + | APIApplicationCommandInteractionDataSubcommandOption; -export type APIApplicationCommandInteractionDataBasicOption = +export type APIApplicationCommandInteractionDataBasicOption = | APIApplicationCommandInteractionDataAttachmentOption | APIApplicationCommandInteractionDataBooleanOption | APIApplicationCommandInteractionDataChannelOption - | APIApplicationCommandInteractionDataIntegerOption + | APIApplicationCommandInteractionDataIntegerOption | APIApplicationCommandInteractionDataMentionableOption - | APIApplicationCommandInteractionDataNumberOption + | APIApplicationCommandInteractionDataNumberOption | APIApplicationCommandInteractionDataRoleOption | APIApplicationCommandInteractionDataStringOption | APIApplicationCommandInteractionDataUserOption; @@ -107,7 +107,16 @@ export type APIApplicationCommandInteractionDataBasicOption = */ export interface APIChatInputApplicationCommandInteractionData extends APIBaseApplicationCommandInteractionData { - options?: APIApplicationCommandInteractionDataOption[]; + options?: APIApplicationCommandInteractionDataOption[]; + resolved?: APIInteractionDataResolved; +} + +/** + * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-data + */ +export interface APIAutocompleteApplicationCommandInteractionData + extends APIBaseApplicationCommandInteractionData { + options?: APIApplicationCommandInteractionDataOption[]; resolved?: APIInteractionDataResolved; } diff --git a/deno/payloads/v10/_interactions/autocomplete.ts b/deno/payloads/v10/_interactions/autocomplete.ts index 9491b957..661142b1 100644 --- a/deno/payloads/v10/_interactions/autocomplete.ts +++ b/deno/payloads/v10/_interactions/autocomplete.ts @@ -1,6 +1,6 @@ import type { APIBaseInteraction, - APIChatInputApplicationCommandInteractionData, + APIAutocompleteApplicationCommandInteractionData, APIDMInteractionWrapper, APIGuildInteractionWrapper, InteractionType, @@ -8,13 +8,13 @@ import type { export type APIApplicationCommandAutocompleteInteraction = APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - APIChatInputApplicationCommandInteractionData + APIAutocompleteApplicationCommandInteractionData > & Required< Pick< APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - Required> + Required> >, 'data' > diff --git a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts index c31f79d5..fb7a05b4 100644 --- a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts +++ b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandIntegerOption = APIApplicationCommandOptionWith APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataIntegerOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataIntegerOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Integer, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts index fe003650..177670b8 100644 --- a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts +++ b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandNumberOption = APIApplicationCommandOptionWithA APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataNumberOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataNumberOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Number, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts index 5c7e132a..1e5de4cd 100644 --- a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts +++ b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandBasicOption, APIApplicationCommandInteractionDataBasicOption } from '../chatInput.ts'; import type { APIApplicationCommandOptionBase } from './base.ts'; import type { ApplicationCommandOptionType } from './shared.ts'; @@ -7,8 +8,8 @@ export interface APIApplicationCommandSubcommandOption options?: APIApplicationCommandBasicOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandOption { +export interface APIApplicationCommandInteractionDataSubcommandOption { name: string; type: ApplicationCommandOptionType.Subcommand; - options?: APIApplicationCommandInteractionDataBasicOption[]; + options?: APIApplicationCommandInteractionDataBasicOption[]; } diff --git a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts index 78698d1d..db0c4187 100644 --- a/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts +++ b/deno/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses.ts'; import type { APIApplicationCommandOptionBase } from './base.ts'; import type { ApplicationCommandOptionType } from './shared.ts'; import type { @@ -10,8 +11,10 @@ export interface APIApplicationCommandSubcommandGroupOption options?: APIApplicationCommandSubcommandOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandGroupOption { +export interface APIApplicationCommandInteractionDataSubcommandGroupOption< + Type extends InteractionType = InteractionType, +> { name: string; type: ApplicationCommandOptionType.SubcommandGroup; - options: APIApplicationCommandInteractionDataSubcommandOption[]; + options: APIApplicationCommandInteractionDataSubcommandOption[]; } diff --git a/deno/payloads/v9/_interactions/_applicationCommands/chatInput.ts b/deno/payloads/v9/_interactions/_applicationCommands/chatInput.ts index c22f69c9..3ef9aeec 100644 --- a/deno/payloads/v9/_interactions/_applicationCommands/chatInput.ts +++ b/deno/payloads/v9/_interactions/_applicationCommands/chatInput.ts @@ -1,4 +1,4 @@ -import type { APIInteractionDataResolved } from '../../mod.ts'; +import type { APIInteractionDataResolved, InteractionType } from '../../mod.ts'; import type { APIApplicationCommandInteractionWrapper, ApplicationCommandType } from '../applicationCommands.ts'; import type { APIDMInteractionWrapper, APIGuildInteractionWrapper } from '../base.ts'; import type { @@ -86,18 +86,18 @@ export type APIApplicationCommandOption = /** * https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-interaction-data-option-structure */ -export type APIApplicationCommandInteractionDataOption = - | APIApplicationCommandInteractionDataBasicOption - | APIApplicationCommandInteractionDataSubcommandGroupOption - | APIApplicationCommandInteractionDataSubcommandOption; +export type APIApplicationCommandInteractionDataOption = + | APIApplicationCommandInteractionDataBasicOption + | APIApplicationCommandInteractionDataSubcommandGroupOption + | APIApplicationCommandInteractionDataSubcommandOption; -export type APIApplicationCommandInteractionDataBasicOption = +export type APIApplicationCommandInteractionDataBasicOption = | APIApplicationCommandInteractionDataAttachmentOption | APIApplicationCommandInteractionDataBooleanOption | APIApplicationCommandInteractionDataChannelOption - | APIApplicationCommandInteractionDataIntegerOption + | APIApplicationCommandInteractionDataIntegerOption | APIApplicationCommandInteractionDataMentionableOption - | APIApplicationCommandInteractionDataNumberOption + | APIApplicationCommandInteractionDataNumberOption | APIApplicationCommandInteractionDataRoleOption | APIApplicationCommandInteractionDataStringOption | APIApplicationCommandInteractionDataUserOption; @@ -107,7 +107,16 @@ export type APIApplicationCommandInteractionDataBasicOption = */ export interface APIChatInputApplicationCommandInteractionData extends APIBaseApplicationCommandInteractionData { - options?: APIApplicationCommandInteractionDataOption[]; + options?: APIApplicationCommandInteractionDataOption[]; + resolved?: APIInteractionDataResolved; +} + +/** + * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-data + */ +export interface APIAutocompleteApplicationCommandInteractionData + extends APIBaseApplicationCommandInteractionData { + options?: APIApplicationCommandInteractionDataOption[]; resolved?: APIInteractionDataResolved; } diff --git a/deno/payloads/v9/_interactions/autocomplete.ts b/deno/payloads/v9/_interactions/autocomplete.ts index 9491b957..661142b1 100644 --- a/deno/payloads/v9/_interactions/autocomplete.ts +++ b/deno/payloads/v9/_interactions/autocomplete.ts @@ -1,6 +1,6 @@ import type { APIBaseInteraction, - APIChatInputApplicationCommandInteractionData, + APIAutocompleteApplicationCommandInteractionData, APIDMInteractionWrapper, APIGuildInteractionWrapper, InteractionType, @@ -8,13 +8,13 @@ import type { export type APIApplicationCommandAutocompleteInteraction = APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - APIChatInputApplicationCommandInteractionData + APIAutocompleteApplicationCommandInteractionData > & Required< Pick< APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - Required> + Required> >, 'data' > diff --git a/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts b/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts index 6da871b8..a8e5f966 100644 --- a/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts +++ b/payloads/v10/_interactions/_applicationCommands/_chatInput/integer.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandIntegerOption = APIApplicationCommandOptionWith APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataIntegerOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataIntegerOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Integer, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts b/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts index 108b1105..b22e289f 100644 --- a/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts +++ b/payloads/v10/_interactions/_applicationCommands/_chatInput/number.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandNumberOption = APIApplicationCommandOptionWithA APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataNumberOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataNumberOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Number, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts b/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts index d443fb8d..4da2b11e 100644 --- a/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts +++ b/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommand.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandBasicOption, APIApplicationCommandInteractionDataBasicOption } from '../chatInput'; import type { APIApplicationCommandOptionBase } from './base'; import type { ApplicationCommandOptionType } from './shared'; @@ -7,8 +8,8 @@ export interface APIApplicationCommandSubcommandOption options?: APIApplicationCommandBasicOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandOption { +export interface APIApplicationCommandInteractionDataSubcommandOption { name: string; type: ApplicationCommandOptionType.Subcommand; - options?: APIApplicationCommandInteractionDataBasicOption[]; + options?: APIApplicationCommandInteractionDataBasicOption[]; } diff --git a/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts b/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts index 37d5f725..b8fb8923 100644 --- a/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts +++ b/payloads/v10/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase } from './base'; import type { ApplicationCommandOptionType } from './shared'; import type { @@ -10,8 +11,10 @@ export interface APIApplicationCommandSubcommandGroupOption options?: APIApplicationCommandSubcommandOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandGroupOption { +export interface APIApplicationCommandInteractionDataSubcommandGroupOption< + Type extends InteractionType = InteractionType, +> { name: string; type: ApplicationCommandOptionType.SubcommandGroup; - options: APIApplicationCommandInteractionDataSubcommandOption[]; + options: APIApplicationCommandInteractionDataSubcommandOption[]; } diff --git a/payloads/v10/_interactions/_applicationCommands/chatInput.ts b/payloads/v10/_interactions/_applicationCommands/chatInput.ts index f1ae3148..ec819d03 100644 --- a/payloads/v10/_interactions/_applicationCommands/chatInput.ts +++ b/payloads/v10/_interactions/_applicationCommands/chatInput.ts @@ -1,4 +1,4 @@ -import type { APIInteractionDataResolved } from '../../index'; +import type { APIInteractionDataResolved, InteractionType } from '../../index'; import type { APIApplicationCommandInteractionWrapper, ApplicationCommandType } from '../applicationCommands'; import type { APIDMInteractionWrapper, APIGuildInteractionWrapper } from '../base'; import type { @@ -86,18 +86,18 @@ export type APIApplicationCommandOption = /** * https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-interaction-data-option-structure */ -export type APIApplicationCommandInteractionDataOption = - | APIApplicationCommandInteractionDataBasicOption - | APIApplicationCommandInteractionDataSubcommandGroupOption - | APIApplicationCommandInteractionDataSubcommandOption; +export type APIApplicationCommandInteractionDataOption = + | APIApplicationCommandInteractionDataBasicOption + | APIApplicationCommandInteractionDataSubcommandGroupOption + | APIApplicationCommandInteractionDataSubcommandOption; -export type APIApplicationCommandInteractionDataBasicOption = +export type APIApplicationCommandInteractionDataBasicOption = | APIApplicationCommandInteractionDataAttachmentOption | APIApplicationCommandInteractionDataBooleanOption | APIApplicationCommandInteractionDataChannelOption - | APIApplicationCommandInteractionDataIntegerOption + | APIApplicationCommandInteractionDataIntegerOption | APIApplicationCommandInteractionDataMentionableOption - | APIApplicationCommandInteractionDataNumberOption + | APIApplicationCommandInteractionDataNumberOption | APIApplicationCommandInteractionDataRoleOption | APIApplicationCommandInteractionDataStringOption | APIApplicationCommandInteractionDataUserOption; @@ -107,7 +107,16 @@ export type APIApplicationCommandInteractionDataBasicOption = */ export interface APIChatInputApplicationCommandInteractionData extends APIBaseApplicationCommandInteractionData { - options?: APIApplicationCommandInteractionDataOption[]; + options?: APIApplicationCommandInteractionDataOption[]; + resolved?: APIInteractionDataResolved; +} + +/** + * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-data + */ +export interface APIAutocompleteApplicationCommandInteractionData + extends APIBaseApplicationCommandInteractionData { + options?: APIApplicationCommandInteractionDataOption[]; resolved?: APIInteractionDataResolved; } diff --git a/payloads/v10/_interactions/autocomplete.ts b/payloads/v10/_interactions/autocomplete.ts index 79d5485f..6151dfed 100644 --- a/payloads/v10/_interactions/autocomplete.ts +++ b/payloads/v10/_interactions/autocomplete.ts @@ -1,6 +1,6 @@ import type { APIBaseInteraction, - APIChatInputApplicationCommandInteractionData, + APIAutocompleteApplicationCommandInteractionData, APIDMInteractionWrapper, APIGuildInteractionWrapper, InteractionType, @@ -8,13 +8,13 @@ import type { export type APIApplicationCommandAutocompleteInteraction = APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - APIChatInputApplicationCommandInteractionData + APIAutocompleteApplicationCommandInteractionData > & Required< Pick< APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - Required> + Required> >, 'data' > diff --git a/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts b/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts index 6da871b8..a8e5f966 100644 --- a/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts +++ b/payloads/v9/_interactions/_applicationCommands/_chatInput/integer.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandIntegerOption = APIApplicationCommandOptionWith APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataIntegerOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataIntegerOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Integer, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts b/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts index 108b1105..b22e289f 100644 --- a/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts +++ b/payloads/v9/_interactions/_applicationCommands/_chatInput/number.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase, APIApplicationCommandOptionWithAutocompleteOrChoicesWrapper, @@ -22,7 +23,10 @@ export type APIApplicationCommandNumberOption = APIApplicationCommandOptionWithA APIApplicationCommandOptionChoice >; -export interface APIApplicationCommandInteractionDataNumberOption - extends APIInteractionDataOptionBase { +export interface APIApplicationCommandInteractionDataNumberOption + extends APIInteractionDataOptionBase< + ApplicationCommandOptionType.Number, + Type extends InteractionType.ApplicationCommandAutocomplete ? string : number + > { focused?: boolean; } diff --git a/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts b/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts index d443fb8d..4da2b11e 100644 --- a/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts +++ b/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommand.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandBasicOption, APIApplicationCommandInteractionDataBasicOption } from '../chatInput'; import type { APIApplicationCommandOptionBase } from './base'; import type { ApplicationCommandOptionType } from './shared'; @@ -7,8 +8,8 @@ export interface APIApplicationCommandSubcommandOption options?: APIApplicationCommandBasicOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandOption { +export interface APIApplicationCommandInteractionDataSubcommandOption { name: string; type: ApplicationCommandOptionType.Subcommand; - options?: APIApplicationCommandInteractionDataBasicOption[]; + options?: APIApplicationCommandInteractionDataBasicOption[]; } diff --git a/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts b/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts index 37d5f725..b8fb8923 100644 --- a/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts +++ b/payloads/v9/_interactions/_applicationCommands/_chatInput/subcommandGroup.ts @@ -1,3 +1,4 @@ +import type { InteractionType } from '../../responses'; import type { APIApplicationCommandOptionBase } from './base'; import type { ApplicationCommandOptionType } from './shared'; import type { @@ -10,8 +11,10 @@ export interface APIApplicationCommandSubcommandGroupOption options?: APIApplicationCommandSubcommandOption[]; } -export interface APIApplicationCommandInteractionDataSubcommandGroupOption { +export interface APIApplicationCommandInteractionDataSubcommandGroupOption< + Type extends InteractionType = InteractionType, +> { name: string; type: ApplicationCommandOptionType.SubcommandGroup; - options: APIApplicationCommandInteractionDataSubcommandOption[]; + options: APIApplicationCommandInteractionDataSubcommandOption[]; } diff --git a/payloads/v9/_interactions/_applicationCommands/chatInput.ts b/payloads/v9/_interactions/_applicationCommands/chatInput.ts index f1ae3148..ec819d03 100644 --- a/payloads/v9/_interactions/_applicationCommands/chatInput.ts +++ b/payloads/v9/_interactions/_applicationCommands/chatInput.ts @@ -1,4 +1,4 @@ -import type { APIInteractionDataResolved } from '../../index'; +import type { APIInteractionDataResolved, InteractionType } from '../../index'; import type { APIApplicationCommandInteractionWrapper, ApplicationCommandType } from '../applicationCommands'; import type { APIDMInteractionWrapper, APIGuildInteractionWrapper } from '../base'; import type { @@ -86,18 +86,18 @@ export type APIApplicationCommandOption = /** * https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-interaction-data-option-structure */ -export type APIApplicationCommandInteractionDataOption = - | APIApplicationCommandInteractionDataBasicOption - | APIApplicationCommandInteractionDataSubcommandGroupOption - | APIApplicationCommandInteractionDataSubcommandOption; +export type APIApplicationCommandInteractionDataOption = + | APIApplicationCommandInteractionDataBasicOption + | APIApplicationCommandInteractionDataSubcommandGroupOption + | APIApplicationCommandInteractionDataSubcommandOption; -export type APIApplicationCommandInteractionDataBasicOption = +export type APIApplicationCommandInteractionDataBasicOption = | APIApplicationCommandInteractionDataAttachmentOption | APIApplicationCommandInteractionDataBooleanOption | APIApplicationCommandInteractionDataChannelOption - | APIApplicationCommandInteractionDataIntegerOption + | APIApplicationCommandInteractionDataIntegerOption | APIApplicationCommandInteractionDataMentionableOption - | APIApplicationCommandInteractionDataNumberOption + | APIApplicationCommandInteractionDataNumberOption | APIApplicationCommandInteractionDataRoleOption | APIApplicationCommandInteractionDataStringOption | APIApplicationCommandInteractionDataUserOption; @@ -107,7 +107,16 @@ export type APIApplicationCommandInteractionDataBasicOption = */ export interface APIChatInputApplicationCommandInteractionData extends APIBaseApplicationCommandInteractionData { - options?: APIApplicationCommandInteractionDataOption[]; + options?: APIApplicationCommandInteractionDataOption[]; + resolved?: APIInteractionDataResolved; +} + +/** + * https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-data + */ +export interface APIAutocompleteApplicationCommandInteractionData + extends APIBaseApplicationCommandInteractionData { + options?: APIApplicationCommandInteractionDataOption[]; resolved?: APIInteractionDataResolved; } diff --git a/payloads/v9/_interactions/autocomplete.ts b/payloads/v9/_interactions/autocomplete.ts index 79d5485f..6151dfed 100644 --- a/payloads/v9/_interactions/autocomplete.ts +++ b/payloads/v9/_interactions/autocomplete.ts @@ -1,6 +1,6 @@ import type { APIBaseInteraction, - APIChatInputApplicationCommandInteractionData, + APIAutocompleteApplicationCommandInteractionData, APIDMInteractionWrapper, APIGuildInteractionWrapper, InteractionType, @@ -8,13 +8,13 @@ import type { export type APIApplicationCommandAutocompleteInteraction = APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - APIChatInputApplicationCommandInteractionData + APIAutocompleteApplicationCommandInteractionData > & Required< Pick< APIBaseInteraction< InteractionType.ApplicationCommandAutocomplete, - Required> + Required> >, 'data' > diff --git a/tests/v10/interactions.ts b/tests/v10/interactions.ts index 3c0116ac..2c8405d8 100644 --- a/tests/v10/interactions.ts +++ b/tests/v10/interactions.ts @@ -13,7 +13,7 @@ import type { APIModalSubmission, APIUser, } from '../../v10'; -import { ComponentType, InteractionType } from '../../v10'; +import { ApplicationCommandOptionType, ApplicationCommandType, ComponentType, InteractionType } from '../../v10'; import { expectAssignable } from '../__utils__/type-assertions'; declare const interaction: APIInteraction; @@ -24,6 +24,20 @@ if (interaction.type === InteractionType.ApplicationCommand) { const { data } = interaction; expectAssignable(data); expectAssignable(data.guild_id); + + if (data.type === ApplicationCommandType.ChatInput) { + if (data.options?.[0]?.type === ApplicationCommandOptionType.String) { + expectAssignable(data.options[0].value); + } + + if (data.options?.[0]?.type === ApplicationCommandOptionType.Integer) { + expectAssignable(data.options[0].value); + } + + if (data.options?.[0]?.type === ApplicationCommandOptionType.Number) { + expectAssignable(data.options[0].value); + } + } } if (interaction.type === InteractionType.MessageComponent) { @@ -42,6 +56,18 @@ if (interaction.type === InteractionType.MessageComponent) { if (interaction.type === InteractionType.ApplicationCommandAutocomplete) { expectAssignable(interaction.data); + + if (interaction.data.options[0]?.type === ApplicationCommandOptionType.String) { + expectAssignable(interaction.data.options[0].value); + } + + if (interaction.data.options[0]?.type === ApplicationCommandOptionType.Integer) { + expectAssignable(interaction.data.options[0].value); + } + + if (interaction.data.options[0]?.type === ApplicationCommandOptionType.Number) { + expectAssignable(interaction.data.options[0].value); + } } if (interaction.type === InteractionType.ModalSubmit) {