/// <reference types="node" />
import type { Token } from '../bot/token';
import { EventEmitter } from 'node:events';
import { ClientConfig } from '../bot/client';
/** 事件类型 */
declare enum Intent {
    GUILDS = 1,
    GUILD_MEMBERS = 2,
    GUILD_MESSAGES = 512,
    GUILD_MESSAGE_REACTIONS = 1024,
    DIRECT_MESSAGE = 4096,
    GROUP_AND_C2C_EVENT = 33554432,
    INTERACTION = 67108864,
    MESSAGE_AUDIT = 134217728,
    FORUMS_EVENT = 268435456,
    AUDIO_ACTION = 536870912,
    PUBLIC_GUILD_MESSAGES = 1073741824
}
export interface ReadyData {
    version: number;
    session_id: string;
    user: {
        id: string;
        username: string;
        bot: boolean;
        status: number;
    };
    shard: number[];
}
export type ResumedData = '';
export type IntentEvent = keyof typeof Intent;
export interface DispatchData {
    t: string;
    d: any;
}
interface SessionEvent {
    dispatch: (data: DispatchData) => void;
}
export interface Session extends EventEmitter {
    addListener<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    on<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    once<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    removeListener<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    off<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    removeAllListeners<T extends keyof SessionEvent>(event?: T): this;
    listeners<T extends keyof SessionEvent>(event: T): Function[];
    rawListeners<T extends keyof SessionEvent>(event: T): Function[];
    emit<T extends keyof SessionEvent>(event: T, ...args: Parameters<SessionEvent[T]>): boolean;
    listenerCount<T extends keyof SessionEvent>(event: T, listener?: SessionEvent[T]): number;
    prependListener<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    prependOnceListener<T extends keyof SessionEvent>(event: T, listener: SessionEvent[T]): this;
    eventNames<T extends keyof SessionEvent>(): T[];
}
export declare class Session extends EventEmitter {
    private config;
    private token;
    private ackTimeout;
    /** 心跳间隔 */
    private heartbeat_interval;
    /** 是否重连 */
    private is_reconnect;
    /** 记录器 */
    private logger;
    /** 重连计数 */
    private retry;
    /** 最大重连数 */
    private max_retry;
    /** 消息序列号 */
    private seq;
    /** 会话 id */
    private session_id;
    private ws;
    constructor(config: ClientConfig, token: Token);
    private onOpen;
    private onClose;
    private onError;
    private onMessage;
    private onDispatch;
    private heartbeat;
    private sendPayload;
    private getIntents;
    private sendAuthPayload;
    private sendResumePayload;
    private reconnect;
    connect(url: string): void;
    disconnect(): void;
}
export {};
