import { type Api } from '../api';
import { AnswerOnCallbackExtra, BotInfo, BotStartedUpdate, Chat, ChatAdmin, EditMessageExtra, FilteredUpdate, GetMessagesExtra, Message, MessageCallbackUpdate, SenderAction, SendMessageExtra, Update, UpdateType, User } from './network/api';
import { AddChatAdminsExtra, EditChatExtra, GetAllChatsExtra, GetChatMembersExtra, GetCommentsExtra, PinMessageExtra } from './network/api/modules';
import type { Guard, Guarded, MaybeArray } from './types';
export type FilteredContext<Ctx extends Context<any>, Filter extends UpdateType | Guard<Ctx['update']>> = Filter extends UpdateType ? FilteredUpdate<Filter> extends infer U extends Update ? Ctx & Context<U> : never : Ctx & Context<Guarded<Filter>>;
type GetMessage<U extends Update> = U extends MessageCallbackUpdate ? MessageCallbackUpdate['message'] : U extends {
    message: Message;
} ? Message : undefined;
type GetChatId<U extends Update> = U extends {
    chat_id: number;
} ? number : U extends MessageCallbackUpdate ? number | null | undefined : U extends {
    message: Message;
} ? number | null : undefined;
type GetChat<U extends Update> = U extends {
    chat: Chat;
} ? Chat : undefined;
type GetMsgId<U extends Update> = U extends {
    message_id: string;
} ? string : U extends MessageCallbackUpdate ? string | undefined : U extends {
    message: Message;
} ? string : undefined;
type GetCallback<U extends Update> = U extends MessageCallbackUpdate ? MessageCallbackUpdate['callback'] : undefined;
type GetUser<U extends Update> = U extends {
    user: User;
} ? User : U extends MessageCallbackUpdate ? User : undefined;
type GetStartPayload<U extends Update> = U extends BotStartedUpdate ? string | undefined | null : undefined;
type ContactInfo = {
    tel?: string;
    fullName?: string;
};
type Location = {
    latitude: number;
    longitude: number;
};
type Sticker = {
    width: number;
    height: number;
    url: string;
    code: string;
};
export declare class Context<U extends Update = Update> {
    readonly update: U;
    readonly api: Api;
    readonly botInfo?: BotInfo | undefined;
    /** Совпадение, найденное `command`, `hears` или `action`. */
    match?: RegExpExecArray;
    /** Временные данные одного update; состояние между update хранится в session. */
    state: Record<string | symbol, unknown>;
    constructor(update: U, api: Api, botInfo?: BotInfo | undefined);
    has<Ctx extends Context, Filter extends UpdateType | Guard<Ctx['update']>>(this: Ctx, filters: MaybeArray<Filter>): this is FilteredContext<Ctx, Filter>;
    assert<T extends string | number | object>(value: T | null | undefined, method: string): asserts value is T;
    get updateType(): "bot_added" | "bot_started" | "bot_stopped" | "bot_removed" | "chat_title_changed" | "comment_created" | "comment_edited" | "comment_removed" | "dialog_cleared" | "dialog_muted" | "dialog_removed" | "dialog_unmuted" | "message_callback" | "message_created" | "message_edited" | "message_removed" | "user_added" | "user_removed";
    get myId(): number | undefined;
    get startPayload(): GetStartPayload<U>;
    get chat(): GetChat<U>;
    get chatId(): GetChatId<U>;
    get message(): GetMessage<U>;
    get messageId(): GetMsgId<U>;
    get callback(): GetCallback<U>;
    get user(): GetUser<U>;
    private _contactInfo?;
    get contactInfo(): ContactInfo | undefined;
    private _location?;
    get location(): Location | undefined;
    private _sticker?;
    get sticker(): Sticker | undefined;
    reply(text: string, extra?: SendMessageExtra): Promise<Message>;
    getAllChats(extra?: GetAllChatsExtra): Promise<import("./network/api/modules").GetAllChatsResponse>;
    getChat(chatId?: number): Promise<Chat>;
    editChatInfo(extra: EditChatExtra): Promise<Chat>;
    getMessage(id: string): Promise<Message>;
    getMessages(extra?: GetMessagesExtra): Promise<import("./network/api").GetMessagesResponse>;
    getPinnedMessage(): Promise<import("./network/api/modules").GetPinnedMessageResponse>;
    editMessage(extra: EditMessageExtra): Promise<import("./network/api").ActionResponse>;
    deleteMessage(messageId?: string): Promise<import("./network/api").ActionResponse>;
    getVideoInfo(videoToken: string): Promise<import("./network/api").GetVideoInfoResponse>;
    answerOnCallback(extra: AnswerOnCallbackExtra): Promise<import("./network/api").ActionResponse>;
    getChatMembership(): Promise<import("./network/api").ChatMember>;
    getChatAdmins(): Promise<import("./network/api/modules").GetChatAdminsResponse>;
    addChatAdmins(admins: ChatAdmin[], extra?: AddChatAdminsExtra): Promise<import("./network/api").ActionResponse>;
    removeChatAdmin(userId: number): Promise<import("./network/api").ActionResponse>;
    addChatMembers(userIds: number[]): Promise<import("./network/api/modules").AddChatMembersResponse>;
    getChatMembers(extra?: GetChatMembersExtra): Promise<import("./network/api/modules").GetChatMembersResponse>;
    removeChatMember(userId: number): Promise<import("./network/api").ActionResponse>;
    pinMessage(messageId: string, extra?: PinMessageExtra): Promise<import("./network/api").ActionResponse>;
    unpinMessage(): Promise<import("./network/api").ActionResponse>;
    sendAction(action: SenderAction): Promise<import("./network/api").ActionResponse>;
    leaveChat(): Promise<import("./network/api").ActionResponse>;
    getComments(messageId: string, extra?: GetCommentsExtra): Promise<import("./network/api/modules").GetCommentsResponse>;
    getComment(messageId: string, commentId: string): Promise<import("./network/api/modules").CommentMessage>;
    deleteComment(messageId: string, commentId: string): Promise<import("./network/api").ActionResponse>;
}
export {};
