/// <reference types="node" />
import type { ClientEvent } from '../bot/event';
import { EventEmitter } from 'node:events';
import { generateApi } from '../api';
import { DispatchData, IntentEvent } from '../bot/session';
import { Request } from '../utils/request';
import { LogLevel, Logger } from '../utils/logger';
/** 客户端配置项 */
export interface ClientConfig {
    /** 机器人 ID */
    appid: string;
    /** 机器人令牌 */
    token: string;
    /** 机器人密钥 */
    secret: string;
    /** 分片，默认 `[0, 1]` */
    shard?: number[];
    /** 订阅事件 */
    events: IntentEvent[];
    /** 是否开启沙盒，默认 `false` */
    sandbox?: boolean;
    /** 掉线重连数，默认 `3` */
    max_retry?: number;
    /** 日志等级，默认 `'INFO'` */
    log_level?: LogLevel;
}
type Api = ReturnType<typeof generateApi>;
type EventInterceptor = (dispatch: DispatchData) => DispatchData | Promise<DispatchData>;
export interface Client extends EventEmitter {
    addListener<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    addListener(event: string | symbol, listener: (...args: unknown[]) => void): this;
    on<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    on(event: string | symbol, listener: (...args: unknown[]) => void): this;
    once<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    once(event: string | symbol, listener: (...args: unknown[]) => void): this;
    removeListener<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
    off<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    off(event: string | symbol, listener: (...args: unknown[]) => void): this;
    removeAllListeners<T extends keyof ClientEvent>(event?: T): this;
    removeAllListeners(event?: string | symbol): this;
    listeners<T extends keyof ClientEvent>(event: T): Function[];
    listeners(event: string | symbol): Function[];
    rawListeners<T extends keyof ClientEvent>(event: T): Function[];
    rawListeners(event: string | symbol): Function[];
    emit<T extends keyof ClientEvent>(event: T, ...args: Parameters<ClientEvent[T]>): boolean;
    emit(event: string | symbol, ...args: any[]): boolean;
    listenerCount<T extends keyof ClientEvent>(event: T, listener?: ClientEvent[T]): number;
    listenerCount(event: string | symbol, listener?: Function): number;
    prependListener<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
    prependOnceListener<T extends keyof ClientEvent>(event: T, listener: ClientEvent[T]): this;
    prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
    eventNames<T extends keyof ClientEvent>(): T[];
    eventNames(): Array<string | symbol>;
}
export declare class Client extends EventEmitter {
    config: ClientConfig;
    logger: Logger;
    api: Api;
    request: Request;
    private token;
    private session;
    private eventInterceptors;
    constructor(config: ClientConfig);
    /**
     * 机器人上线。
     */
    online(): Promise<void>;
    /**
     * 机器人下线。
     */
    offline(): void;
    /**
     * 添加事件拦截器。
     */
    useEventInterceptor(interceptor: EventInterceptor): void;
    private onDispatch;
    private onMessage;
    private checkConfig;
    private createApi;
    private createRequest;
}
export {};
