import { Computed, Context, Schema, Service } from 'koishi';
import { ImageSource } from './source';
export * from './source';
declare module 'koishi' {
    interface Context {
        booru: ImageService;
    }
}
declare class ImageService extends Service {
    static inject: {
        required: any[];
        optional: string[];
    };
    private sources;
    private languageDetect;
    constructor(ctx: Context, config: Config);
    register(source: ImageSource): () => boolean;
    hasSource(name?: string): boolean;
    get(query: ImageService.Query): Promise<ImageArray>;
    resizeImageToFixedWidth(url: string, size: number): Promise<string>;
    imgUrlToAssetUrl(url: string): Promise<string>;
    imgUrlToBase64(url: string): Promise<string>;
}
declare namespace ImageService {
    interface Query {
        query: string;
        labels: string[];
        count: number;
    }
}
export declare enum OutputType {
    ImageOnly = 0,
    ImageAndInfo = 1,
    ImageAndLink = 2,
    All = 3
}
export declare enum SpoilerType {
    Disabled = 0,
    All = 1,
    OnlyNSFW = 2
}
export interface Config {
    detectLanguage: boolean;
    confidence: number;
    maxCount: number;
    output: OutputType;
    outputMethod: 'one-by-one' | 'merge-multiple' | 'forward-all' | 'forward-multiple';
    preferSize: ImageSource.PreferSize;
    autoResize: Computed<boolean>;
    nsfw: boolean;
    asset: boolean;
    base64: boolean;
    spoiler: SpoilerType;
    showTips: boolean;
}
interface ImageArray extends Array<ImageSource.Result> {
    source: string;
}
export declare const Config: Schema<Schemastery.ObjectS<{
    detectLanguage: Schema<boolean, boolean>;
}> | Schemastery.ObjectS<{
    maxCount: Schema<number, number>;
    nsfw: Schema<boolean, boolean>;
}> | Schemastery.ObjectS<{
    output: Schema<0 | 1 | 2 | 3, 0 | 1 | 2 | 3>;
    outputMethod: Schema<"one-by-one" | "merge-multiple" | "forward-all" | "forward-multiple", "one-by-one" | "merge-multiple" | "forward-all" | "forward-multiple">;
    preferSize: Schema<"original" | "large" | "medium" | "small" | "thumbnail", "original" | "large" | "medium" | "small" | "thumbnail">;
    autoResize: Schema<Computed<boolean>, Computed<boolean>>;
    asset: Schema<boolean, boolean>;
    base64: Schema<boolean, boolean>;
    spoiler: Schema<0 | 1 | 2, 0 | 1 | 2>;
    showTips: Schema<boolean, boolean>;
}>, {
    detectLanguage: boolean;
} & import("cosmokit").Dict & {
    maxCount: number;
    nsfw: boolean;
} & {
    output: 0 | 1 | 2 | 3;
    outputMethod: "one-by-one" | "merge-multiple" | "forward-all" | "forward-multiple";
    preferSize: "original" | "large" | "medium" | "small" | "thumbnail";
    autoResize: Computed<boolean>;
    asset: boolean;
    base64: boolean;
    spoiler: 0 | 1 | 2;
    showTips: boolean;
}>;
export declare function apply(ctx: Context, config: Config): void;
