import { type AllHandlers, NCWebsocket, Structs, type Send } from "node-napcat-ts";
export type MessageContext = AllHandlers['message'] | AllHandlers['message.private'] | AllHandlers['message.group'] | AllHandlers['notice'] | AllHandlers['request'];
export interface Plugin {
    name: string;
    version: string;
    description?: string;
    cron?: [string, (e: NapcatClient) => void][];
    initialize(client: NapcatClient): void;
    cleanup(): void;
}
export interface GenericPlugin<T = NapcatClient> extends Omit<Plugin, 'cron'> {
    cron?: [string, (e: T) => void][];
}
export interface NapcatConnector extends NCWebsocket {
    onMessage(handler: (e: MessageContext) => void): void;
    removeMessageListener(handler: (e: MessageContext) => void): boolean;
    connect(): Promise<void>;
    disconnect(): void;
    setConfig(config: Config): void;
    getConfig(): Config;
}
export interface NapcatClient {
    logger: Logger;
    onMessage(handler: (e: MessageContext) => void): void;
    removeMessageListener(handler: (e: MessageContext) => void): boolean;
    events: {
        reply(context: MessageContext, content: any, quote?: boolean): Promise<{
            message_id: number;
        }>;
        sendPrivateMessage(userId: number, content: any): Promise<{
            message_id: number;
        }>;
        sendGroupMessage(groupId: number, content: any): Promise<{
            message_id: number;
        }>;
        isMaster: (id: number) => Promise<boolean>;
        isAdmin: (id: number) => Promise<boolean>;
        hasRight: (user_id: number) => Promise<boolean>;
        delete_msg: (message_id: number) => Promise<void>;
        kick: (group_id: number, user_id: number, reject_add_request?: boolean) => Promise<void>;
        ban: (group_id: number, user_id: number, duration?: number) => Promise<void>;
        banAll: (group_id: number, enable: boolean) => Promise<void>;
        setGroupName: (group_id: number, name: string) => Promise<void>;
        setAdmin: (group_id: number, user_id: number, enable: boolean) => Promise<void>;
        setTitle: (group_id: number, user_id: number, title: string) => Promise<void>;
        aprroveGroup: (flag: string) => Promise<void>;
        rejectGroup: (flag: string) => Promise<void>;
        isGroupAdmin: (group_id: number, user_id: number) => Promise<boolean>;
        isGroupOwner: (group_id: number, user_id: number) => Promise<boolean>;
        md5: (text: string) => string;
        randomInt: (min: number, max: number) => number;
        randomItem: <T>(array: T[]) => T;
        getGroupAvatarLink: (group_id: number, size?: number) => string;
        getQQAvatarLink: (user_id: number, size?: number) => string;
        getImageLink: (raw_message: string) => string;
        getDirectLink: (url: string) => Promise<string>;
        getMessageId: (raw_message: string) => string;
        getMessageAt: (raw_message: string) => number[];
        getText: (raw_message: string) => string;
        getQuotedText: (raw_message: string) => Promise<string>;
        fakeMessage: (target_id: number, message: Send['node'][], isGroup: boolean) => Promise<{
            message_id: number;
            res_id: string;
        }>;
    };
    sendPrivateMessage(userId: number, content: any): Promise<{
        message_id: number;
    }>;
    sendGroupMessage(groupId: number, content: any): Promise<{
        message_id: number;
    }>;
    deleteMessage: (message_id: number) => Promise<void>;
    kickMember: (group_id: number, user_id: number, reject_add_request?: boolean) => Promise<void>;
    banMember: (group_id: number, user_id: number, duration?: number) => Promise<void>;
    banAllMembers: (group_id: number, enable: boolean) => Promise<void>;
    setGroupNameEx: (group_id: number, name: string) => Promise<void>;
    setAdminEx: (group_id: number, user_id: number, enable: boolean) => Promise<void>;
    setMemberTitle: (group_id: number, user_id: number, title: string) => Promise<void>;
    isMaster: (id: number) => Promise<boolean>;
    isAdmin: (id: number) => Promise<boolean>;
    hasRight: (user_id: number) => Promise<boolean>;
    aprroveGroup: (flag: string) => Promise<void>;
    rejectGroup: (flag: string) => Promise<void>;
    isGroupAdmin: (group_id: number, user_id: number) => Promise<boolean>;
    isGroupOwner: (group_id: number, user_id: number) => Promise<boolean>;
    md5: (text: string) => string;
    randomInt: (min: number, max: number) => number;
    randomItem: <T>(array: T[]) => T;
    getGroupAvatarLink: (group_id: number, size?: number) => string;
    getQQAvatarLink: (user_id: number, size?: number) => string;
    getImageLink: (raw_message: string) => string;
    getDirectLink: (url: string) => Promise<string>;
    getMessageId: (raw_message: string) => string;
    getMessageAt: (raw_message: string) => number[];
    getText: (raw_message: string) => string;
    getQuotedText: (raw_message: string) => Promise<string>;
    fakeMessage: (target_id: number, message: Send['node'][], isGroup: boolean) => Promise<{
        message_id: number;
        res_id: string;
    }>;
    setConfig(config: Config): void;
    getConfig(): Config;
    pluginManager: any;
    bot_uin: number;
    napcat: NapcatConnector;
}
export interface Logger {
    info(message: string): void;
    error(message: string): void;
    warn(message: string): void;
    debug(message: string): void;
}
export type FsSizeData = {
    fs: string;
    type: string;
    size: number;
    used: number;
    available: number;
    mount: string;
    [key: string]: any;
};
export interface Config {
    bot: number;
    master: number;
    admins: number[];
    baseUrl: string;
    accessToken: string;
    throwPromise: boolean;
    reconnection: {
        enable: boolean;
        attempts: number;
        delay: number;
    };
    debug: boolean;
    plugins: {
        system: string[];
        user: string[];
    };
    logger: {
        level: string;
        maxSize: string;
        maxDays: number;
    };
}
export { type AllHandlers, NCWebsocket, Structs, type Send };
