UNPKG

dexare

Version:

Modular and extendable Discord bot framework

106 lines (105 loc) 3.63 kB
import Collection from '@discordjs/collection'; import { Arguments } from '../util/typedEmitter'; import DexareClient, { DexareEvents } from './index'; /** @hidden */ export type EventHandlers = { [event in keyof DexareEvents]: (event: ClientEvent, ...args: Arguments<DexareEvents[event]>) => Promise<void> | void; } & { [event: string]: (event: ClientEvent, ...args: any[]) => Promise<void> | void; }; /** @hidden */ export type EventGroup = { [event in keyof EventHandlers]?: { group: string; before: string[]; after: string[]; listener: EventHandlers[event]; }; } & { [event: string]: { group: string; before: string[]; after: string[]; listener: (event: ClientEvent, ...args: any[]) => Promise<void> | void; }; }; /** An object that temporarily stores the data of an event. */ export declare class ClientEvent { /** The groups that have been (or will be) skipped. */ readonly skipped: string[]; /** The name of this event. */ readonly name: keyof DexareEvents; /** The data for this event. Can be altered at any time */ readonly data: Map<string, any>; constructor(name: keyof DexareEvents); /** * Skip a group's listener for this event, if it has not already been fired. * @param group The group/extension/module name */ skip(group: string): void; /** * Whether a data key exists within the data. * @param key The key to check */ has(key: string): boolean; /** * Gets a key within the event's data. * @param key The key to get */ get(key: string): any; /** * Sets a key within the event's data. * @param key The key to set * @param value The data */ set(key: string, data: any): Map<string, any>; } /** The event registry that handles the event system. */ export default class EventRegistry<T extends DexareClient<any>> { /** The event groups in the registry. */ readonly eventGroups: Collection<string, EventGroup>; /** the client responsible for this registry. */ readonly client: T; private readonly loadOrders; private readonly hookedEvents; private readonly logger; constructor(client: T); /** * Registers an event. * @param groupName The group to register with * @param event The event to register * @param listener The event listener * @param options The options for the event */ register<E extends keyof DexareEvents>(groupName: string, event: E, listener: EventHandlers[E], options?: { before?: string[]; after?: string[]; }): void; /** * Unregisters an event from a group. * @param groupName The group to unregister from * @param event The event to unregister */ unregister(groupName: string, event: keyof DexareEvents): void; /** * Unregisters a group, removing all of their listeners. * @param groupName The group to unregister */ unregisterGroup(groupName: string): boolean; /** * Emits an event. * @param event The event to emit * @param args The arcuments to emit with */ emit<E extends keyof DexareEvents>(event: E, ...args: Arguments<DexareEvents[E]>): void; /** * Emits an event asynchronously. * @param event The event to emit * @param args The arcuments to emit with */ emitAsync<E extends keyof DexareEvents>(event: E, ...args: Arguments<DexareEvents[E]>): Promise<void>; private hookEvent; private refreshLoadOrder; private refreshAllLoadOrders; private createLoadOrder; }