import type { GatewayDispatchPayload, GatewayVoiceStateUpdate } from "discord-api-types/v10"; import { EventEmitter } from "node:events"; import { Node, type NodeOptions } from "./node.js"; import { Player, type PlayerOptions } from "./player.js"; import type { ManagerEvents } from "./types.js"; export type SendToShardFn = (guildId: string, payload: GatewayVoiceStateUpdate) => void; export interface LinkDaveClientOptions { token: string; nodes?: NodeOptions[]; sendToShard: SendToShardFn; } export interface LinkDaveClient { on: (event: K, listener: (data: ManagerEvents[K]) => void) => this; once: (event: K, listener: (data: ManagerEvents[K]) => void) => this; off: (event: K, listener: (data: ManagerEvents[K]) => void) => this; emit: (event: K, data: ManagerEvents[K]) => boolean; } export declare class LinkDaveClient extends EventEmitter { #private; constructor(options: LinkDaveClientOptions); addNode(options: NodeOptions): Node; removeNode(name: string): boolean; get nodes(): ReadonlyMap; connectAll(): Promise; disconnectAll(): void; getBestNode(): Node | undefined; private getPreferredNode; getPlayer(guildId: string, options?: Omit & { nodeId?: string; }): Player; removePlayer(guildId: string): boolean; get players(): ReadonlyMap; get clientId(): string; handleRaw({ t: event, d: data }: GatewayDispatchPayload): void; _sendToShard(guildId: string, payload: GatewayVoiceStateUpdate): void; _onPlayerDestroy(guildId: string): void; _updatePlayerNode(guildId: string, oldNode: Node, newNode: Node): void; }