import type { Client, WorkerClient } from '../client'; import type { BaseClient } from '../client/base'; import { type PluginOrderedContribution } from '../client/plugins/order'; import type { UsingClient } from '../commands'; import type { FileLoaded } from '../commands/handler'; import { type Awaitable, BaseHandler, type CamelCase, type MakeRequired, type SnakeCase } from '../common'; import type { ClientEvents } from '../events/hooks'; import { type GatewayDispatchPayload } from '../types'; import type { ClientEvent, ClientNameEvents, CustomEvents, CustomEventsKeys, EventContext } from './event'; export type EventValue = MakeRequired & { fired?: boolean; }; export type GatewayEvents = Uppercase>; export type ResolveEventParams = T extends CustomEventsKeys ? [...Parameters, UsingClient] : T extends GatewayEvents ? EventContext<{ data: { name: CamelCase; }; }> : T extends ClientNameEvents ? EventContext<{ data: { name: T; }; }> : never; export type ResolveEventRunParams = T extends CustomEventsKeys ? Parameters : T extends GatewayEvents ? EventContext<{ data: { name: CamelCase; }; }> : T extends ClientNameEvents ? EventContext<{ data: { name: T; }; }> : never; export type EventValues = { [K in CustomEventsKeys | GatewayEvents]: Omit & { run(...args: ResolveEventRunParams): Awaitable; }; }; export interface CustomEventRunner { emit(name: T, ...args: ResolveEventRunParams): Awaitable; runCustom(name: T, ...args: ResolveEventRunParams): Awaitable; } type PluginEventListener = PluginOrderedContribution & { record: { plugin: { name: string; instanceId?: string; }; index: number; }; name: string; handler: (...args: unknown[]) => unknown; active: boolean; once?: boolean; fired?: boolean; }; type PluginAnyEventListener = PluginOrderedContribution & { record: { plugin: { name: string; instanceId?: string; }; index: number; }; handler: (name: string, ...args: unknown[]) => unknown; active: boolean; }; type ClientWithPluginRegistry = BaseClient; export declare class CustomEventHandler extends BaseHandler implements CustomEventRunner { protected client: ClientWithPluginRegistry; constructor(client: ClientWithPluginRegistry); onFail: (event: GatewayEvents | CustomEventsKeys | string, err: unknown) => void; values: Partial; emit(name: T, ...args: ResolveEventRunParams): Promise; runCustom(name: T, ...args: ResolveEventRunParams): Promise; protected getPluginListeners(name: string): import("../client/plugins/registry").PluginEventContribution[]; protected getPluginAnyListeners(): import("../client/plugins/registry").PluginAnyEventContribution[]; protected getPluginErrorListeners(): import("../client/plugins/registry").PluginEventErrorContribution[]; protected runCollectors(name: string, args: unknown): unknown; protected createPluginListenerTask(name: string, listeners: readonly PluginEventListener[], anyListeners: readonly PluginAnyEventListener[], args: readonly unknown[]): Promise | undefined; protected settleEventTasks(name: GatewayEvents | CustomEventsKeys | string, tasks: readonly Promise[]): Promise; protected reportEventFailure(name: GatewayEvents | CustomEventsKeys | string, error: unknown): Promise; } export declare class EventHandler extends CustomEventHandler { protected client: Client | WorkerClient; constructor(client: Client | WorkerClient); filter: (path: string) => boolean; discordEvents: ClientNameEvents[]; set(events: ClientEvent[]): void; load(eventsDir: string): Promise; execute(raw: GatewayDispatchPayload, client: Client | WorkerClient, shardId: number): Promise; runEvent(name: GatewayEvents, client: Client | WorkerClient, packet: unknown, shardId: number, runCache?: boolean): Promise; reload(name: GatewayEvents | CustomEventsKeys): Promise; reloadAll(stopIfFail?: boolean): Promise; onFile(file: FileLoaded): ClientEvent[] | undefined; callback: (file: ClientEvent) => ClientEvent | false; } export {};