import { ClusterClientEvents, EvalOptions, Serialized, Awaitable, ValidIfSerializable, SerializableInput, ClusterClientData } from '../types'; import { BaseMessage, DataType } from '../other/message'; import { IPCBrokerClient } from '../handlers/broker'; import type { RefShardingCoreClient } from './coreClient'; import { RefClusterManager } from './clusterManager'; import { PromiseHandler } from '../handlers/promise'; import { WorkerClient } from '../classes/worker'; import { ChildClient } from '../classes/child'; import { Serializable } from 'child_process'; import { RefShardingClient } from './client'; import { Guild } from 'discord.js'; import EventEmitter from 'events'; export type ClientRefType = RefShardingClient | RefShardingCoreClient; /** Simplified Cluster instance available on the {@link ClusterClient}. */ export declare class ClusterClient extends EventEmitter { client: InternalClient; /** Ready state of the cluster. */ ready: boolean; /** Handler that resolves sent messages and requests. */ promise: PromiseHandler; /** Client that manages broker tunnels. */ readonly broker: IPCBrokerClient; /** Client that manages the cluster process. */ readonly process: ChildClient | WorkerClient | null; /** Handler that handles messages from the ClusterManager and the Cluster. */ private messageHandler; /** Package type. */ private packageType; /** Creates an instance of ClusterClient. */ constructor(client: InternalClient); /** Current cluster id. */ get id(): number; /** Total number of shards. */ get totalShards(): number; /** Total number of clusters. */ get totalClusters(): number; /** Utility function to get some info about the cluster. */ get info(): ClusterClientData; /** Checks if the internal client is ready enough to acknowledge heartbeat pings. */ isReadyForHeartbeatAck(): Promise; /** Sends a message to the Cluster as child. (goes to Cluster on _handleMessage). */ send(message: SerializableInput): Promise; /** Broadcasts a message to all clusters. */ broadcast(message: SerializableInput, sendSelf?: boolean): Promise; /** Sends a message to the Cluster. */ _sendInstance(message: BaseMessage): Promise; /** Evaluates a script on the master process, in the context of the {@link ClusterManager}. */ evalOnManager(script: ((manager: M, context: Serialized

) => Awaitable), options?: { context?: P; timeout?: number; }): Promise>; /** Evaluates a script on all clusters in parallel. */ broadcastEval(script: string | ((client: C, context: Serialized

) => Awaitable), options?: EvalOptions

): Promise[]>; /** Evaluates a script on specific guild. */ evalOnGuild(guildId: string, script: (client: C, context: Serialized

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

): Promise>; /** Evaluates a script on a current client, in the context of the {@link ShardingClient}. */ evalOnClient(script: string | ((client: C, context: Serialized

) => Awaitable), options?: EvalOptions

): Promise>; /** Sends a request to the Cluster (cluster has to respond with a reply (cluster.on('message', (message) => message.reply('reply')))). */ request(message: SerializableInput, options?: { timeout?: 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; /** Handles a message from the ClusterManager. */ private _handleMessage; /** Sends a message to the master process. */ _respond(message: BaseMessage): void; /** Triggers the ready event, do not use this unless you know what you are doing. */ triggerReady(): boolean; /** Spawns the next cluster, when queue mode is on 'manual'. */ spawnNextCluster(): Promise; /** Kills the cluster. */ _debug(message: string): void; } export type RefClusterClient = ClusterClient; export declare interface ClusterClient { /** Emit an event. */ emit: ((event: K, ...args: ClusterClientEvents[K]) => boolean) & ((event: Exclude, ...args: unknown[]) => boolean); /** Remove an event listener. */ off: ((event: K, listener: (...args: ClusterClientEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event. */ on: ((event: K, listener: (...args: ClusterClientEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Listen for an event once. */ once: ((event: K, listener: (...args: ClusterClientEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: unknown[]) => void) => this); /** Remove all listeners for an event. */ removeAllListeners: ((event?: K) => this) & ((event?: Exclude) => this); }