import * as Protocol from "lavalink-protocol";
import * as API from "lavalink-api-client";
import * as WS from "lavalink-ws-client";
import { Client, ClientEvents } from "./client.js";
import { Player } from "./player.js";
import { TypedEmitter } from "tiny-typed-emitter";
import { PlayerManager } from "./players.js";
export declare class Node extends TypedEmitter<NodeEvents> implements Client {
    readonly options: NodeOptions;
    readonly players: PlayerManager<this>;
    readonly rest: API.LavalinkHttpClient;
    readonly ws: WS.LavalinkWSClient;
    readonly api: API.LavalinkAPI;
    userId: string | undefined;
    constructor(options: NodeOptions);
    get uptime(): number;
    connect(options?: WS.LavalinkWSClientConnectOptions): void;
    disconnect(): void;
    createPlayer(guildId: string): Player<this>;
    emit<E extends keyof NodeEvents>(event: E, ...args: Parameters<NodeEvents[E]>): boolean;
    protected handlePlayerMessage(message: Exclude<Protocol.Message, {
        op: "ready" | "stats";
    }>): void;
}
type BaseNodeEvents = ClientEvents & Omit<WS.LavalinkWSClientEvents, "debug"> & {
    request: (event: API.LavalinkHttpClientRequestEvent) => void;
};
export interface NodeEvents extends BaseNodeEvents {
}
type InfoKeys = "host" | "port" | "tls" | "auth";
export interface NodeDiscordOptions {
    userId?: string;
    sendGatewayCommand: (guildId: string, data: unknown) => void;
}
export type NodeOptions = {
    info: Pick<API.LavalinkHttpClientOptions, InfoKeys>;
    discord: NodeDiscordOptions;
    rest?: Omit<API.LavalinkHttpClientOptions, InfoKeys>;
    ws?: Omit<WS.LavalinkWSClientOptions, "userId">;
};
export {};
//# sourceMappingURL=node.d.ts.map