import { Bot } from 'koishi';
import moment from 'moment';
interface Salt {
    salt?: string;
}
export declare class Word {
    constructor(config: Partial<Word>);
    word?: string;
    weight?: number;
    formWord(): any;
    patterns?: Pattern[];
    toEntry(): any;
}
export declare class Pattern {
    constructor(config: Partial<Pattern>);
    words: Word[];
    pickWord(): any;
}
export declare class Rule implements Salt {
    constructor(config: Partial<Rule>);
    fromTime?: string;
    toTime?: string;
    getTimeRange(): readonly [moment.Moment, moment.Moment];
    shouldSend(target: Target): boolean;
    salt?: string;
    patterns: Pattern[];
    generateText(): string;
}
export declare class Target implements Salt {
    constructor(config: Partial<Target>);
    userId?: string;
    channelId?: string;
    guildId?: string;
    getDescription(): string;
    get salt(): string;
    set salt(s: string);
    send(bot: Bot, text: string): Promise<string[]>;
}
export declare class Instance {
    constructor(config: Partial<Instance>);
    from: string;
    getBot(list: Bot[]): Bot<Bot.Config>;
    to: Target[];
    rules: Rule[];
    run(list: Bot[]): Promise<this>;
}
export declare class GreetingPluginConfig {
    constructor(config: GreetingPluginConfigLike);
    instances: Instance[];
    runInstances(list: Bot[], instances?: Instance[]): Promise<Instance[]>;
}
export type GreetingPluginConfigLike = Partial<GreetingPluginConfig>;
export {};
