import { EventEmitter } from "node:events"; import { RESTClient } from "./rest.js"; import type { Events, PlayPayload, SeekPayload, StatsPayload, VoiceUpdatePayload } from "./types.js"; export interface NodeOptions { name: string; url: string; password?: string; autoReconnect?: boolean; reconnectDelay?: number; maxReconnectAttempts?: number; } export declare enum NodeState { Disconnected = 0, Connecting = 1, Connected = 2, Draining = 3 } export interface Node { on: (event: K, listener: (data: Events[K]) => void) => this; once: (event: K, listener: (data: Events[K]) => void) => this; off: (event: K, listener: (data: Events[K]) => void) => this; emit: (event: K, data: Events[K]) => boolean; } export declare class Node extends EventEmitter { #private; readonly name: string; readonly url: string; readonly rest: RESTClient; constructor(options: NodeOptions); connect(): Promise; disconnect(): void; get state(): NodeState; get sessionId(): string | null; get stats(): StatsPayload; get draining(): boolean; get connected(): boolean; incrementPlayerCount(): void; decrementPlayerCount(): void; sendVoiceUpdate(data: VoiceUpdatePayload): void; sendPlayerMigrate(guildId: string): void; sendPlay(guildId: string, data: PlayPayload): Promise; sendPause(guildId: string): Promise; sendResume(guildId: string): Promise; sendStop(guildId: string): Promise; sendSeek(guildId: string, data: SeekPayload): Promise; sendDisconnect(guildId: string): Promise; }