import { EventEmitter } from 'events';
import { CreatePlayerOptions, DamonJsEvents, DamonJsOptions as DamonJsOptionsOwO, DamonJsSearchOptions, DamonJsSearchResult, SearchResultTypes } from './Modules/Interfaces';
import { Node, Shoukaku } from 'shoukaku';
import { DamonJsPlayer } from './Managers/DamonJsPlayer';
import { DamonJsTrack } from './Managers/Supports/DamonJsTrack';
import { Snowflake } from 'discord.js';
export declare class DamonJs extends EventEmitter {
    DamonJsOptions: DamonJsOptionsOwO;
    /** Shoukaku instance */
    shoukaku: Shoukaku;
    /** DamonJs players */
    readonly players: Map<string, DamonJsPlayer>;
    skipSpam: {
        rule: {
            maxhits: number;
            timeFrame: number;
            cooldown: number;
        };
        destroy: {
            timeFrame: number;
            maxhits: number;
        };
    };
    trackEnd: {
        skip: boolean;
    };
    trackException: {
        skip: boolean;
    };
    trackStuck: {
        skip: boolean;
    };
    trackResolveError: {
        skip: boolean;
    };
    /**
     * Initialize a DamonJs instance.
     * @param DamonJsOptions DamonJsOptions
     * @param connector Connector
     * @param nodes NodeOption[]
     * @param options ShoukakuOptions
     */
    constructor(DamonJsOptions: DamonJsOptionsOwO, shoukaku: Shoukaku);
    on<K extends keyof DamonJsEvents>(event: K, listener: (...args: DamonJsEvents[K]) => void): this;
    once<K extends keyof DamonJsEvents>(event: K, listener: (...args: DamonJsEvents[K]) => void): this;
    off<K extends keyof DamonJsEvents>(event: K, listener: (...args: DamonJsEvents[K]) => void): this;
    emit<K extends keyof DamonJsEvents>(event: K, ...data: DamonJsEvents[K]): boolean;
    /**
     * Create a player.
     * @param options CreatePlayerOptions
     * @returns Promise<DamonJsPlayer>
     */
    createPlayer<T extends DamonJsPlayer>(options: CreatePlayerOptions): Promise<T | DamonJsPlayer>;
    /**
     * Get a player by guildId.
     * @param guildId Guild ID
     * @returns DamonJsPlayer | undefined
     */
    getPlayer<T extends DamonJsPlayer>(guildId: Snowflake): (T | DamonJsPlayer) | undefined;
    /**
     * Destroy a player.
     * @param guildId Guild ID
     * @returns void
     */
    destroyPlayer<T extends DamonJsPlayer>(guildId: Snowflake): void;
    /**
     * Search a track by query or uri.
     * @param player DamonJs Player
     * @param query Query
     * @param options DamonJsOptions
     * @returns Promise<DamonJsSearchResult>
     */
    search(query: string, options: DamonJsSearchOptions, player?: DamonJsPlayer): Promise<DamonJsSearchResult>;
    /**
     * Retrieves the least used node from the list of nodes.
     * inspired from kazagumo
     * @return {Promise<Node>} The least used node
     */
    getLeastUsedNode(): Promise<Node>;
    buildSearch(playlistInfo?: {
        encoded: string;
        info: {
            name: string;
            selectedTrack: number;
        };
        pluginInfo: unknown;
    }, tracks?: DamonJsTrack[], type?: SearchResultTypes): DamonJsSearchResult;
    private joinVoiceChannel;
}
