/// <reference types="node" />
import { VideoInfo } from './interfaces';
import { opus } from 'prism-media';
import { GuildMember, TextChannel, Message, Guild, MessageReaction } from 'discord.js';
import ytdl = require('ytdl-core');
import { Language } from './language';
import { YoutubePlayer } from './YoutubePlayer';
export interface PlaylistItem {
    videoData?: VideoInfo;
    videoInfo: ytdl.videoInfo;
    stream: opus.Encoder | opus.WebmDemuxer;
    submitter: GuildMember;
    submitted: Date;
    message?: Message;
    index?: number;
}
export declare enum VoteInfo {
    NO_PERMISSION = 0,
    ALREADY_VOTE = 1,
    VOTE_SUCCESSFUL = 2,
    VOTE_EXECUTED = 3
}
export declare type VoteType = 'voteNext' | 'votePrevious' | 'voteReplay' | 'votePauseResume' | 'voteLoop';
export declare class GuildPlayer {
    private guild;
    private youtubePlayer;
    private playerUpdateRate;
    private suggestReplay;
    private reactionButtons;
    private leaveVoiceChannelAfter;
    private waitTimeBetweenTracks;
    language: Language;
    private votePercentage;
    private defaultChannel;
    suspended: boolean;
    loop: boolean;
    timeOutPlayerLeave?: NodeJS.Timeout;
    timeOutPlayerLeaveAllMemberLeft?: NodeJS.Timeout;
    private suggestReplayFun?;
    private songTimer?;
    readonly previous: PlaylistItem[];
    readonly playlist: PlaylistItem[];
    private recreateReactionTries;
    private voteNext;
    private votePrevious;
    private voteReplay;
    private votePauseResume;
    private voteLoop;
    private currentlyPlaying?;
    private textChannel?;
    private interval?;
    private trackStartTime?;
    private paused?;
    private goingToReplay;
    private shuffled;
    private message?;
    private counter;
    private rgb;
    constructor(guild: Guild, youtubePlayer: YoutubePlayer, playerUpdateRate: number, suggestReplay: number, reactionButtons: boolean, leaveVoiceChannelAfter: number, waitTimeBetweenTracks: number, language: Language, votePercentage: number, defaultChannel: TextChannel);
    isAlreadyOnPlaylistByUrl(url: string): string | false;
    isAlreadyOnPlaylistById(id: string): string | false;
    replaySong(): boolean;
    addVote(guildMember: GuildMember, type: VoteType): VoteInfo;
    setVote(guildMembers: GuildMember[], type: VoteType): boolean;
    removeVote(guildMember: GuildMember, type: VoteType): VoteInfo;
    getVoiceChannelUsersSize(): number;
    howManySongsDoesMemberHaveInPlaylist(guildMember: GuildMember): number;
    setStartTime(): void;
    resetTime(): void;
    setTextChannel(textChannel: TextChannel): void;
    getTextChannel(): TextChannel | undefined;
    suspend(): void;
    clearTimeout(): void;
    getSongProgressionTime(): Date | null;
    destroy(): void;
    fullDestroy(): Promise<void>;
    pause(): void;
    unpause(): void;
    shuffle(): boolean;
    sort(): boolean;
    push(item: PlaylistItem): boolean;
    switchToNextTrack(): PlaylistItem | undefined;
    switchToPreviousTrack(): PlaylistItem | undefined;
    clearVotes(): void;
    addRemoveUser(voteGroup: GuildMember[], guildMember: GuildMember): boolean;
    nextTrack(): Promise<void>;
    pauseTrack(): void;
    resumeTrack(): void;
    replayAsNextTrack(): boolean;
    replayTrack(): Promise<void>;
    setSong(playlistItem: PlaylistItem): void;
    previousTrack(): Promise<void>;
    removeFromPlayListByMessage(message: Message, deleted?: boolean): Promise<boolean>;
    canExecute(guildMembers: GuildMember[] | GuildMember): boolean;
    getGuildMembersFromReactions(messageReaction: MessageReaction): GuildMember[];
    getFromVoiceAndMessageReactions(messageReaction: MessageReaction): GuildMember[];
    removeItemFromPlaylist(playlistItem: PlaylistItem, deleted?: boolean): false | undefined;
    updatePlayer(): Promise<void>;
    resetPlayerLoop(): void;
    playerLoop(): void;
    recreateOrRecreatePlayerButtons(start?: boolean): Promise<void>;
    removeAllReactions(): Promise<void>;
    deletePlayerMessage(shouldReassign?: boolean): void;
    private reactIfExist;
    private onVoteSuccessful;
    private pauseResume;
    private getNewStream;
    set playerMessage(message: Message | undefined);
    get playerMessage(): Message | undefined;
    set playerChannel(channel: TextChannel);
    get playerChannel(): TextChannel;
    get currentPlayListItem(): PlaylistItem | undefined;
    get length(): number;
    get startTime(): Date | undefined;
    get isPaused(): boolean;
    get isLooping(): boolean;
    get isGoingToReplay(): boolean;
    get voteNextStatus(): string | null;
    get votePreviousStatus(): string | null;
    get voteReplayStatus(): string | null;
    get votePauseResumeStatus(): string | null;
    get voteLoopStatus(): string | null;
    addFunctionWhenSongEnds(time: number): void;
    clearSongTimer(): void;
    private colorFader;
}
//# sourceMappingURL=GuildPlayer.d.ts.map