/// <reference types="command-line-args" />
import 'reflect-metadata';
import { CommandLineOptions } from 'command-line-args';
import * as Discord from 'discord.js';
import { BotORMOptions, BotPlugin } from 'willow-contracts';
import { PluginExpUser, UserExp, UserLevel, UserRank } from 'willow-models';
import { Repository } from 'typeorm';
export declare const commandOptions: {
    name: string;
    alias: string;
    type: BooleanConstructor;
}[];
export declare enum CommandType {
    Quote = 0,
    Random = 1,
}
export default class PsyduckExampleOrm implements BotPlugin {
    users: Repository<PluginExpUser>;
    levels: Repository<UserLevel>;
    ranks: Repository<UserRank>;
    exps: Repository<UserExp>;
    connectionOptions: BotORMOptions;
    announceLevelUp: {
        announceChannel: string;
    } | boolean;
    minExp: number;
    maxExp: number;
    constructor(options: BotORMOptions, announceLevelUp?: {
        announceChannel: string;
    } | boolean, minExp?: number, maxExp?: number);
    /**
     * This method is to be called after instantiation to connect to the data store. This is intentional to allow for unit testing methods without requiring a connection.
     */
    connect(): void;
    buildLevels(): Promise<void>;
    /**
     * This event is emitted from Psyduck when a message is recieved in a discord channel. From there you may do as you with with it in your plugin.
     */
    onMessage(message: Discord.Message): void;
    getUser(userId: string): Promise<PluginExpUser | undefined>;
    createUser(guildId: string, serverName: string, guildAvatarUrl: string, userId: string, userName: string, avatarUrl: string): PluginExpUser;
    explainLevel(discord: Discord.Message, channelName: string): Promise<void>;
    buildExp(channel: string): UserExp;
    gainExp(discord: Discord.Message, userId: string, channel: string): Promise<void>;
    checkGainLevel(discord: Discord.Message, user: PluginExpUser): Promise<void>;
    gainLevel(discord: Discord.Message, user: PluginExpUser): Promise<void>;
    assignRole(discord: Discord.Message, userId: string, roleName: string): Promise<void>;
    parseParameters(messageContent: string): string[];
    hydrateOptions(parameters: string[]): CommandLineOptions;
    extractUserId(userId: string): string | undefined;
}
