import { ClientEvents, ClientOptions, Client as DiscordClient } from 'discord.js'; import { RefClusterManager } from './clusterManager'; import { ClusterClient } from './clusterClient'; /** Modified ClientEvents such that the ready event has the ShardingClient instead of the normal Client. */ export type ClientEventsModifiable = Omit & { ready: [client: ShardingClient]; clientReady: [client: ShardingClient]; }; export type ShardingClientOptions = ClientOptions; /** Modified DiscordClient with bunch of new methods. */ export declare class ShardingClient extends DiscordClient { /** Cluster associated with this client. */ cluster: ClusterClient; /** Creates an instance of ShardingClient. */ constructor(options: ShardingClientOptions); private shardsReady; } export type RefShardingClient = ShardingClient; export declare interface ShardingClient { /** Emit an event. */ emit: ((event: K, ...args: ClientEventsModifiable[K]) => boolean) & ((event: Exclude, ...args: unknown[]) => boolean); /** Remove an event listener. */ off: ((event: K, listener: (...args: ClientEventsModifiable[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event. */ on: ((event: K, listener: (...args: ClientEventsModifiable[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event once. */ once: ((event: K, listener: (...args: ClientEventsModifiable[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Remove all listeners for an event. */ removeAllListeners: ((event?: K) => this) & ((event?: Exclude) => this); }