import Base from '../Base';
import type { Stanzas, Constants } from '@fnlb-project/stanza';
import type Client from '../Client';
/**
 * Represents the client's XMPP manager
 * @private
 */
declare class XMPP extends Base {
    /**
     * XMPP agent
     */
    private connection?;
    /**
     * The amount of times the XMPP agent has tried to reconnect
     */
    private connectionRetryCount;
    /**
     * The time the XMPP agent connected at
     */
    private connectedAt?;
    /**
     * @param client The main client
     */
    constructor(client: Client);
    /**
     * Whether the XMPP agent is connected
     */
    get isConnected(): boolean;
    /**
     * Returns the xmpp JID
     */
    get JID(): string | undefined;
    /**
     * Returns the xmpp resource
     */
    get resource(): string | undefined;
    /**
     * Connects the XMPP agent to Epicgames' XMPP servers
     * @param sendStatusWhenConnected Whether to send an empty status status when connected
     */
    connect(sendStatusWhenConnected?: boolean): Promise<void>;
    /**
     * Disconnects the XMPP client.
     * Also performs a cleanup
     */
    disconnect(): void;
    /**
     * Registers all events
     */
    private setupEvents;
    /**
     * Waits for a friend to be added to the clients cache
     */
    private waitForFriend;
    /**
     * Sends a presence to all or a specific friend
     * @param status The status message. Can be undefined if you want to reset it
     * @param show The show type of the presence (eg "away")
     * @param to The JID of a specific friend
     */
    sendStatus(status?: object | string, show?: Constants.PresenceShow, to?: string): void;
    /**
     * Sends an XMPP message
     * @param to The message receiver's JID
     * @param content The message that will be sent
     * @param type The message type (eg "chat" or "groupchat")
     * @deprecated this is useless now, since chat messages are handeled via an rest api now see {@link Client#chat}
     */
    sendMessage(to: string, content: string, type?: Constants.MessageType): Promise<Stanzas.Message | undefined>;
    /**
     * Wait until a message is sent
     * @param id The message id
     * @param timeout How long to wait for the message
     * @deprecated this is useless now, since chat messages are handeled via an rest api now see {@link Client#chat}
     */
    waitForSentMessage(id: string, timeout?: number): Promise<Stanzas.Message | undefined>;
    /**
     * Joins a multi user chat room (MUC)
     * @param jid The room's JID
     * @param nick The client's nickname
     * @deprecated this is useless now, since chat messages are handeled via an rest api now see {@link Client#chat}
     */
    joinMUC(jid: string, nick: string): Promise<Stanzas.ReceivedMUCPresence>;
    /**
     * Leaves a multi user chat room (MUC)
     * @param jid The room's JID
     * @param nick The client's nickname
     * @deprecated this is useless now, since chat messages are handeled via an rest api now see {@link Client#chat}
     */
    leaveMUC(jid: string, nick: string): Promise<Stanzas.ReceivedPresence>;
    /**
     * Bans a member from a multi user chat room
     * @param member The member that should be banned
     * @deprecated this is useless now, since chat messages are handeled via an rest api now see {@link Client#chat}
     */
    ban(jid: string, member: string): Promise<Stanzas.IQ & {
        muc: Stanzas.MUCUserList;
    }>;
}
export default XMPP;
