import { Dict } from 'koishi';
import { Player } from 'koishi-plugin-lobby';
export declare const Weather: readonly ["kaisei", "donten", "souten", "hanagumori", "noumu", "tenkiame", "kawagiri", "taifuu", "nagi", "kousa", "baiu"];
export type Weather = typeof Weather[number];
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';
        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';
    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 declare class Character {
    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;
    /** mamizou 幻化状态 */
    illusion: boolean;
    /** doremy 噩梦状态 */
    nightmare: boolean;
    /** yukari 已使用救人 */
    saveUsed: boolean;
    /** yukari 已使用杀人 */
    killUsed: boolean;
    /** 是否出局 (含 utsuho 被投死) */
    isOut: boolean;
    /** 已发布遗言 */
    hasLastWords: boolean;
    constructor(player: Player, identity: Identity);
    /** 有特殊技能 */
    get isExpert(): boolean;
    get isRevenger(): boolean;
    get isDead(): boolean;
    get isDying(): boolean;
    /** 是否被视为人类 */
    get isNingen(): boolean;
    /** 能在投票前发言 */
    get canSpeak(): boolean;
}
export declare function rotate<T>(source: readonly T[], offset?: number): T[];
export {};
