///
import { EventEmitter } from "events";
import { DeleteMessageStatus, type IRoomSave } from "./Browser.js";
import type Client from "./Client";
import Message from "./Message";
import User from "./User";
import { ChatEventType } from "./WebsocketEvent";
/**
* Represents a chatroom
*
* @extends {EventEmitter}
*/
declare class Room extends EventEmitter {
#private;
id: number;
leaving: boolean;
/**
* Creates an instance of Room.
*
* @param {Client} client The Client instance
* @param {number} id The id of the room
* @memberof Room
*/
constructor(client: Client, id: number);
/**
* @summary returns the room's transcript URL
*/
get transcriptURL(): string;
/**
* @summary attempts to update the room
* @param config {@link Room} configuration options
*/
update(config: Omit): Promise;
/**
* Blocks a user for a given amount of time (or forever)
*
* @param user user to block
* @param howLong how long to block the user (in seconds)
* @returns {void}
* @memberof Room
*/
block(user: number | User, howLong?: number): void;
/**
* Unblocks users
*
* @param users users to unblock
* @returns {void}
* @memberof Room
*/
unblock(...users: (number | User)[]): void;
/**
* Checks if a user is blocked
*
* @param user user to check
* @returns {boolean}
* @memberof Room
*/
isBlocked(user: number | User): boolean;
/**
* Adds a chat event type to the list of ignored types
*
* @param {...ChatEventType} eventType event type
* @returns {void}
* @memberof Room
*/
ignore(...eventType: ChatEventType[]): void;
/**
* Removes an event type from the list of ignored types
*
* @param {...ChatEventType} eventType event type
* @returns {void}
* @memberof Room
*/
unignore(...eventType: ChatEventType[]): void;
/**
* Checks if an event type is ignored
*
* @param {ChatEventType} eventType event type
* @returns {boolean}
* @memberof Room
*/
isIgnored(eventType: ChatEventType): boolean;
/**
* @summary exclusively subscribes to a list of events
* @param eventType event type
*/
only(...eventType: ChatEventType[]): void;
/**
* @summary Join a chat room
* @returns {Promise} A promise when the user succesfully joins this room
* @memberof Room#
*/
join(): Promise;
/**
* @summary Leave a chat room
* @returns {Promise} A promise when the user succesfully leaves this room
* @memberof Room#
*/
leave(): Promise;
/**
* Connects to the chatroom websocket, and watches
* for new events
*
* @returns {Promise} A promise that completes when the webscocket connection is successfull.
* @memberof Room
*/
watch(): Promise;
/**
* @summary deletes a given message
* @param message {@link Message} or ID to delete
*/
delete(message: number | Message): Promise;
/**
* @summary returns a list of users currently in the room
*/
listUsers(): Promise;
/**
* @summary Sends a message to this room
* @param message The message to send
* @throws {InvalidArgumentError} If `content` > 500 character, empty, or isn't a string.
* @returns {Promise} A promise with the message that was sent
* @memberof Room#
*/
sendMessage(message: string): Promise;
}
export default Room;