types: forward cache types to collector filters (#7126)

This commit is contained in:
Suneet Tipirneni
2021-12-21 03:16:02 -05:00
committed by GitHub
parent b9b60a37b3
commit 77489b90fc
2 changed files with 20 additions and 13 deletions

26
typings/index.d.ts vendored
View File

@@ -1377,19 +1377,25 @@ export class LimitedCollection<K, V> extends Collection<K, V> {
public static filterByLifetime<K, V>(options?: LifetimeFilterOptions<K, V>): SweepFilter<K, V>; public static filterByLifetime<K, V>(options?: LifetimeFilterOptions<K, V>): SweepFilter<K, V>;
} }
export type MessageCollectorOptionsParams<T extends MessageComponentTypeResolvable> = export type MessageCollectorOptionsParams<T extends MessageComponentTypeResolvable, Cached extends boolean = boolean> =
| { | {
componentType?: T; componentType?: T;
} & MessageComponentCollectorOptions<MappedInteractionTypes[T]>; } & MessageComponentCollectorOptions<MappedInteractionTypes<Cached>[T]>;
export type MessageChannelCollectorOptionsParams<T extends MessageComponentTypeResolvable> = export type MessageChannelCollectorOptionsParams<
T extends MessageComponentTypeResolvable,
Cached extends boolean = boolean,
> =
| { | {
componentType?: T; componentType?: T;
} & MessageChannelComponentCollectorOptions<MappedInteractionTypes[T]>; } & MessageChannelComponentCollectorOptions<MappedInteractionTypes<Cached>[T]>;
export type AwaitMessageCollectorOptionsParams<T extends MessageComponentTypeResolvable> = export type AwaitMessageCollectorOptionsParams<
T extends MessageComponentTypeResolvable,
Cached extends boolean = boolean,
> =
| { componentType?: T } & Pick< | { componentType?: T } & Pick<
InteractionCollectorOptions<MappedInteractionTypes[T]>, InteractionCollectorOptions<MappedInteractionTypes<Cached>[T]>,
keyof AwaitMessageComponentOptions<any> keyof AwaitMessageComponentOptions<any>
>; >;
@@ -1458,12 +1464,12 @@ export class Message<Cached extends boolean = boolean> extends Base {
public flags: Readonly<MessageFlags>; public flags: Readonly<MessageFlags>;
public reference: MessageReference | null; public reference: MessageReference | null;
public awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>( public awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: AwaitMessageCollectorOptionsParams<T>, options?: AwaitMessageCollectorOptionsParams<T, Cached>,
): Promise<MappedInteractionTypes<Cached>[T]>; ): Promise<MappedInteractionTypes<Cached>[T]>;
public awaitReactions(options?: AwaitReactionsOptions): Promise<Collection<Snowflake | string, MessageReaction>>; public awaitReactions(options?: AwaitReactionsOptions): Promise<Collection<Snowflake | string, MessageReaction>>;
public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector; public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector;
public createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>( public createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: MessageCollectorOptionsParams<T>, options?: MessageCollectorOptionsParams<T, Cached>,
): InteractionCollector<MappedInteractionTypes<Cached>[T]>; ): InteractionCollector<MappedInteractionTypes<Cached>[T]>;
public delete(): Promise<Message>; public delete(): Promise<Message>;
public edit(content: string | MessageEditOptions | MessagePayload): Promise<Message>; public edit(content: string | MessageEditOptions | MessagePayload): Promise<Message>;
@@ -3205,7 +3211,7 @@ export interface TextBasedChannelFields extends PartialTextBasedChannelFields {
lastPinTimestamp: number | null; lastPinTimestamp: number | null;
readonly lastPinAt: Date | null; readonly lastPinAt: Date | null;
awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>( awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: AwaitMessageCollectorOptionsParams<T>, options?: AwaitMessageCollectorOptionsParams<T, true>,
): Promise<MappedInteractionTypes[T]>; ): Promise<MappedInteractionTypes[T]>;
awaitMessages(options?: AwaitMessagesOptions): Promise<Collection<Snowflake, Message>>; awaitMessages(options?: AwaitMessagesOptions): Promise<Collection<Snowflake, Message>>;
bulkDelete( bulkDelete(
@@ -3213,7 +3219,7 @@ export interface TextBasedChannelFields extends PartialTextBasedChannelFields {
filterOld?: boolean, filterOld?: boolean,
): Promise<Collection<Snowflake, Message>>; ): Promise<Collection<Snowflake, Message>>;
createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>( createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: MessageChannelCollectorOptionsParams<T>, options?: MessageChannelCollectorOptionsParams<T, true>,
): InteractionCollector<MappedInteractionTypes[T]>; ): InteractionCollector<MappedInteractionTypes[T]>;
createMessageCollector(options?: MessageCollectorOptions): MessageCollector; createMessageCollector(options?: MessageCollectorOptions): MessageCollector;
sendTyping(): Promise<void>; sendTyping(): Promise<void>;

View File

@@ -536,6 +536,7 @@ client.on('messageCreate', async message => {
const buttonCollector = message.createMessageComponentCollector({ componentType: 'BUTTON' }); const buttonCollector = message.createMessageComponentCollector({ componentType: 'BUTTON' });
expectType<InteractionCollector<ButtonInteraction<'cached'>>>(buttonCollector); expectType<InteractionCollector<ButtonInteraction<'cached'>>>(buttonCollector);
expectAssignable<(test: ButtonInteraction<'cached'>) => boolean | Promise<boolean>>(buttonCollector.filter);
expectType<GuildTextBasedChannel>(message.channel); expectType<GuildTextBasedChannel>(message.channel);
expectType<Guild>(message.guild); expectType<Guild>(message.guild);
expectType<GuildMember | null>(message.member); expectType<GuildMember | null>(message.member);
@@ -642,7 +643,7 @@ client.on('messageCreate', async message => {
channel.awaitMessageComponent({ channel.awaitMessageComponent({
filter: i => { filter: i => {
expectType<MessageComponentInteraction>(i); expectType<MessageComponentInteraction<'cached'>>(i);
return true; return true;
}, },
}); });
@@ -650,7 +651,7 @@ client.on('messageCreate', async message => {
channel.awaitMessageComponent({ channel.awaitMessageComponent({
componentType: 'BUTTON', componentType: 'BUTTON',
filter: i => { filter: i => {
expectType<ButtonInteraction>(i); expectType<ButtonInteraction<'cached'>>(i);
return true; return true;
}, },
}); });
@@ -658,7 +659,7 @@ client.on('messageCreate', async message => {
channel.awaitMessageComponent({ channel.awaitMessageComponent({
componentType: 'SELECT_MENU', componentType: 'SELECT_MENU',
filter: i => { filter: i => {
expectType<SelectMenuInteraction>(i); expectType<SelectMenuInteraction<'cached'>>(i);
return true; return true;
}, },
}); });