Skip to content

Commit

Permalink
types: forward cache types to collector filters (#7126)
Browse files Browse the repository at this point in the history
  • Loading branch information
suneettipirneni authored Dec 21, 2021
1 parent b9b60a3 commit 77489b9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
26 changes: 16 additions & 10 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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>;
}

export type MessageCollectorOptionsParams<T extends MessageComponentTypeResolvable> =
export type MessageCollectorOptionsParams<T extends MessageComponentTypeResolvable, Cached extends boolean = boolean> =
| {
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;
} & 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<
InteractionCollectorOptions<MappedInteractionTypes[T]>,
InteractionCollectorOptions<MappedInteractionTypes<Cached>[T]>,
keyof AwaitMessageComponentOptions<any>
>;

Expand Down Expand Up @@ -1458,12 +1464,12 @@ export class Message<Cached extends boolean = boolean> extends Base {
public flags: Readonly<MessageFlags>;
public reference: MessageReference | null;
public awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: AwaitMessageCollectorOptionsParams<T>,
options?: AwaitMessageCollectorOptionsParams<T, Cached>,
): Promise<MappedInteractionTypes<Cached>[T]>;
public awaitReactions(options?: AwaitReactionsOptions): Promise<Collection<Snowflake | string, MessageReaction>>;
public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector;
public createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: MessageCollectorOptionsParams<T>,
options?: MessageCollectorOptionsParams<T, Cached>,
): InteractionCollector<MappedInteractionTypes<Cached>[T]>;
public delete(): Promise<Message>;
public edit(content: string | MessageEditOptions | MessagePayload): Promise<Message>;
Expand Down Expand Up @@ -3205,15 +3211,15 @@ export interface TextBasedChannelFields extends PartialTextBasedChannelFields {
lastPinTimestamp: number | null;
readonly lastPinAt: Date | null;
awaitMessageComponent<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: AwaitMessageCollectorOptionsParams<T>,
options?: AwaitMessageCollectorOptionsParams<T, true>,
): Promise<MappedInteractionTypes[T]>;
awaitMessages(options?: AwaitMessagesOptions): Promise<Collection<Snowflake, Message>>;
bulkDelete(
messages: Collection<Snowflake, Message> | readonly MessageResolvable[] | number,
filterOld?: boolean,
): Promise<Collection<Snowflake, Message>>;
createMessageComponentCollector<T extends MessageComponentTypeResolvable = 'ACTION_ROW'>(
options?: MessageChannelCollectorOptionsParams<T>,
options?: MessageChannelCollectorOptionsParams<T, true>,
): InteractionCollector<MappedInteractionTypes[T]>;
createMessageCollector(options?: MessageCollectorOptions): MessageCollector;
sendTyping(): Promise<void>;
Expand Down
7 changes: 4 additions & 3 deletions typings/index.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,7 @@ client.on('messageCreate', async message => {

const buttonCollector = message.createMessageComponentCollector({ componentType: 'BUTTON' });
expectType<InteractionCollector<ButtonInteraction<'cached'>>>(buttonCollector);
expectAssignable<(test: ButtonInteraction<'cached'>) => boolean | Promise<boolean>>(buttonCollector.filter);
expectType<GuildTextBasedChannel>(message.channel);
expectType<Guild>(message.guild);
expectType<GuildMember | null>(message.member);
Expand Down Expand Up @@ -642,23 +643,23 @@ client.on('messageCreate', async message => {

channel.awaitMessageComponent({
filter: i => {
expectType<MessageComponentInteraction>(i);
expectType<MessageComponentInteraction<'cached'>>(i);
return true;
},
});

channel.awaitMessageComponent({
componentType: 'BUTTON',
filter: i => {
expectType<ButtonInteraction>(i);
expectType<ButtonInteraction<'cached'>>(i);
return true;
},
});

channel.awaitMessageComponent({
componentType: 'SELECT_MENU',
filter: i => {
expectType<SelectMenuInteraction>(i);
expectType<SelectMenuInteraction<'cached'>>(i);
return true;
},
});
Expand Down

0 comments on commit 77489b9

Please sign in to comment.