import { Plugin, NapcatClient, MessageContext, GenericPlugin, AllHandlers } from './types.js';
import * as cron from 'node-cron';
export type MessageType = 'message' | 'message.private' | 'message.group' | 'notice' | 'request';
export type MessageTypeMap = {
    'message': AllHandlers['message'];
    'message.private': AllHandlers['message.private'];
    'message.group': AllHandlers['message.group'];
    'notice': AllHandlers['notice'];
    'request': AllHandlers['request'];
};
export declare abstract class CybePlugin<T = NapcatClient> implements GenericPlugin<T> {
    protected client: NapcatClient;
    protected messageHandlers: Map<MessageType, (e: MessageContext) => void>;
    protected cronJobs: cron.ScheduledTask[];
    protected currentContext: MessageContext | null;
    enabled: boolean;
    isSystemPlugin: boolean;
    abstract name: string;
    abstract version: string;
    description?: string;
    cron?: [string, (e: T) => void][];
    initialize(client: NapcatClient): void;
    cleanup(): void;
    enable(): boolean;
    disable(): boolean;
    protected registerMessageHandler<K extends MessageType>(type: K, handler: (e: MessageTypeMap[K]) => void): void;
    protected abstract setup(): void;
    protected setupCronJobs(): void;
    protected cleanupCronJobs(): void;
    protected getClient(): NapcatClient | null;
    protected reply(content: any, quote?: boolean): Promise<{
        message_id: number;
    }>;
}
export declare class PluginManager {
    private plugins;
    private client;
    private configPath;
    constructor(client: NapcatClient, configPath?: string);
    loadPlugin(plugin: Plugin, isSystemPlugin?: boolean): void;
    unloadPlugin(pluginName: string): boolean;
    enablePlugin(pluginName: string): boolean;
    disablePlugin(pluginName: string): boolean;
    reloadPlugin(pluginName: string): Promise<boolean>;
    private loadPluginFromFile;
    private updatePluginConfig;
    getLoadedPlugins(): string[];
    getPluginInfo(): Array<{
        name: string;
        version: string;
        description?: string;
        enabled: boolean;
        isSystem: boolean;
    }>;
    unloadAllPlugins(): void;
}
