From 30a066e68de4e890d0a3c0b4f6eccf423f33a3db Mon Sep 17 00:00:00 2001 From: Socram03 Date: Fri, 13 Jun 2025 20:34:43 -0400 Subject: [PATCH] feat: awaitable collector --- src/components/handler.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/components/handler.ts b/src/components/handler.ts index 06ec8e6..de370b7 100644 --- a/src/components/handler.ts +++ b/src/components/handler.ts @@ -38,6 +38,7 @@ export interface CreateComponentCollectorResult { callback: ComponentCallback, ): void; stop(reason?: string): void; + asyncRun(customId: UserMatches): Promise; resetTimeouts(): void; } @@ -116,6 +117,24 @@ export class ComponentHandler extends BaseHandler { this.createComponentCollector(messageId, channelId, guildId, options, old.components); }); }, + asyncRun: customId => + new Promise(resolve => { + const collector = this.values.get(messageId); + if (!collector) return resolve(null); + + this.values.get(messageId)!.__run(customId, interaction => { + this.clearValue(messageId); + //@ts-expect-error generic + resolve(interaction); + }); + + if (collector?.timeout) clearTimeout(collector.timeout); + collector.timeout = setTimeout(() => { + this.clearValue(messageId); + resolve(null); + // by default 15 seconds in case user don't do anything + }, collector?.options?.timeout ?? 15_000); + }), resetTimeouts: () => { this.resetTimeouts(messageId); },