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 };
|