UNPKG

simplify-cord

Version:

SimplifyCord is an unofficial extension of the 'discord.js' library. Our extension aims to simplify the development of Discord bots, promoting cleaner code and easier maintenance.

38 lines (35 loc) 1.56 kB
import chalk from "chalk"; import { Client, ClientEvents, Collection } from "discord.js"; interface EventData<EventName extends keyof ClientEvents> { name: string; event: EventName; once?: boolean; run(...args: ClientEvents[EventName]): void } type EventCollection = Collection<string, EventData<keyof ClientEvents>>; export class Event<EventName extends keyof ClientEvents> { private static items = new Collection<keyof ClientEvents, EventCollection>(); constructor(data: EventData<EventName>){ const events = Event.items.get(data.event) ?? new Collection(); events.set(data.name, data); Event.items.set(data.event, events); } public static register(client: Client){ const eventHandlers = Event.items.map((collection, event) => ({ event, handlers: collection.map(e => ({ run: e.run, once: e.once })) })); for(const { event, handlers } of eventHandlers){ client.on(event, (...args) => { for(const { run } of handlers.filter(e => !e.once)) run(...args); }); client.once(event, (...args) => { for(const { run } of handlers.filter(e => e.once)) run(...args); }); } } public static loadLogs(){ for(const events of Event.items.values()){ for(const { name } of events.values()){ console.log(chalk.green(`${chalk.green.bold("✔")} ${chalk.yellow.underline(name)} event loaded!`)); } } } }