import { EventKey, EventHandleMap } from './Interfaces';
import { NCWebsocket } from 'node-napcat-ts';
/** 群组信息接口 */
export interface GroupInfo {
    /** 群号 */
    group_id: number;
    /** 群名称 */
    group_name: string;
    /** 当前成员数 */
    member_count: number;
    /** 最大成员数 */
    max_member_count: number;
}
/** 群成员信息接口 */
export interface GroupMemberInfo {
    /** 群号 */
    group_id: number;
    /** QQ号 */
    user_id: number;
    /** 昵称 */
    nickname: string;
    /** 群名片 */
    card: string;
    /** 角色: 群主、管理员、普通成员 */
    role: 'owner' | 'admin' | 'member';
    /** 专属头衔 */
    title: string;
    /** 加群时间(时间戳) */
    join_time: number;
    /** 最后发言时间(时间戳) */
    last_sent_time: number;
}
/** Cookie信息接口 */
export interface CookieInfo {
    /** Cookies字符串 */
    cookies: string;
    /** bkn/gtk值 */
    bkn: string;
}
/** 登录凭证信息接口 */
export interface CredentialsInfo {
    /** Cookies字符串 */
    cookies: string;
    /** CSRF Token */
    token: string;
}
/** 版本信息接口 */
export interface VersionInfo {
    /** 应用标识 */
    app_name: string;
    /** 应用版本 */
    app_version: string;
    /** 协议版本 */
    protocol_version: string;
}
interface AICharacter {
    character_id: string;
    character_name: string;
    preview_url: string;
}
interface AICharacterGroup {
    type: string;
    characters: AICharacter[];
}
/** 插件上下文接口 - 提供插件所需的各种方法和工具 */
export interface XincPluginContext {
    /** WebSocket客户端实例 */
    eventBus: NCWebsocket;
    /** 注册事件处理器,自动推导事件类型对应的处理器参数类型 */
    handle: <T extends EventKey>(event: T, handler: EventHandleMap[T]) => void;
    /** 取消注册事件处理器 */
    off: <T extends EventKey>(event: T, handler: EventHandleMap[T]) => void;
    /** 获取插件数据目录路径 */
    getDataPath: () => string;
    /** 获取插件配置目录路径 */
    getConfigPath: () => string;
    /** 提取消息中的文本内容 */
    getText: (e: any) => string;
    /** 获取QQ头像URL */
    getAvatarLink: (qq: number | string) => string;
    /** 获取QQ群头像URL */
    getGroupLink: (group_id: number | string) => string;
    /** 获取被引用的消息 */
    getQuoteMsg: (e: any) => Promise<any>;
    /** 获取消息中的第一个图片URL */
    getImageURL: (e: any) => string | null;
    /** 获取引用消息中的图片URL */
    getQuoteImageURL: (e: any) => Promise<string | null>;
    /** 获取消息提及的图片URL（消息本身或引用消息中的图片） */
    getMentionedImageURL: (e: any) => Promise<string | null>;
    /** 获取消息中最后一个被@的用户QQ号 */
    getTaggedUserID: (e: any) => number | null;
    /** 上传文件到群文件根目录 */
    uploadFileToDir: (group_id: number | string, file: string, name?: string) => Promise<void>;
    /** 判断是否是主人的消息 */
    isRoot: (e: any) => boolean;
    /** 判断是否是管理员的消息 */
    isAdmin: (e: any) => boolean;
    /** 判断是否是群主的消息 */
    isGroupOwner: (e: any) => boolean;
    /** 判断是否是群管理员的消息 */
    isGroupAdmin: (e: any) => boolean;
    /** 获取已加载的插件列表 */
    getLoadedPlugins: () => XincPlugin[];
    /** 重载指定插件 */
    reloadPlugin: (name: string) => Promise<void>;
    /** 禁用插件 */
    disablePlugin: (name: string) => Promise<void>;
    /** 启用插件 */
    enablePlugin: (name: string) => Promise<void>;
    /** 获取框架状态 */
    getStatus: () => Promise<{
        uptime: string;
        memory: number;
        pluginCount: number;
        groupCount: number;
    }>;
    /** 关闭框架 */
    shutdown: () => Promise<void>;
    /** 发送消息并返回消息ID */
    respond: (e: any, message: any) => Promise<any>;
    /** 撤回消息 */
    recallMsg: (message_id: number) => Promise<void>;
    /** 给好友点赞
     * @param user_id 好友QQ号
     * @param times 点赞次数(1-50)，默认50次
     */
    sendLike: (user_id: number | string, times?: number) => Promise<void>;
    /** 踢出群成员
     * @param group_id 群号
     * @param user_id 要踢的QQ号
     * @param reject_add_request 是否拉黑，默认false
     */
    kick: (group_id: number | string, user_id: number | string, reject_add_request?: boolean) => Promise<void>;
    /** 群禁言
     * @param group_id 群号
     * @param user_id 要禁言的QQ号
     * @param duration 禁言时长(秒)，0表示解除禁言，默认1800(30分钟)
     */
    mute: (group_id: number | string, user_id: number | string, duration?: number) => Promise<void>;
    /** 群组全员禁言
     * @param group_id 群号
     * @param enable 是否开启全员禁言，默认true
     */
    muteGroup: (group_id: number | string, enable?: boolean) => Promise<void>;
    /** 设置群管理员
     * @param group_id 群号
     * @param user_id 要设置的QQ号
     * @param enable 是否设为管理员，默认true
     */
    setAdmin: (group_id: number | string, user_id: number | string, enable?: boolean) => Promise<void>;
    /** 设置群名片
     * @param group_id 群号
     * @param user_id 要设置的QQ号
     * @param card 群名片，空字符串表示删除群名片
     */
    setGroupCard: (group_id: number | string, user_id: number | string, card: string) => Promise<void>;
    /** 设置群名
     * @param group_id 群号
     * @param group_name 新群名
     */
    setGroupName: (group_id: number | string, group_name: string) => Promise<void>;
    /** 退出群组
     * @param group_id 群号
     */
    quitGroup: (group_id: number | string) => Promise<void>;
    /** 设置群头衔
     * @param group_id 群号
     * @param user_id 要设置的QQ号
     * @param special_title 头衔，空字符串表示删除头衔
     */
    setTitle: (group_id: number | string, user_id: number | string, special_title: string) => Promise<void>;
    /** 获取群信息
     * @param group_id 群号
     * @returns 群信息对象
     */
    getGroupInfo: (group_id: number | string) => Promise<GroupInfo>;
    /** 获取群列表
     * @returns 群信息数组
     */
    getGroupList: () => Promise<GroupInfo[]>;
    /** 获取群成员信息
     * @param group_id 群号
     * @param user_id 要查询的QQ号
     * @param no_cache 是否不使用缓存
     * @returns 群成员信息
     */
    getGroupMemberInfo: (group_id: number | string, user_id: number | string, no_cache?: boolean) => Promise<GroupMemberInfo>;
    /** 获取指定域名的 Cookies
     * @param domain 域名
     * @returns Cookie信息
     */
    getCookie: (domain: string) => Promise<CookieInfo>;
    /** 获取 CSRF Token
     * @returns CSRF Token
     */
    getCsrfToken: () => Promise<string>;
    /** 获取登录凭证
     * @returns 凭证信息
     */
    getCredentials: () => Promise<CredentialsInfo>;
    /** 获取服务端版本信息
     * @returns 版本信息
     */
    getVersionInfo: () => Promise<VersionInfo>;
    /** 获取群 AI 角色列表
     * @param group_id 群号
     * @returns AI 角色列表，按类型分组
     */
    getAiRoleList: (group_id: number | string) => Promise<AICharacterGroup[]>;
    /** 发送群 AI 语音
     * @param group_id 群号
     * @param character_id AI 角色 ID
     * @param text 要转换为语音的文本
     * @returns 消息发送结果
     */
    sendGroupAiRecord: (group_id: number | string, character: string, text: string) => Promise<null>;
    /** 发送WebSocket消息
     * @param action 动作名称
     * @param params 参数对象
     * @returns WebSocket响应结果
     */
    wsSend: (action: string, params: any) => Promise<any>;
    /** 获取所有插件列表，包含启用状态 */
    getPlugins: () => Array<XincPlugin & {
        enabled: boolean;
    }>;
}
/** 插件接口 */
export interface XincPlugin {
    /** 插件ID */
    name: string;
    /** 插件版本 */
    version?: string;
    /** 插件描述 */
    desc?: string;
    /** 插件安装方法 */
    setup: (ctx: XincPluginContext) => void;
}
/** 插件管理器接口 */
export interface XincPluginManager {
    /** 加载插件 */
    loadPlugin(plugin: XincPlugin): Promise<void>;
    /** 卸载插件 */
    unloadPlugin(name: string): Promise<void>;
    /** 获取已加载的插件列表 */
    getLoadedPlugins(): XincPlugin[];
}
export declare class PluginManager implements XincPluginManager {
    private plugins;
    private cleanupFns;
    private eventHandlers;
    private eventBus;
    private dataDir;
    private configDir;
    private startTime;
    constructor(ws: NCWebsocket, dataDir: string, configDir: string);
    loadPlugin(plugin: XincPlugin): Promise<void>;
    unloadPlugin(name: string): Promise<void>;
    private formatUptime;
    getLoadedPlugins(): XincPlugin[];
    private findPlugin;
    reloadPlugin(name: string): Promise<void>;
    enablePlugin(name: string): Promise<void>;
    disablePlugin(name: string): Promise<void>;
}
export declare function definePlugin(plugin: XincPlugin): XincPlugin;
export {};
//# sourceMappingURL=plugin.d.ts.map