Skip to content

Commit

Permalink
typings: Collector filter parameter inference (#6574)
Browse files Browse the repository at this point in the history
  • Loading branch information
suneettipirneni committed Sep 1, 2021
1 parent d16ada9 commit 0841956
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 10 deletions.
23 changes: 13 additions & 10 deletions typings/index.d.ts
Expand Up @@ -1149,21 +1149,24 @@ type InteractionCollectorReturnType<T extends MessageComponentType | MessageComp
? ConditionalInteractionCollectorType<MappedInteractionCollectorOptions[T]>
: InteractionCollector<MessageComponentInteraction>;

type InteractionReturnType<T extends MessageComponentType | MessageComponentTypes | undefined> = T extends
type InteractionExtractor<T extends MessageComponentType | MessageComponentTypes | undefined> = T extends
| MessageComponentType
| MessageComponentTypes
? MappedInteractionCollectorOptions[T] extends InteractionCollectorOptions<infer Item>
? Item
: never
: MessageComponentInteraction;

type MessageCollectorOptionsParams<T> =
| ({ componentType?: T } & InteractionCollectorOptionsResolvable)
| InteractionCollectorOptions<MessageComponentInteraction>;
type MessageCollectorOptionsParams<T extends MessageComponentType | MessageComponentTypes | undefined> =
| {
componentType?: T;
} & InteractionCollectorOptions<InteractionExtractor<T>>;

type AwaitMessageCollectorOptionsParams<T> =
| ({ componentType?: T } & Pick<InteractionCollectorOptionsResolvable, keyof AwaitMessageComponentOptions<any>>)
| AwaitMessageComponentOptions<MessageComponentInteraction>;
type AwaitMessageCollectorOptionsParams<T extends MessageComponentType | MessageComponentTypes | undefined> =
| { componentType?: T } & Pick<
InteractionCollectorOptions<InteractionExtractor<T>>,
keyof AwaitMessageComponentOptions<any>
>;

export class Message extends Base {
public constructor(client: Client, data: RawMessageData);
Expand Down Expand Up @@ -1212,9 +1215,9 @@ export class Message extends Base {
public webhookId: Snowflake | null;
public flags: Readonly<MessageFlags>;
public reference: MessageReference | null;
public awaitMessageComponent<T extends MessageComponentType | MessageComponentTypes | undefined = undefined>(
options?: AwaitMessageCollectorOptionsParams<T>,
): Promise<InteractionReturnType<T>>;
public awaitMessageComponent<
T extends MessageComponentType | MessageComponentTypes | undefined = MessageComponentTypes.ACTION_ROW,
>(options?: AwaitMessageCollectorOptionsParams<T>): Promise<InteractionExtractor<T>>;
public awaitReactions(options?: AwaitReactionsOptions): Promise<Collection<Snowflake | string, MessageReaction>>;
public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector;
public createMessageComponentCollector<
Expand Down
47 changes: 47 additions & 0 deletions typings/tests.ts
Expand Up @@ -510,6 +510,53 @@ client.on('messageCreate', message => {
// Verify that additional options don't affect default collector types.
const semiDefaultCollector = message.createMessageComponentCollector({ interactionType: 'APPLICATION_COMMAND' });
assertType<InteractionCollector<MessageComponentInteraction>>(semiDefaultCollector);

// Make sure filter parameters are properly inferred.
message.createMessageComponentCollector({
filter: i => {
assertType<MessageComponentInteraction>(i);
return true;
},
});

message.createMessageComponentCollector({
componentType: 'BUTTON',
filter: i => {
assertType<ButtonInteraction>(i);
return true;
},
});

message.createMessageComponentCollector({
componentType: 'SELECT_MENU',
filter: i => {
assertType<SelectMenuInteraction>(i);
return true;
},
});

message.awaitMessageComponent({
filter: i => {
assertType<MessageComponentInteraction>(i);
return true;
},
});

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

message.awaitMessageComponent({
componentType: 'SELECT_MENU',
filter: i => {
assertType<SelectMenuInteraction>(i);
return true;
},
});
});

client.on('interaction', async interaction => {
Expand Down

0 comments on commit 0841956

Please sign in to comment.