From 17a6f5d3c971bf8d47dfed37c96e064ae74535e3 Mon Sep 17 00:00:00 2001 From: Qjuh <76154676+Qjuh@users.noreply.github.com> Date: Fri, 1 Dec 2023 21:13:20 +0100 Subject: [PATCH] types: omit unnecessary methods from .options (#10003) * types: omit getUser/Member/Message from ContextMenu interaction * types: omit getAttachment and add tests * fix: remove duplicate tests --- packages/discord.js/typings/index.d.ts | 45 +++++++++++++++------ packages/discord.js/typings/index.test-d.ts | 29 +++++++++++++ 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 312f66796..6897c7849 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -542,6 +542,8 @@ export abstract class CommandInteraction e | 'getFocused' | 'getMentionable' | 'getRole' + | 'getUser' + | 'getMember' | 'getAttachment' | 'getNumber' | 'getInteger' @@ -1269,19 +1271,6 @@ export class CommandInteractionOptionResolver extends CommandInteraction { public commandType: ApplicationCommandType.Message | ApplicationCommandType.User; - public options: Omit< - CommandInteractionOptionResolver, - | 'getFocused' - | 'getMentionable' - | 'getRole' - | 'getNumber' - | 'getInteger' - | 'getString' - | 'getChannel' - | 'getBoolean' - | 'getSubcommandGroup' - | 'getSubcommand' - >; public targetId: Snowflake; public inGuild(): this is ContextMenuCommandInteraction<'raw' | 'cached'>; public inCachedGuild(): this is ContextMenuCommandInteraction<'cached'>; @@ -2222,6 +2211,21 @@ export class MessageContextMenuCommandInteraction< Cached extends CacheType = CacheType, > extends ContextMenuCommandInteraction { public commandType: ApplicationCommandType.Message; + public options: Omit< + CommandInteractionOptionResolver, + | 'getFocused' + | 'getMentionable' + | 'getRole' + | 'getUser' + | 'getNumber' + | 'getAttachment' + | 'getInteger' + | 'getString' + | 'getChannel' + | 'getBoolean' + | 'getSubcommandGroup' + | 'getSubcommand' + >; public get targetMessage(): NonNullable['message']>; public inGuild(): this is MessageContextMenuCommandInteraction<'raw' | 'cached'>; public inCachedGuild(): this is MessageContextMenuCommandInteraction<'cached'>; @@ -3233,6 +3237,21 @@ export class UserContextMenuCommandInteraction< Cached extends CacheType = CacheType, > extends ContextMenuCommandInteraction { public commandType: ApplicationCommandType.User; + public options: Omit< + CommandInteractionOptionResolver, + | 'getMessage' + | 'getFocused' + | 'getMentionable' + | 'getRole' + | 'getNumber' + | 'getAttachment' + | 'getInteger' + | 'getString' + | 'getChannel' + | 'getBoolean' + | 'getSubcommandGroup' + | 'getSubcommand' + >; public get targetUser(): User; public get targetMember(): CacheTypeReducer | null; public inGuild(): this is UserContextMenuCommandInteraction<'raw' | 'cached'>; diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 8324a0382..4e9f064ab 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -1803,6 +1803,8 @@ client.on('interactionCreate', async interaction => { interaction.commandType === ApplicationCommandType.Message) ) { expectType(interaction); + // @ts-expect-error No attachment options on contextmenu commands + interaction.options.getAttachment('name'); if (interaction.inCachedGuild()) { expectAssignable(interaction); expectAssignable(interaction.guild); @@ -1836,12 +1838,36 @@ client.on('interactionCreate', async interaction => { interaction.commandType === ApplicationCommandType.Message ) { expectType(interaction.targetMessage); + expectType(interaction.options.getMessage('_MESSAGE')); if (interaction.inCachedGuild()) { expectType>(interaction.targetMessage); + expectType | null>(interaction.options.getMessage('_MESSAGE')); } else if (interaction.inRawGuild()) { expectType>(interaction.targetMessage); + expectType | null>(interaction.options.getMessage('_MESSAGE')); } else if (interaction.inGuild()) { expectType(interaction.targetMessage); + expectType(interaction.options.getMessage('_MESSAGE')); + } + } + + if ( + interaction.type === InteractionType.ApplicationCommand && + interaction.commandType === ApplicationCommandType.User + ) { + expectType(interaction.targetUser); + expectType(interaction.targetMember); + expectType(interaction.options.getUser('user')); + expectType(interaction.options.getMember('user')); + if (interaction.inCachedGuild()) { + expectType(interaction.targetMember); + expectType(interaction.options.getMember('user')); + } else if (interaction.inRawGuild()) { + expectType(interaction.targetMember); + expectType(interaction.options.getMember('user')); + } else if (interaction.inGuild()) { + expectType(interaction.targetMember); + expectType(interaction.options.getMember('user')); } } @@ -1975,6 +2001,9 @@ client.on('interactionCreate', async interaction => { expectType(interaction.options.getSubcommandGroup()); expectType(interaction.options.getSubcommandGroup(booleanValue)); expectType(interaction.options.getSubcommandGroup(false)); + + // @ts-expect-error + interaction.options.getMessage('name'); } if (interaction.isRepliable()) {