import { NCWebsocket, AllHandlers, EventHandleMap, Send, Structs } from 'node-napcat-ts';
import { EventHandler } from './types';
import { logger } from './log4js.config';
import axios from 'axios';
import dayjs from 'dayjs';
export declare class Bot {
    client: NCWebsocket;
    private eventHandlers;
    master: number;
    admins: number[];
    configPath: string;
    pluginDir: string;
    config_json: any;
    builtInPlugins: Set<string>;
    constructor();
    on<T extends keyof AllHandlers>(event: T, handler: EventHandleMap[T]): void;
    off<T extends keyof AllHandlers>(event: T, handler: EventHandleMap[T]): void;
    connect(): Promise<void>;
    disconnect(): void;
    getEventHandlers(event: string): Set<EventHandler<any>>;
    /**
     * 发送消息回复给指定的上下文。
     *
     * @param context - 消息上下文对象，包含消息的详细信息。
     * @param message - 要发送的消息内容，可以是字符串、数字或消息段数组。
     * @param quote - 是否引用原始消息。默认值为 `false`。
     * @returns - 返回发送消息的结果，包含消息ID。
     * @throws - 如果发送消息失败，抛出错误。
     */
    reply: (context: AllHandlers["message"], message: string | number | Array<any>, quote?: boolean) => Promise<{
        message_id: number;
    }>;
    /**
     * 发送消息到指定的群组。
     *
     * @param context - 消息上下文对象，包含消息的详细信息。
     * @param group_id - 目标群组的ID。
     * @param message - 要发送的消息内容，可以是字符串、数字或消息段数组。
     * @returns - 返回发送消息的结果，包含消息ID。
     * @throws - 如果发送消息失败，抛出错误。
     */
    sendGroupMessage: (group_id: number, message: string | number | Array<any>) => Promise<{
        message_id: number;
    }>;
    /**
     * 撤回指定的消息。
     *
     * @param message_id - 要撤回的消息的ID。
     * @throws - 如果撤回消息失败，抛出错误。
     */
    delete_msg: (message_id: number) => Promise<void>;
    /**
     * 将指定用户从群组中踢出。
     *
     * @param ctx - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 要踢出的用户的ID。
     * @param reject_add_request - 是否拒绝该用户的加群请求。默认值为 `false`。
     * @throws - 如果踢出用户失败，抛出错误。
     */
    kick: (context: AllHandlers["message.group"], user_id: number, reject_add_request?: boolean) => Promise<void>;
    /**
     * 将指定用户在群组中禁言。
     *
     * @param ctx - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 要禁言的用户的ID。
     * @param duration - 禁言时长，单位为秒。默认值为 `30` 秒。
     * @throws - 如果禁言用户失败，抛出错误。
     */
    ban: (context: AllHandlers["message.group"], user_id: number, duration?: number) => Promise<void>;
    /**
     * 设置群组全员禁言状态。
     *
     * @param ctx - 群组消息上下文对象，包含群组的详细信息。
     * @param enable - 是否开启全员禁言。默认值为 `false`，即关闭全员禁言。
     * @throws - 如果设置全员禁言状态失败，抛出错误。
     */
    banAll: (context: AllHandlers["message.group"], enable?: boolean) => Promise<void>;
    /**
     * 设置群组名称。
     *
     * @param context - 群组消息上下文对象，包含群组的详细信息。
     * @param name - 要设置的群组名称。
     * @throws - 如果设置群组名称失败，抛出错误。
     */
    setGroupName: (context: AllHandlers["message.group"], name: string) => Promise<void>;
    /**
     * 设置群组管理员。
     *
     * @param context - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 要设置或取消管理员权限的用户的ID。
     * @param enable - 是否设置为管理员。默认值为 `true`，即设置为管理员。
     * @throws - 如果设置管理员权限失败，抛出错误。
     */
    setAdmin: (context: AllHandlers["message.group"], user_id: number, enable?: boolean) => Promise<void>;
    /**
     * 设置群组成员的特殊头衔。
     *
     * @param context - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 要设置特殊头衔的用户的ID。
     * @param title - 要设置的特殊头衔。
     * @throws - 如果设置特殊头衔失败，抛出错误。
     */
    setTitle: (context: AllHandlers["message.group"], user_id: number, title: string) => Promise<void>;
    /**
     * 处理群组加入请求，自动同意请求。
     *
     * @param context - 请求上下文对象，包含请求的详细信息。
     * @throws - 如果处理请求失败，抛出错误。
     */
    aprroveGroup: (context: AllHandlers["request"]) => Promise<void>;
    /**
     * 处理群组加入请求，自动拒绝请求。
     *
     * @param context - 请求上下文对象，包含请求的详细信息。
     * @throws - 如果处理请求失败，抛出错误。
     */
    rejectGroup: (context: AllHandlers["request"]) => Promise<void>;
    /**
     * 检查用户是否有权限。
     *
     * @param user_id - 用户的ID。
     * @returns 如果用户是管理员或主人，则返回 `true`，否则返回 `false`。
     */
    hasRight: (user_id: number) => boolean;
    /**
     * 检查用户是否是群组管理员或群主。
     *
     * @param context - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 用户的ID。
     * @param group_id - 群组的ID。默认值为 `context.group_id`。
     * @returns 如果用户是群组管理员或群主，则返回 `true`，否则返回 `false`。
     * @throws - 如果获取群组成员信息失败，抛出错误。
     */
    isGroupAdmin: (context: AllHandlers["message.group"], user_id: number, group_id?: number) => Promise<boolean>;
    /**
     * 检查用户是否是群组群主。
     *
     * @param context - 群组消息上下文对象，包含群组的详细信息。
     * @param user_id - 用户的ID。
     * @param group_id - 群组的ID。默认值为 `context.group_id`。
     * @returns 如果用户是群组群主，则返回 `true`，否则返回 `false`。
     * @throws - 如果获取群组成员信息失败，抛出错误。
     */
    isGroupOwner: (context: AllHandlers["message.group"], user_id: number, group_id?: number) => Promise<boolean>;
    /**
     * 异步读取机器人的配置文件。
     *
     * @returns - 返回解析后的配置对象。
     * @throws - 如果读取或解析配置文件失败，抛出错误。
     */
    readConfigAsync: () => Promise<any>;
    /**
     * 异步写入机器人的配置文件。
     *
     * @param config - 要写入的配置对象。
     * @throws - 如果写入配置文件失败，抛出错误。
     */
    writeConfigAsync: (config: object) => Promise<void>;
    /**
     * 异步读取所有插件。
     * 该方法会读取 `plugins` 目录下的所有子目录，并将每个子目录的名称作为插件名返回。
     * @returns - 返回一个包含所有插件名称的字符串数组。
     * @throws - 如果读取插件目录失败，抛出错误。
     */
    readAllPlugins(): Promise<string[]>;
    /**
     * 异步读取已启用的插件。
     * 该方法会读取机器人的配置文件 `bot.config.json`，并返回配置文件中 `plugins` 字段列出的所有已启用插件名称。
     * @returns - 返回一个包含所有已启用插件名称的字符串数组。
     * @throws - 如果读取或解析配置文件失败，抛出错误。
     */
    readEnabledPlugins(): Promise<string[]>;
    /**
     * MD5 加密
     * @param {string} text 待 MD5 加密数据
     * @return {string} MD5 加密后的 hex 字符串
     */
    md5: (text: string) => string;
    /**
     * 生成随机整数
     * @param {number} min 最小值
     * @param {number} max 最大值
     * @return {number} 随机范围内的整数
     */
    randomInt: (min: number, max: number) => number;
    /**
     * 取数组内随机一项
     * @param {Array<T>} array 待操作数组
     * @return {T} 数组内的随机一项
     */
    randomItem: <T>(array: T[]) => T;
    /**
     * 通过群号获取任意群头像链接
     *
     * size 可选： 40 | 100 | 640，0 为原图
     */
    getGroupAvatarLink: (group: number, size?: number) => Promise<string>;
    /**
     * 通过 QQ 号获取任意头像链接
     *
     * size 可选： 0 | 40 | 100 | 160 | 640，0 为原图
     */
    getQQAvatarLink: (group: number, size?: number) => Promise<string>;
    /**
     * 从消息内容中提取图片链接。
     * 该方法使用正则表达式从传入的 `raw_message` 中提取 `[CQ:image,...]` 格式的图片链接。
     * 如果找到图片链接，则返回该链接；否则，记录警告日志并返回空字符串。
     * @param raw_message - 包含图片信息的原始消息字符串。
     * @returns 提取的图片链接字符串，如果未找到则返回空字符串。
     * @throws 如果在提取过程中发生错误，记录错误日志并返回空字符串。
     */
    getImageLink: (raw_message: string) => Promise<string>;
    getrKey: () => Promise<string>;
    /**
     * 替换 URL 中的 rkey 参数
     * @param url - 原始 URL
     * @returns 替换 rkey 后的新 URL
     */
    getDirectLink: (url: string) => Promise<string>;
    /**
     * 从消息内容中提取回复消息的ID。
     * 该方法使用正则表达式从传入的 `raw_message` 中提取 `[CQ:reply,id=...]` 格式的回复消息ID。
     * 如果找到回复消息ID，则返回该ID；否则，返回空字符串。
     *
     * @param raw_message - 包含回复消息信息的原始消息字符串。
     * @returns 提取的回复消息ID字符串，如果未找到则返回空字符串。
     * @throws 如果在提取过程中发生错误，记录错误日志并返回空字符串。
     */
    getMessageId: (raw_message: string) => Promise<string>;
    /**
     * 从消息内容中提取被@的QQ号码。
     * 该方法使用正则表达式从传入的 `raw_message` 中提取 `[CQ:at,qq=...]` 格式的QQ号码。
     * 如果找到被@的QQ号码，则返回该号码；否则，返回空字符串。
     *
     * @param raw_message - 包含@信息的原始消息字符串。
     * @returns 提取的被@的QQ号码字符串，如果未找到则返回空字符串。
     * @throws 如果在提取过程中发生错误，记录错误日志并返回空字符串。
     */
    getMessageAt: (raw_message: string) => Promise<string>;
    /**
     * 从消息内容中提取纯文本内容。
     * 该方法使用正则表达式从传入的 `raw_message` 中移除所有的 CQ 码，并返回剩余的纯文本内容。
     *
     * @param raw_message - 包含 CQ 码的原始消息字符串。
     * @returns 提取的纯文本内容字符串。
     * @throws 如果在提取过程中发生错误，记录错误日志并抛出错误。
     */
    getText: (raw_message: string) => Promise<string>;
    /**
     * 发送伪造消息。
     *
     * @param target_id - 目标用户的ID（如果是私聊）或群组的ID（如果是群聊）。
     * @param message - 要发送的消息内容，格式为 `Send['node'][]`。
     * @param isGroup - 是否发送到群组。默认值为 `true`。
     * @returns - 返回发送消息的结果，包含消息ID和资源ID。
     * @throws - 如果发送消息失败，抛出错误。
     */
    fakeMessage: (target_id: number, message: Send["node"][], isGroup?: boolean) => Promise<{
        message_id: number;
        res_id: string;
    }>;
}
declare const bootstrap: () => Promise<void>;
export { axios as http, dayjs, type AllHandlers, Structs, logger, bootstrap };
