import { Dict, h, Logger } from 'koishi';
import { Player } from 'koishi-plugin-lobby';
import { WerewolfGame } from '.';
export declare const logger: Logger;
export declare const t: (path: string, param?: any) => h;
export type Weather = typeof Weather[number];
export declare const Weather: readonly ["kaisei", "kirisame", "donten", "souten", "hyou", "hanagumori", "noumu", "yuki", "tenkiame", "utoame", "fuuu", "seiran", "kawagiri", "taifuu", "nagi", "diamond-dust", "kousa", "retsujitsu", "baiu", "kyokkou"];
export type Identity = Identity.Neutral | Identity.Youkai | Identity.Ningen;
interface Party extends Array<Identity> {
    Normal: Identity[];
    Expert: Identity[];
}
export declare namespace Identity {
    const Neutral: Identity[];
    type Neutral = 'doremy' | 'parsee';
    const Youkai: Party;
    type Youkai = Youkai.Normal | Youkai.Expert;
    namespace Youkai {
        type Expert = 'yukari' | 'utsuho' | 'remilia' | 'yuuka' | 'mamizou' | 'iku';
        type Normal = 'kagerou' | 'rumia' | 'mystia' | 'wriggle' | 'wakasagihime' | 'sekibanki' | 'kyouko' | 'tewi' | 'chen' | 'nazrin' | 'kogasa';
    }
    const Ningen: Party;
    type Ningen = Ningen.Normal | Ningen.Expert;
    namespace Ningen {
        type Expert = 'reimu' | 'rinnosuke';
        type Normal = 'marisa' | 'sanae' | 'sumireko' | 'kosuzu' | 'renko' | 'merry' | 'akyuu' | 'youmu' | 'mokou';
    }
    const Expert: Identity[];
    type Expert = Neutral | Youkai.Expert | Ningen.Expert;
    type Revenger = 'reimu' | 'yuuka';
    type Winner = 'ningen' | 'youkai' | 'draw' | Neutral;
    type Killer = Revenger | Neutral | 'yukari' | 'ningen' | 'vote' | 'offline';
    type Action = Expert | 'night' | 'vote' | 'show-kill' | 'ningen' | 'chat' | 'last-words' | 'sage' | 'transfer' | 'weather';
    function getParty(identity: Identity): "ningen" | "youkai" | "neutral";
}
export type Preset = [number, number, ...[number, ...Identity.Expert[]][]];
export declare const Preset: Dict<Preset[][]>;
export interface SelectItem {
    disabled: boolean;
    labels?: h[];
}
export declare class Character {
    game: WerewolfGame;
    player: Player;
    identity: Identity;
    party: 'ningen' | 'youkai' | 'neutral';
    /** 是贤者 */
    isSage: boolean;
    /** 角色死因 */
    killer: Identity.Killer;
    /** 苍天的替死者 */
    scapegoat: Character;
    /** 目标角色 */
    target: Character;
    /** 台风 */
    taifuu: boolean;
    /** 得票数 */
    votes: number;
    /** 选定目标的时间 */
    voteTime: number;
    /** remilia 知晓阵营 */
    isKnown: boolean;
    /** 全员知晓身份 */
    isWellKnown: boolean;
    /** 无法被替死或发动复仇 */
    isScapegoat: boolean;
    /** doremy 噩梦状态 */
    nightmare: boolean;
    /** 是否出局 (含 utsuho 被投死) */
    isOut: boolean;
    constructor(game: WerewolfGame, player: Player, identity: Identity);
    /** 有特殊技能 */
    get isExpert(): boolean;
    get isRevenger(): boolean;
    get isDead(): boolean;
    get isDying(): boolean;
    /** 是否被视为人类 */
    get isNingen(): boolean;
    /** 能在投票前发言 */
    get canSpeak(): boolean;
    render(result: SelectItem): h;
    select(predicate: (character: Character) => SelectItem, timeout: number, optional: boolean): Promise<Character>;
    toString(): string;
}
export declare function rotate<T>(source: readonly T[], offset?: number): T[];
export {};
