import { Awaitable, ClusterManagerCreateOptions, ClusterManagerEvents, ClusterManagerOptions, ClusteringMode, EvalOptions, Serialized, ValidIfSerializable, Serializable, SerializableInput } from '../types'; import { ReClusterManager } from '../plugins/reCluster'; import { HeartbeatManager } from '../plugins/heartbeat'; import { IPCBrokerManager } from '../handlers/broker'; import { PromiseHandler } from '../handlers/promise'; import { Cluster, RefCluster } from './cluster'; import { ClientRefType } from './clusterClient'; import { Queue } from '../handlers/queue'; import CustomMap from '../other/map'; import { Guild } from 'discord.js'; import EventEmitter from 'events'; /** Manager for the Clusters. */ export declare class ClusterManager extends EventEmitter { file: string; /** Check if all clusters are ready. */ ready: boolean; /** IPC Broker for the ClusterManager. */ readonly broker: IPCBrokerManager; /** Options for the ClusterManager */ readonly options: ClusterManagerOptions; /** Promise Handler for the ClusterManager */ readonly promise: PromiseHandler; /** A collection of all clusters the manager spawned. */ readonly clusters: CustomMap; /** ReCluster Manager for the ClusterManager */ readonly reCluster: ReClusterManager; /** Heartbeat Manager for the ClusterManager */ readonly heartbeat: HeartbeatManager | null; /** Queue for the ClusterManager */ readonly clusterQueue: Queue; /** Creates an instance of ClusterManager. */ constructor(file: string, options: ClusterManagerCreateOptions); /** Spawns multiple internal clusters. */ spawn(): Promise; /** Sends a message to all clusters. */ broadcast(message: SerializableInput, ignoreClusters?: number[]): Promise; /** Kills all running clusters and respawns them. */ respawnAll(clusterDelay?: number, respawnDelay?: number, timeout?: number, except?: number[]): Promise>; /** Kills specific clusters and respawns them. */ respawnClusters(clusters: number[], clusterDelay?: number, respawnDelay?: number, timeout?: number): Promise>; /** Evaluates a script on the Manager. */ eval(script: string | ((manager: M, context: Serialized

) => Awaitable), options?: { context?: P; timeout?: number; }): Promise<{ result: Serialized | undefined; error: Error | undefined; }>; /** Evaluates a script on all clusters, or a given cluster, in the context of the Client. */ broadcastEval(script: string | ((client: C, context: Serialized

) => Awaitable), options?: EvalOptions

): Promise[]>; /** Evaluates a script on a given Cluster's Client. */ evalOnClusterClient(cluster: number, script: ((client: C, context: Serialized

) => Awaitable), options?: Exclude, 'cluster'>): Promise>; /** Evaluates a script on a given Cluster. */ evalOnCluster(cluster: number, script: string | ((cluster: C, context: Serialized

) => Awaitable), options?: Exclude, 'cluster'>): Promise>; /** Evaluates a script on specific guild. */ evalOnGuild(guildId: string, script: string | ((client: C, context: Serialized

, guild: Guild | undefined) => Awaitable), options?: EvalOptions

): Promise>; /** Creates a new cluster. (Using this method is usually not necessary if you use the spawn method.) */ createCluster(id: number, shardsToSpawn: number[], recluster?: boolean): Cluster; /** Logs out the Debug Messages. */ _debug(message: string): void; } export type RefClusterManager = ClusterManager; export declare interface ClusterManager { /** Emit an event. */ emit: ((event: K, ...args: ClusterManagerEvents[K]) => boolean) & ((event: Exclude, ...args: unknown[]) => boolean); /** Remove an event listener. */ off: ((event: K, listener: (...args: ClusterManagerEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event. */ on: ((event: K, listener: (...args: ClusterManagerEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event once. */ once: ((event: K, listener: (...args: ClusterManagerEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Remove all listeners for an event. */ removeAllListeners: ((event?: K) => this) & ((event?: Exclude) => this); }