import { ButtonInteraction, Client, Interaction, InteractionCollector, Message, MessageComponentInteraction, ModalSubmitInteraction } from "discord.js"; import client from "./client.js"; export default async function ( m: Message, interactionFilter: (i: MessageComponentInteraction) => boolean | Promise, messageFilter: (m: Message) => boolean | Promise ) { let out; try { out = await new Promise((resolve, _reject) => { const mes = m .createMessageComponentCollector({ filter: (m) => interactionFilter(m), time: 300000 }) .on("collect", (m) => { resolve(m); }); const int = m.channel .createMessageCollector({ filter: (m) => messageFilter(m), time: 300000 }) .on("collect", (m) => { try { m.delete(); } catch (e) { client.emit("error", e as Error); } resolve(m); }); mes.on("end", () => { int.stop(); }); int.on("end", () => { mes.stop(); }); }); } catch (e) { console.log(e); return null; } return out; } export async function modalInteractionCollector( m: Message, modalFilter: (i: Interaction) => boolean | Promise, interactionFilter: (i: MessageComponentInteraction) => boolean | Promise ): Promise { let out: ButtonInteraction | ModalSubmitInteraction; try { out = await new Promise((resolve, _reject) => { const int = m .createMessageComponentCollector({ filter: (i: MessageComponentInteraction) => interactionFilter(i), time: 300000 }) .on("collect", (i: ButtonInteraction) => { mod.stop(); resolve(i); }); const mod = new InteractionCollector(client as Client, { filter: (i: Interaction) => modalFilter(i), time: 300000 }).on("collect", async (i: ModalSubmitInteraction) => { int.stop(); await i.deferUpdate(); resolve(i); }); }); } catch (e) { console.log(e); return null; } return out; }