import { AnyPluginData, GuildPluginData } from "../plugins/PluginData"; import { EventFilter } from "./eventFilters"; import { Awaitable } from "../utils"; import { Lock } from "../locks/LockManager"; import { EventArguments, GuildEventArguments, ValidEvent } from "./eventTypes"; import { EventRelay } from "./EventRelay"; export interface EventMeta, TArguments> { args: TArguments; pluginData: TPluginData; lock?: Lock; } export type Listener, TEventName extends ValidEvent> = (meta: EventMeta ? GuildEventArguments[TEventName] : EventArguments[TEventName]>) => Awaitable; export type WrappedListener = (args: any) => Awaitable; export interface OnOpts { allowBots?: boolean; allowSelf?: boolean; filters?: EventFilter[]; } /** * A wrapper for the d.js event emitter that passes plugin data to the listener * functions and, by default, restricts events to the plugin's guilds. */ export declare abstract class BasePluginEventManager> { protected eventRelay: EventRelay; protected listeners: Map>; protected pluginData: TPluginData | undefined; constructor(eventRelay: EventRelay); setPluginData(pluginData: TPluginData): void; abstract off(event: string, listener: WrappedListener): void; getListenerCount(): number; clearAllListeners(): void; }