all repos — stealth-developers @ 103b51d2a555d6d158d8806791b6ec07ac30c3d1

src/handlers/events.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
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
import _logger from "@/utils/logging.ts";
import { type Client, Collection } from "discord.js";
import type { IEvent } from "../types.ts";
import { crawlDirectory, getHandlerPath } from "./common.ts";

const logger = _logger.child({ name: "events" });

async function getEvents(): Promise<Collection<string, IEvent>> {
	const eventFiles = new Collection<string, IEvent>();

	const processFile = async (fileUrl: string) => {
		const { default: event } = await import(fileUrl);
		eventFiles.set(event.event, event);
		return event;
	};

	await crawlDirectory<IEvent>(getHandlerPath("events"), processFile);
	return eventFiles;
}

async function registerEvents(client: Client) {
	const events = await getEvents();
	if (events.size === 0) return logger.warn("no events found");
	logger.info(`found ${events.size} events.`);

	for (const event of events.values()) {
		logger.info(`registering event: ${event.event}`);
		client[event.once ? "once" : "on"](
			event.event,
			event.execute.bind(null, client),
		);
	}

	logger.info(`registered ${events.size} events`);
}

export default registerEvents;
export { logger };