import { Pubby } from "../../client";
import { PubbyStream } from "../../lib/streams";
import { User } from "../../models/user";
import { PubbyModule } from "../../module";
import { QueueAddResponse, QueueUpdateResponse } from "../../websocket/incoming";
declare module "../../client" {
    interface Pubby {
        queue: QueueModule;
    }
}
export declare class QueueModule extends PubbyModule {
    state: Set<string>;
    update$: PubbyStream<QueueUpdateResponse>;
    add$: PubbyStream<QueueAddResponse>;
    get usersId(): string[];
    get users(): any[];
    get next(): any;
    constructor(client: Pubby);
    init(): void;
    join(userId?: string): Promise<unknown>;
    leave(userId?: string): Promise<unknown>;
    move(userId: string, position: number): void;
    has(userId: string): boolean;
    on(event: "update", ...listeners: ((queue: User[]) => void)[]): this;
    on(event: "user-join", ...listeners: ((user: User) => void)[]): this;
    on(event: "user-leave", ...listeners: ((user: User) => void)[]): this;
}
