all repos — stealth-developers @ 158b915b8f28f27e37e948b8f6ae783b0cadbccf

apps/bot/src/lib/structures/ModalRegistry.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
import type { ModalSubmitInteraction } from "discord.js";
import type { ModalDefinition } from "./ModalDefinition";

export interface RegisteredModal<Args extends string[]> {
	definition: ModalDefinition<any, Args>;
	run(interaction: ModalSubmitInteraction, args: Args): unknown | Promise<unknown>;
}

class ModalRegistry {
	private modals = new Map<string, RegisteredModal<any>>();

	public register<Args extends string[]>(
		definition: ModalDefinition<any, Args>,
		run: (interaction: ModalSubmitInteraction, args: Args) => unknown | Promise<unknown>,
	) {
		this.modals.set(definition.id, { definition, run });
	}

	public get(id: string) {
		return this.modals.get(id);
	}
}

export const modalRegistry = new ModalRegistry();