import { Context, Awaitable, Logger, Schema, Quester } from 'koishi';
import { PartialDeep } from 'koishi-thirdeye';
import PicsContainer from '.';
import { PicSourceConfig } from './config';
import { PicSourceInfo, PicResult } from './def';
export declare class PicSource implements PicSourceInfo {
    ctx: Context;
    constructor(ctx: Context);
    tags: string[];
    weight: number;
    name: string;
    description: string;
    isDefault: boolean;
    applyConfig(src: Partial<PicSourceInfo>): void;
    randomPic(picTags: string[]): Awaitable<PicResult>;
    onStartup(): Awaitable<void>;
    onShutdown(): Awaitable<void>;
    getDisplayString(): string;
}
export declare class BasePicSourcePlugin extends PicSource {
    constructor(ctx: Context, config: PartialDeep<PicSourceConfig>);
    http: Quester;
    config: PicSourceConfig;
    pics: PicsContainer;
    logger: Logger;
    initializeSource(): void;
}
export declare const PicSourcePlugin: <S>(specificConfig?: import("koishi-thirdeye").ClassType<S>) => new (ctx: import("cordis").Context<any>, config: PartialDeep<S> & {
    tags?: string[];
    weight?: number;
    name?: string;
    description?: string;
    isDefault?: boolean;
    http?: {
        headers?: {
            [x: string]: any;
        };
        timeout?: number;
        proxyAgent?: string;
    };
    applyTo?: (target: PicSourceInfo) => void;
}) => BasePicSourcePlugin & {
    config: PicSourceConfig & S;
};
export declare function PlainPicSourcePlugin<C>(dict: {
    [K in keyof C]: Schema<C[K]>;
}): {
    new (ctx: Context, config: PartialDeep<C & PicSourceConfig>): {
        http: Quester;
        config: PicSourceConfig & C;
        ctx: Context;
        tags: string[];
        weight: number;
        name: string;
        description: string;
        isDefault: boolean;
        applyConfig(src: Partial<PicSourceInfo>): void;
        randomPic(picTags: string[]): PicResult | Promise<PicResult>;
        onStartup(): void | Promise<void>;
        onShutdown(): void | Promise<void>;
        getDisplayString(): string;
    };
    Config: Schema<PartialDeep<PicSourceConfig & C>, PicSourceConfig & C>;
    using: readonly ["pics"];
    reusable: boolean;
};
