/// <reference types="node" />
import EventEmitter from 'events';
import { Configuration, Logger } from 'log4js';
import { MiraiApiHttpAdapter } from './adapter';
import { ApplicationConfig } from './config';
import { ChatMessage, ChatMessageMap, ChatMessageType, Event, EventMap, EventType, SyncMessage, SyncMessageMap, SyncMessageType } from './mirai';
import { Pie } from './pie';
declare type MessageReceivedListener<T extends ChatMessage> = (chatMessage: T) => any;
declare type SyncMessageReceivedListener<T extends SyncMessage> = (syncMessage: T) => any;
declare type EventReceivedListener<T extends Event> = (event: T) => any;
declare type LifecycleHookListener = () => any;
/** MiraiPie 应用程序 */
export declare class MiraiPieApplication extends EventEmitter {
    private config;
    /** 应用程序单例 */
    static instance: MiraiPieApplication;
    /** logger */
    logger: Logger;
    /** 机器人服务的QQ号 */
    readonly qq: number;
    /** 用于与 mirai-api-http 对接的客户端 adapter */
    api: MiraiApiHttpAdapter;
    /** 可用的 mirai-api-http 客户端 adapter 映射 */
    private __apiAdapterMap;
    /** 已安装的 pie 映射 */
    private __piesMap;
    /** pie 启用状态映射 */
    private __piesEnabledMap;
    private constructor();
    /**
     * 创建 MiraiPie 应用程序实例
     * @param appConfigs 应用程序配置
     * @param loggerOptions log4js实例配置
     */
    static createApp(appConfigs: ApplicationConfig, loggerOptions?: Configuration): MiraiPieApplication;
    /**
     * 安装拓展
     * @param extension 拓展对象, 可以为 adapter 和 pie
     */
    install<Instance extends Pie | MiraiApiHttpAdapter>(extension: Instance): this;
    /**
     * 安装 adapter
     * @param adapter adapter 对象
     */
    adapter<MiraiApiHttpAdapterInstance extends MiraiApiHttpAdapter>(adapter: MiraiApiHttpAdapterInstance): this;
    /**
     * 切换服务 adapter
     * @param id adapter id
     */
    useAdapter(id: string): this;
    /**
     * 卸载 adapter
     * @param id adapter id
     */
    uninstallAdapter(id: string): MiraiApiHttpAdapter;
    /**
     * 安装 pie
     * @param pie pie 对象
     */
    pie<PieInstance extends Pie>(pie: PieInstance): this;
    /**
     * 启用 pie
     * @param id pie id
     */
    enable(id: string): this;
    /**
     * 禁用 pie
     * @param id pie id
     */
    disable(id: string): this;
    /**
     * 卸载 pie
     * @param id pie id
     */
    uninstallPie(id: string): Pie;
    /** 启动 adapter 的事件监听 */
    listen(): Promise<void>;
    /** 停止 adapter 的事件监听 */
    stop(): void;
    addListener(e: 'message', listener: MessageReceivedListener<ChatMessage>): this;
    addListener<T extends ChatMessageType>(e: T, listener: MessageReceivedListener<ChatMessageMap[T]>): this;
    addListener(e: 'sync', listener: SyncMessageReceivedListener<SyncMessage>): this;
    addListener<T extends SyncMessageType>(e: T, listener: SyncMessageReceivedListener<SyncMessageMap[T]>): this;
    addListener(e: 'event', listener: EventReceivedListener<Event>): this;
    addListener<T extends EventType>(e: T, listener: EventReceivedListener<EventMap[T]>): this;
    addListener(e: 'listen', listener: LifecycleHookListener): this;
    addListener(e: 'stop', listener: LifecycleHookListener): this;
    on(e: 'message', listener: MessageReceivedListener<ChatMessage>): this;
    on<T extends ChatMessageType>(e: T, listener: MessageReceivedListener<ChatMessageMap[T]>): this;
    on(e: 'sync', listener: SyncMessageReceivedListener<SyncMessage>): this;
    on<T extends SyncMessageType>(e: T, listener: SyncMessageReceivedListener<SyncMessageMap[T]>): this;
    on(e: 'event', listener: EventReceivedListener<Event>): this;
    on<T extends EventType>(e: T, listener: EventReceivedListener<EventMap[T]>): this;
    on(e: 'listen', listener: LifecycleHookListener): this;
    on(e: 'stop', listener: LifecycleHookListener): this;
    once(e: 'message', listener: MessageReceivedListener<ChatMessage>): this;
    once<T extends ChatMessageType>(e: T, listener: MessageReceivedListener<ChatMessageMap[T]>): this;
    once(e: 'sync', listener: SyncMessageReceivedListener<SyncMessage>): this;
    once<T extends SyncMessageType>(e: T, listener: SyncMessageReceivedListener<SyncMessageMap[T]>): this;
    once(e: 'event', listener: EventReceivedListener<Event>): this;
    once<T extends EventType>(e: T, listener: EventReceivedListener<EventMap[T]>): this;
    once(e: 'listen', listener: LifecycleHookListener): this;
    once(e: 'stop', listener: LifecycleHookListener): this;
    listeners(e: 'message'): MessageReceivedListener<ChatMessage>[];
    listeners<T extends ChatMessageType>(e: T): MessageReceivedListener<ChatMessageMap[T]>[];
    listeners(e: 'sync'): SyncMessageReceivedListener<SyncMessage>[];
    listeners<T extends SyncMessageType>(e: T): SyncMessageReceivedListener<SyncMessageMap[T]>[];
    listeners(e: 'event'): EventReceivedListener<Event>[];
    listeners<T extends EventType>(e: T): EventReceivedListener<EventMap[T]>[];
    listeners(e: 'listen'): LifecycleHookListener[];
    listeners(e: 'stop'): LifecycleHookListener[];
    emit(e: 'message', chatMessage: ChatMessage): any;
    emit(e: ChatMessageType, chatMessage: ChatMessage): any;
    emit(e: 'sync', syncMessage: SyncMessage): any;
    emit(e: SyncMessageType, syncMessage: SyncMessage): any;
    emit(e: 'event', event: Event): any;
    emit(e: EventType, event: Event): any;
    emit(e: 'listen'): any;
    emit(e: 'stop'): any;
    prependListener(e: 'message', listener: MessageReceivedListener<ChatMessage>): this;
    prependListener<T extends ChatMessageType>(e: T, listener: MessageReceivedListener<ChatMessageMap[T]>): this;
    prependListener(e: 'sync', listener: SyncMessageReceivedListener<SyncMessage>): this;
    prependListener<T extends SyncMessageType>(e: T, listener: SyncMessageReceivedListener<SyncMessageMap[T]>): this;
    prependListener(e: 'event', listener: EventReceivedListener<Event>): this;
    prependListener<T extends EventType>(e: T, listener: EventReceivedListener<EventMap[T]>): this;
    prependListener(e: 'listen', listener: LifecycleHookListener): this;
    prependListener(e: 'stop', listener: LifecycleHookListener): this;
    prependOnceListener(e: 'message', listener: MessageReceivedListener<ChatMessage>): this;
    prependOnceListener<T extends ChatMessageType>(e: T, listener: MessageReceivedListener<ChatMessageMap[T]>): this;
    prependOnceListener(e: 'sync', listener: SyncMessageReceivedListener<SyncMessage>): this;
    prependOnceListener<T extends SyncMessageType>(e: T, listener: SyncMessageReceivedListener<SyncMessageMap[T]>): this;
    prependOnceListener(e: 'event', listener: EventReceivedListener<Event>): this;
    prependOnceListener<T extends EventType>(e: T, listener: EventReceivedListener<EventMap[T]>): this;
    prependOnceListener(e: 'listen', listener: LifecycleHookListener): this;
    prependOnceListener(e: 'stop', listener: LifecycleHookListener): this;
    /** 用于 pie 的消息分发器 */
    private __messageDispatcher;
}
export { ResponseCode, FaceType } from './mirai';
export * as Mirai from './mirai';
export * from './adapter';
export * from './pie';
export * from './message';
export * from './chat';
export * from './config';
export declare const createApp: typeof MiraiPieApplication.createApp;
export declare const makeAppConfig: typeof ApplicationConfig.make;
export default createApp;
//# sourceMappingURL=miraipie.d.ts.map