import ExpandedEventEmitter from './ExpandedEventEmitter';
import TwitchIRC from './chat';
interface RoomTracker {
    addListener(event: string, listener: (...args: any[]) => void): this;
    /** When a channel is joined */
    addListener(event: 'join', listener: (channel: string) => void): this;
    /** When a channel is left */
    addListener(event: 'part', listener: (channel: string) => void): this;
    /** When a channel room state has changed */
    addListener(event: 'state', listener: (channel: string, state: RoomState) => void): this;
    /** When any changes has been made to any room (join, left, room state) */
    addListener(event: 'change', listener: (channel: string) => void): this;
    on(event: string, listener: (...args: any[]) => void): this;
    /** When a channel is joined */
    on(event: 'join', listener: (channel: string) => void): this;
    /** When a channel is left */
    on(event: 'part', listener: (channel: string) => void): this;
    /** When a channel room state has changed */
    on(event: 'state', listener: (channel: string, state: RoomState) => void): this;
    /** When any changes has been made to any room (join, left, room state) */
    on(event: 'change', listener: (channel: string) => void): this;
    once(event: string, listener: (...args: any[]) => void): this;
    /** When a channel is joined */
    once(event: 'join', listener: (channel: string) => void): this;
    /** When a channel is left */
    once(event: 'part', listener: (channel: string) => void): this;
    /** When a channel room state has changed */
    once(event: 'state', listener: (channel: string, state: RoomState) => void): this;
    /** When any changes has been made to any room (join, left, room state) */
    once(event: 'change', listener: (channel: string) => void): this;
    emit(event: string, ...args: any[]): boolean;
    emit(event: 'join', channel: string): boolean;
    emit(event: 'part', channel: string): boolean;
    emit(event: 'state', channel: string, state: RoomState): boolean;
    emit(event: 'change', channel: string): boolean;
}
interface RoomState {
    "room-id"?: string;
    "emote-only"?: boolean;
    r9k?: boolean;
    slow?: number;
}
interface Room {
    channel: string;
    state: RoomState | null;
}
declare class RoomTracker extends ExpandedEventEmitter {
    twitchIRC: TwitchIRC;
    rooms: Room[];
    eventID: string;
    /**
     * @param twitchIRC The Twitch IRC client
     */
    constructor(twitchIRC: TwitchIRC);
    /**
     * Removes all event listeners added from this tracker
     */
    dispose(): void;
    /**
     * @param channel The Twitch channel name
     * @returns If in channel chat room or not
     */
    isInChannel(channel: string): boolean;
    /**
     * Get the room state tags
     * @param channel The Twitch channel name
     * @returns The room state tags, or null if not in channel or not gotten the state yet
     */
    getChannelState(channel: string): RoomState | null;
    /**
     * @returns An array of room objects with channel and state variables
     */
    getChannels(): Room[];
    /**
     * @param channel The Twitch channel name
     * @returns The internal room object, null if not found
     */
    _getRoomObj(channel: string): Room;
    /**
     * @param channel The Twitch channel name
     * @returns The internal room index, -1 if not found
     */
    _getRoomObjIndex(channel: string): number;
}
export = RoomTracker;
