import { Context, Bot, Fragment, Universal, Logger } from 'koishi';
import { IIROSE_BotMessageEncoder } from './sendMessage';
import { WsClient } from '../utils/ws';
import { InternalType } from './internal';
import { SendOptions } from '@satorijs/protocol';
import { SessionCache } from '../utils/sessionCache';
import { Stock } from '../decoder/messages/Stock';
import { BankCallback } from '../decoder/messages/BankCallback';
import { Config } from '../config';
export declare class IIROSE_Bot extends Bot<Context> {
    ctx: Context;
    static MessageEncoder: typeof IIROSE_BotMessageEncoder;
    platform: string;
    socket: WebSocket | undefined;
    messageIdResolvers: ((messageId: string) => void)[];
    responseQueue: {
        resolver: (data: string | null) => void;
        timer: () => void;
    }[];
    responseListeners: Map<string, {
        listener: (data: string) => void;
        stopPropagation: boolean;
    }>;
    static inject: string[];
    wsClient: WsClient;
    readonly config: Config;
    sessionCache: SessionCache;
    private isStarting;
    private isStarted;
    private disposed;
    private userInfoTimeout;
    private lastStockData;
    private lastBankData;
    logger: Logger;
    userLeaveTimers: Map<string, () => void>;
    userJoinTimers: Map<string, () => void>;
    constructor(ctx: Context, config: Config);
    loggerError(message: any, ...args: any[]): void;
    loggerInfo(message: any, ...args: any[]): void;
    loggerWarn(message: any, ...args: any[]): void;
    logInfo(message: any, ...args: any[]): void;
    fulllogInfo(message: any, ...args: any[]): void;
    setDisposing(disposing: boolean): void;
    start(): Promise<void>;
    stop(): Promise<void>;
    sendMessage(channelId: string, content: Fragment, guildId?: string, options?: SendOptions): Promise<string[]>;
    sendPrivateMessage(userId: string, content: Fragment, guildId?: string, options?: SendOptions): Promise<string[]>;
    getSelf(): Promise<Universal.User>;
    /**
     * 发送一个WebSocket请求并等待对应的响应
     * @param payload 要发送的数据
     * @param timeout 超时时间 (毫秒)
     * @returns 返回一个Promise，该Promise会解析为响应字符串，或在超时/失败时解析为null
     */
    requestResponse(payload: string, timeout?: number): Promise<string | null>;
    /**
     * 处理一个进入的响应，并将其分发到响应队列中的第一个等待者
     * @param data 响应数据
     * @returns 如果消息被处理，则返回true
     */
    handleResponse(data: string): boolean;
    /**
     * 发送一个WebSocket消息并等待一个具有特定前缀的响应
     * @param payload 要发送的数据
     * @param responsePrefix 期望的响应前缀
     * @param stopPropagation 是否在匹配到响应后停止消息的进一步传播，默认为 true
     * @param timeout 超时时间 (毫秒)
     * @returns 返回一个Promise，该Promise会解析为响应字符串，或在超时时解析为null
     */
    sendAndWaitForResponse(payload: string, responsePrefix: string, stopPropagation?: boolean, timeout?: number): Promise<string | null>;
    getUser(userId: string, guildId?: string): Promise<Universal.User>;
    getGuildMember(guildId: string, userId: string): Promise<Universal.GuildMember>;
    getGuildMemberList(guildId: string, next?: string): Promise<Universal.List<Universal.GuildMember>>;
    getGuild(guildId: string): Promise<Universal.Guild>;
    getGuildList(next?: string): Promise<Universal.List<Universal.Guild>>;
    getChannel(channelId: string): Promise<Universal.Channel>;
    getChannelList(guildId: string): Promise<Universal.List<Universal.Channel>>;
    getMessage(channelId: string, messageId: string): Promise<Universal.Message>;
    getMessageKeys(): string[];
    kickGuildMember(guildId: string, userId: string, permanent?: boolean): Promise<void>;
    muteGuildMember(guildId: string, userId: string, duration: number, reason?: string): Promise<void>;
    deleteMessage(channelId: string, messageId: string): Promise<void>;
    deleteMessage(channelId: string, messageId: string[]): Promise<void>;
    private deleteSingleMessage;
    internal: InternalType;
    handleStockUpdate(newStockData: Stock): void;
    handleBankUpdate(newBankData: BankCallback): void;
}
