/// <reference types="node" />
import EventEmitter from 'events';
import { ReadStream } from 'fs';
import { Logger } from 'log4js';
import { ConfigMeta, UserConfigs } from './config';
import { AboutResponse, ApiResponse, ChatMessage, Event, FileInfoResponse, FileListResponse, FriendListResponse, GroupAnnouncementsResponse, GroupConfig, GroupConfigResponse, GroupListResponse, GroupMemberInfo, GroupMemberResponse, MemberListResponse, MessageFromIdResponse, NudgeKind, PostGroupAnnouncement, ProfileResponse, SendMessageResponse, SingleMessage, SyncMessage, UploadFileResponse, UploadImageResponse, UploadVoiceResponse, VerifyResponse } from './mirai';
declare type UploadType = 'friend' | 'group' | 'temp';
declare type MiraiApiHttpAdapterApiMethodOptions = {
    /** 获取插件相关信息 */
    getAbout(): Promise<AboutResponse>;
    /**
     * 通过messageId获取消息
     * @param messageId 消息id
     */
    getMessageFromId(messageId: number): Promise<MessageFromIdResponse>;
    /** 获取好友列表 */
    getFriendList(): Promise<FriendListResponse>;
    /** 获取群列表 */
    getGroupList(): Promise<GroupListResponse>;
    /**
     * 获取群成员列表
     * @param groupId 群号
     */
    getMemberList(groupId: number): Promise<MemberListResponse>;
    /** 获取Bot资料 */
    getBotProfile(): Promise<ProfileResponse>;
    /**
     * 获取好友资料
     * @param friendId 好友QQ号
     */
    getFriendProfile(friendId: number): Promise<ProfileResponse>;
    /**
     * 获取群成员资料
     * @param memberId 群成员QQ号
     * @param groupId 群号
     */
    getMemberProfile(memberId: number, groupId: number): Promise<ProfileResponse>;
    /**
     * 获取指定用户资料
     * @param userId
     * @since mirai-api-http v2.5.0
     */
    getUserProfile(userId: number): Promise<ProfileResponse>;
    /**
     * 发送好友消息
     * @param friendId 好友QQ号
     * @param messageChain 消息链或消息数组
     * @param quoteMessageId 引用回复的消息id
     */
    sendFriendMessage(friendId: number, messageChain: SingleMessage[], quoteMessageId?: number): Promise<SendMessageResponse>;
    /**
     * 发送群消息
     * @param groupId 群号
     * @param messageChain 消息链或消息数组
     * @param quoteMessageId 引用回复的消息id
     */
    sendGroupMessage(groupId: number, messageChain: SingleMessage[], quoteMessageId?: number): Promise<SendMessageResponse>;
    /**
     * 发送群临时会话消息
     * @param memberId 群成员QQ号
     * @param groupId 群号
     * @param messageChain 消息链或消息数组
     * @param quoteMessageId 引用回复的消息id
     */
    sendTempMessage(memberId: number, groupId: number, messageChain: SingleMessage[], quoteMessageId?: number): Promise<SendMessageResponse>;
    /**
     * 发送头像戳一戳消息
     * @param targetId 戳一戳的目标
     * @param subjectId 戳一戳的接收人
     * @param kind 戳一戳的类型("Stranger" | "Friend" | "Group")
     */
    sendNudge(targetId: number, subjectId: number, kind: NudgeKind): Promise<ApiResponse>;
    /**
     * 撤回消息
     * @param messageId 消息id
     */
    recall(messageId: number): Promise<ApiResponse>;
    /**
     * 删除好友
     * @param friendId 好友QQ号
     */
    deleteFriend(friendId: number): Promise<ApiResponse>;
    /**
     * 禁言群成员
     * @param memberId 群成员QQ号
     * @param groupId 群号
     * @param time 禁言时长, 单位为秒, 最多30天, 默认为0
     */
    muteMember(memberId: number, groupId: number, time: number): Promise<ApiResponse>;
    /**
     * 解除群成员禁言
     * @param memberId 群成员QQ号
     * @param groupId 群号
     */
    unmuteMember(memberId: number, groupId: number): Promise<ApiResponse>;
    /**
     * 移除群成员
     * @param memberId 群成员QQ号
     * @param groupId 群号
     * @param message 信息
     */
    kickMember(memberId: number, groupId: number, message: string): Promise<ApiResponse>;
    /**
     * 退出群聊
     * @param groupId 群号
     */
    quitGroup(groupId: number): Promise<ApiResponse>;
    /**
     * 全体禁言
     * @param groupId 群号
     */
    muteAll(groupId: number): Promise<ApiResponse>;
    /**
     * 解除全体禁言
     * @param groupId 群号
     */
    unmuteAll(groupId: number): Promise<ApiResponse>;
    /**
     * 设置群精华消息
     * @param messageId 消息id
     */
    setEssence(messageId: number): Promise<ApiResponse>;
    /**
     * 获取群设置
     * @param groupId 群号
     */
    getGroupConfig(groupId: number): Promise<GroupConfigResponse>;
    /**
     * 修改群设置
     * @param groupId 群号
     * @param config 群设置
     */
    setGroupConfig(groupId: number, config: GroupConfig): Promise<ApiResponse>;
    /**
     * 获取群员设置
     * @param memberId 群成员QQ号
     * @param groupId 群号
     */
    getMemberInfo(memberId: number, groupId: number): Promise<GroupMemberResponse>;
    /**
     * 修改群员设置
     * @param memberId 群成员QQ号
     * @param groupId 群号
     * @param info 群员资料
     */
    setMemberInfo(memberId: number, groupId: number, info: GroupMemberInfo): Promise<ApiResponse>;
    /**
     * 设置管理员(机器人需要有群主权限)
     * @param memberId 群成员QQ号
     * @param groupId 群号
     * @param admin 是否设置为管理员
     * @since mirai-api-http v2.3.0
     */
    setMemberAdmin(memberId: number, groupId: number, admin: boolean): Promise<ApiResponse>;
    /**
     * 获取群公告
     * @param groupId 群号
     * @param offset 分页偏移
     * @param size 分页大小
     * @since mirai-api-http v2.5.0
     */
    getGroupAnnouncements(groupId: number, offset: number, size: number): Promise<GroupAnnouncementsResponse>;
    /**
     * 发布群公告
     * @param groupId 群号
     * @param announcement 公告内容
     * @since mirai-api-http v2.5.0
     */
    postGroupAnnouncement(groupId: number, announcement: PostGroupAnnouncement): Promise<GroupAnnouncementsResponse>;
    /**
     * 删除群公告
     * @param groupId 群号
     * @param announcementId 群公告id
     * @since mirai-api-http v2.5.0
     */
    deleteGroupAnnouncement(groupId: number, announcementId: number): Promise<ApiResponse>;
    /**
     * 处理添加好友申请事件
     * @param eventId 事件id
     * @param fromId 申请人QQ号
     * @param groupId 申请人群号, 可能为0
     * @param operate 操作类型 (0-同意|1-拒绝|2-拒绝并加入黑名单)
     * @param message 回复的信息
     */
    handleNewFriendRequest(eventId: number, fromId: number, groupId: number, operate: number, message: string): Promise<ApiResponse>;
    /**
     * 处理用户入群申请事件
     * @param eventId 事件id
     * @param fromId 申请人QQ号
     * @param groupId 申请人群号
     * @param operate 操作类型 (0-同意|1-拒绝|2-忽略|3-拒绝并加入黑名单|4-忽略并加入黑名单)
     * @param message 回复的信息
     */
    handleMemberJoinRequest(eventId: number, fromId: number, groupId: number, operate: number, message: string): Promise<ApiResponse>;
    /**
     * 处理Bot被邀请入群申请事件
     * @param eventId 事件id
     * @param fromId 邀请人(好友)QQ号
     * @param groupId 邀请进入的群号
     * @param operate 操作类型 (0-同意|1-拒绝)
     * @param message 回复的信息
     */
    handleBotInvitedJoinGroupRequest(eventId: number, fromId: number, groupId: number, operate: number, message: string): Promise<ApiResponse>;
    /**
     * 查看聊天文件列表
     * @param directoryId 文件夹id, 空串为根文件夹
     * @param directoryPath 文件夹路径
     * @param groupId 群号
     * @param friendId 好友QQ号
     * @param offset 分页偏移
     * @param size 分页大小
     * @param withDownloadInfo 是否携带下载信息, 额外请求, 无必要不要携带
     */
    getFileList(directoryId: string, directoryPath: string, groupId: number, friendId: number, offset: number, size: number, withDownloadInfo: boolean): Promise<FileListResponse>;
    /**
     * 获取聊天文件信息
     * @param fileId 文件id
     * @param path 文件路径
     * @param groupId 群号
     * @param friendId 好友QQ号
     * @param withDownloadInfo 是否携带下载信息, 额外请求, 无必要不要携带
     */
    getFileInfo(fileId: string, path: string, groupId: number, friendId: number, withDownloadInfo: boolean): Promise<FileInfoResponse>;
    /**
     * 创建聊天文件夹
     * @param parentDirectoryId 父文件夹id, 空串为根文件夹
     * @param parentDirectoryPath 父文件夹路径
     * @param directoryName 文件夹名
     * @param groupId 群号
     * @param friendId 好友QQ号
     */
    createFileDirectory(parentDirectoryId: string, parentDirectoryPath: string, directoryName: string, groupId: number, friendId: number): Promise<FileInfoResponse>;
    /**
     * 删除聊天文件
     * @param id 文件或文件夹id
     * @param path 文件或文件夹路径
     * @param groupId 群号
     * @param friendId 好友QQ号
     */
    deleteFile(id: string, path: string, groupId: number, friendId: number): Promise<ApiResponse>;
    /**
     * 移动聊天文件
     * @param id 文件或文件夹id
     * @param path 文件或文件夹路径
     * @param groupId 群号
     * @param friendId 好友QQ号
     * @param moveToDirectoryId 移动到文件夹id, 空串为根文件夹
     * @param moveToDirectoryPath 移动到文件夹路径, 空串为根文件夹
     */
    moveFile(id: string, path: string, groupId: number, friendId: number, moveToDirectoryId: string, moveToDirectoryPath: string): Promise<ApiResponse>;
    /**
     * 重命名聊天文件
     * @param id 文件或文件夹id
     * @param path 文件或文件夹路径
     * @param groupId 群号
     * @param friendId 好友QQ号
     * @param name 文件名
     */
    renameFile(id: string, path: string, groupId: number, friendId: number, name: string): Promise<ApiResponse>;
    /** 会话认证 */
    verify?(): Promise<VerifyResponse>;
    /**
     * 绑定QQ号
     * @param qq 服务的机器人QQ号
     */
    bind?(qq: number): Promise<ApiResponse>;
    /**
     * 释放Session
     * @param qq 服务的机器人QQ号
     */
    release?(qq: number): Promise<ApiResponse>;
    /**
     * 执行命令<br/>
     * console 支持以不同消息类型作为指令的参数, 执行命令需要以消息类型作为参数, 若执行纯文本的命令, 构建多个 Plain 格式的消息 console 会将第一个消息作为指令名, 后续消息作为参数 具体参考 <a href="https://docs.mirai.mamoe.net/console/Commands.html">console 文档</a>
     * @param command 命令与参数
     */
    executeCommand?(command: SingleMessage[]): Promise<ApiResponse>;
    /**
     * 注册命令
     * @param name 指令名
     * @param alias 指令别名
     * @param usage 使用说明
     * @param description 命令描述
     */
    registerCommand?(name: string, alias: string[], usage: string, description: string): Promise<ApiResponse>;
    /**
     * 图片文件上传
     * @param uploadType 上传类型("friend" 或 "group" 或 "temp")
     * @param imageData 文件内容
     */
    uploadImage(uploadType: UploadType, imageData: ReadStream): Promise<UploadImageResponse>;
    /**
     * 语音文件上传
     * @param uploadType 上传类型("friend" 或 "group" 或 "temp")
     * @param voiceData 文件内容
     */
    uploadVoice(uploadType: UploadType, voiceData: ReadStream): Promise<UploadVoiceResponse>;
    /**
     * 群文件上传
     * @param uploadType 上传类型(仅支持"group")
     * @param path 上传父文件夹的id, 空串为上传到根文件夹
     * @param fileData 文件内容
     * @param filename 文件名
     */
    uploadGroupFile(uploadType: UploadType, path: string, fileData: ReadStream, filename: string): Promise<UploadFileResponse>;
    /** 开启消息和事件监听 */
    listen(): Promise<any>;
    /** 关闭消息和事件监听 */
    stop(): any;
};
declare type MiraiApiHttpAdapterHookOptions<MiraiApiHttpAdapterInstance> = {
    /** adapter安装完成hook */
    installed?: LifecycleHookListener<MiraiApiHttpAdapterInstance>;
    /** adapter卸载完成hook */
    uninstalled?: LifecycleHookListener<MiraiApiHttpAdapterInstance>;
    /** adapter选用hook */
    used?: LifecycleHookListener<MiraiApiHttpAdapterInstance>;
    /** adapter弃用hook */
    unused?: LifecycleHookListener<MiraiApiHttpAdapterInstance>;
};
declare type MiraiApiHttpAdapterMethodOptions<MiraiApiHttpAdapterInstance> = {
    [key: string]: (this: MiraiApiHttpAdapterInstance, ...args: any) => any;
};
export declare type MiraiApiHttpAdapterOption<C extends ConfigMeta, D extends object, M extends MiraiApiHttpAdapterMethodOptions<MiraiApiHttpAdapter<C, D, M>>> = {
    /** adapter id */
    id: string;
    /** 对mirai-api-http的支持版本 */
    supportVersion: string;
    /** 配置元定义 */
    configMeta?: C;
    /** adapter 额外数据 */
    data?: D;
    /** adapter 额外方法 */
    methods?: M;
} & MiraiApiHttpAdapterHookOptions<MiraiApiHttpAdapter<C, D, M>> & MiraiApiHttpAdapterApiMethodOptions & ThisType<MiraiApiHttpAdapter<C, D, M>>;
declare type MessageReceivedListener<MiraiApiHttpAdapterInstance> = (this: MiraiApiHttpAdapterInstance, chatMessage: ChatMessage) => any;
declare type SyncMessageReceivedListener<MiraiApiHttpAdapterInstance> = (this: MiraiApiHttpAdapterInstance, syncMessage: SyncMessage) => any;
declare type EventReceivedListener<MiraiApiHttpAdapterInstance> = (this: MiraiApiHttpAdapterInstance, event: Event) => any;
declare type LifecycleHookListener<MiraiApiHttpAdapterInstance> = (this: MiraiApiHttpAdapterInstance) => any;
export declare type MiraiApiHttpAdapter<C extends ConfigMeta = {}, D extends object = object, M extends MiraiApiHttpAdapterMethodOptions<MiraiApiHttpAdapter<C, D, M>> = {}> = {
    /** adapter id */
    readonly id: string;
    /** 对mirai-api-http的支持版本 */
    readonly supportVersion: string;
    /** 配置元定义 */
    readonly configMeta: C;
    /** 用户配置 */
    configs: UserConfigs<C>;
    /** 是否正在监听 */
    listening: boolean;
    /** logger */
    logger: Logger;
    /** 是否为 api adapter 标识, 恒为 true */
    readonly __isApiAdapter: true;
    addListener(e: 'message', listener: MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'sync', listener: SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'event', listener: EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'used', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'unused', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'installed', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'uninstalled', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'listen', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    addListener(e: 'stop', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'message', listener: MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'sync', listener: SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'event', listener: EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'used', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'unused', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'installed', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'uninstalled', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'listen', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    once(e: 'stop', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'message', listener: MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'sync', listener: SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'event', listener: EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'used', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'unused', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'installed', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'uninstalled', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'listen', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    on(e: 'stop', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'message', listener: MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'sync', listener: SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'event', listener: EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'used', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'unused', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'installed', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'uninstalled', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'listen', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependListener(e: 'stop', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'message', listener: MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'sync', listener: SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'event', listener: EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'used', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'unused', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'installed', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'uninstalled', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'listen', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    prependOnceListener(e: 'stop', listener: LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>): any;
    emit(e: 'message', chatMessage: ChatMessage): any;
    emit(e: 'sync', syncMessage: SyncMessage): any;
    emit(e: 'event', event: Event): any;
    emit(e: 'used'): any;
    emit(e: 'unused'): any;
    emit(e: 'installed'): any;
    emit(e: 'uninstalled'): any;
    emit(e: 'listen'): any;
    emit(e: 'stop'): any;
    listeners(e: 'message'): MessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'sync'): SyncMessageReceivedListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'event'): EventReceivedListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'used'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'unused'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'installed'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'uninstalled'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'listen'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
    listeners(e: 'stop'): LifecycleHookListener<MiraiApiHttpAdapter<C, D, M>>[];
} & D & M & Readonly<MiraiApiHttpAdapterApiMethodOptions> & EventEmitter;
/**
 * 创建 api adapter
 * @param options adapter 选项
 */
export declare function makeApiAdapter<C extends ConfigMeta, D extends object, M extends MiraiApiHttpAdapterMethodOptions<MiraiApiHttpAdapter<C, D, M>>>(options: MiraiApiHttpAdapterOption<C, D, M>): MiraiApiHttpAdapter<C, D, M>;
export {};
//# sourceMappingURL=adapter.d.ts.map