From 2ce244b502293c07ff1c3e929b2afb861e341d88 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sun, 12 Dec 2021 21:06:24 +0000 Subject: [PATCH] types(MessageComponentInteraction): Ensure `component` is not `null` (#7099) --- typings/index.d.ts | 20 ++++++++++++++++++-- typings/index.test-d.ts | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/typings/index.d.ts b/typings/index.d.ts index 09d67aa50..b47fcac82 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -448,6 +448,13 @@ export class BitField { export class ButtonInteraction extends MessageComponentInteraction { private constructor(client: Client, data: RawMessageButtonInteractionData); + public readonly component: CacheTypeReducer< + Cached, + MessageButton, + APIButtonComponent, + MessageButton | APIButtonComponent, + MessageButton | APIButtonComponent + >; public componentType: 'BUTTON'; public inGuild(): this is ButtonInteraction<'present'>; public inCachedGuild(): this is ButtonInteraction<'cached'>; @@ -1535,8 +1542,10 @@ export class MessageComponentInteraction e public readonly component: CacheTypeReducer< Cached, MessageActionRowComponent, - Exclude - > | null; + Exclude, + MessageActionRowComponent | Exclude, + MessageActionRowComponent | Exclude + >; public componentType: Exclude; public customId: string; public channelId: Snowflake; @@ -1871,6 +1880,13 @@ export class Role extends Base { export class SelectMenuInteraction extends MessageComponentInteraction { public constructor(client: Client, data: RawMessageSelectMenuInteractionData); + public readonly component: CacheTypeReducer< + Cached, + MessageSelectMenu, + APISelectMenuComponent, + MessageSelectMenu | APISelectMenuComponent, + MessageSelectMenu | APISelectMenuComponent + >; public componentType: 'SELECT_MENU'; public values: string[]; public inGuild(): this is SelectMenuInteraction<'present'>; diff --git a/typings/index.test-d.ts b/typings/index.test-d.ts index 1bbb819c2..e8a202c0b 100644 --- a/typings/index.test-d.ts +++ b/typings/index.test-d.ts @@ -7,6 +7,8 @@ import type { APIInteractionDataResolvedGuildMember, APIInteractionDataResolvedChannel, APIRole, + APIButtonComponent, + APISelectMenuComponent, } from 'discord-api-types/v9'; import { AuditLogEvent } from 'discord-api-types/v9'; import { @@ -85,6 +87,8 @@ import { StageInstance, Sticker, Emoji, + MessageActionRowComponent, + MessageSelectMenu, } from '.'; import type { ApplicationCommandOptionTypes } from './enums'; import { expectAssignable, expectDeprecated, expectNotAssignable, expectNotType, expectType } from 'tsd'; @@ -955,16 +959,20 @@ client.on('interactionCreate', async interaction => { if (interaction.isButton()) { expectType(interaction); + expectType(interaction.component); if (interaction.inCachedGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectAssignable>(interaction.reply({ fetchReply: true })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); } else if (interaction.inGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectAssignable(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); } @@ -972,16 +980,20 @@ client.on('interactionCreate', async interaction => { if (interaction.isMessageComponent()) { expectType(interaction); + expectType(interaction.component); if (interaction.inCachedGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectAssignable>(interaction.reply({ fetchReply: true })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); } else if (interaction.inGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); } @@ -989,16 +1001,20 @@ client.on('interactionCreate', async interaction => { if (interaction.isSelectMenu()) { expectType(interaction); + expectType(interaction.component); if (interaction.inCachedGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>>(interaction.reply({ fetchReply: true })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); } else if (interaction.inGuild()) { expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); }