import type { Player } from "../player.js";
import type { FetchOptions, PlayerManager } from "../players.js";
import type { VoiceServerUpdate, VoiceStateUpdate } from "../playerVoice.js";
import type { Cluster } from "./client.js";
import type { ClusterNode } from "./node.js";
import { Identifiable } from "../tools.js";
export type ClusterPlayer = Player<ClusterNode>;
export declare class ClusterPlayerManager implements PlayerManager {
    readonly cluster: Cluster;
    readonly options: ClusterPlayerManagerOptions;
    private cached?;
    constructor(cluster: Cluster, options: ClusterPlayerManagerOptions);
    get cache(): Map<string, ClusterPlayer>;
    has(guild: Identifiable): boolean;
    resolve(guild: Identifiable): ClusterPlayer | undefined;
    fetch(cache?: boolean | undefined): Promise<ClusterPlayer[]>;
    fetch(guild: Identifiable, options?: FetchOptions | undefined): Promise<ClusterPlayer | undefined>;
    create(guild: Identifiable): Player;
    destroy(guild: Identifiable, force?: boolean | undefined): Promise<boolean>;
    destroy(): Promise<number>;
    handleVoiceUpdate(update: VoiceStateUpdate | VoiceServerUpdate): Promise<boolean>;
    private generateCache;
}
export interface ClusterPlayerManagerOptions {
    has?: (pm: ClusterPlayerManager, guild: Identifiable) => boolean;
    find?: (pm: ClusterPlayerManager, guild: Identifiable) => ClusterPlayer | undefined;
    fetch?: (pm: ClusterPlayerManager, guild: Identifiable, options: FetchOptions) => Promise<ClusterPlayer | undefined>;
}
//# sourceMappingURL=players.d.ts.map