import * as _gramio_types from '@gramio/types';
import { TelegramObjects, TelegramUpdate, TelegramInputMedia, TelegramParams, APIMethods, APIMethodParams, APIMethodReturn, TelegramResponseParameters, TelegramMessage } from '@gramio/types';

/** This object represents one size of a photo or a file / sticker thumbnail */
declare class PhotoSize {
    payload: TelegramObjects.TelegramPhotoSize;
    constructor(payload: TelegramObjects.TelegramPhotoSize);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Identifier for this file, which can be used to download or reuse the file
     */
    get fileId(): string;
    /**
     * Unique identifier for this file, which is supposed to be the same over
     * time and for different bots. Can't be used to download or reuse the file.
     */
    get fileUniqueId(): string;
    /** Photo width */
    get width(): number;
    /** Photo height */
    get height(): number;
    /** File size */
    get fileSize(): number | undefined;
}

interface Suppress<IsSuppressed extends boolean | undefined = undefined> {
    /**
     * Pass `true` if you want to suppress throwing errors of this method.
     *
     * **But this does not undo getting into the `onResponseError` hook**.
     *
     * @example
     * ```ts
     * const response = await bot.api.sendMessage({
     * 		suppress: true,
     * 		chat_id: "@not_found",
     * 		text: "Suppressed method"
     * });
     *
     * if(response instanceof TelegramError) console.error("sendMessage returns an error...")
     * else console.log("Message has been sent successfully");
     * ```
     *
     * */
    suppress?: IsSuppressed;
}
type SuppressedParams<Method extends keyof APIMethods, IsSuppressed extends boolean | undefined = undefined> = APIMethodParams<Method> & Suppress<IsSuppressed>;
interface TelegramError<T extends keyof APIMethods> extends Error {
    method: T;
    params: APIMethodParams<T>;
    code: number;
    payload?: TelegramResponseParameters;
}
type SuppressedReturn<Method extends keyof APIMethods, IsSuppressed extends boolean | undefined = undefined> = true extends IsSuppressed ? TelegramError<Method> | APIMethodReturn<Method> : APIMethodReturn<Method>;
type SuppressedAPIMethods<Methods extends keyof APIMethods = keyof APIMethods> = {
    [APIMethod in Methods]: APIMethodParams<APIMethod> extends undefined ? <IsSuppressed extends boolean | undefined = undefined>(params?: Suppress<IsSuppressed>) => Promise<SuppressedReturn<APIMethod, IsSuppressed>> : undefined extends APIMethodParams<APIMethod> ? <IsSuppressed extends boolean | undefined = undefined>(params?: SuppressedParams<APIMethod, IsSuppressed>) => Promise<SuppressedReturn<APIMethod, IsSuppressed>> : <IsSuppressed extends boolean | undefined = undefined>(params: SuppressedParams<APIMethod, IsSuppressed>) => Promise<SuppressedReturn<APIMethod, IsSuppressed>>;
};
/** The required object that the contexts are based on */
interface BotLike {
    __Derives: Record<UpdateName | "global", {}>;
    api: SuppressedAPIMethods;
    downloadFile(attachment: Attachment | {
        file_id: string;
    } | string): Promise<ArrayBuffer>;
    downloadFile(attachment: Attachment | {
        file_id: string;
    } | string, path: string): Promise<string>;
}
type GetDerives<Bot extends BotLike, Event extends keyof ContextsMapping<Bot>> = Bot["__Derives"]["global"] & Bot["__Derives"][Event];
/** Mapping events to their contexts */
type ContextsMapping<Bot extends BotLike> = {
    callback_query: CallbackQueryContext<Bot>;
    chat_join_request: ChatJoinRequestContext<Bot>;
    chat_member: ChatMemberContext<Bot>;
    my_chat_member: ChatMemberContext<Bot>;
    chosen_inline_result: ChosenInlineResultContext<Bot>;
    delete_chat_photo: DeleteChatPhotoContext<Bot>;
    group_chat_created: GroupChatCreatedContext<Bot>;
    inline_query: InlineQueryContext<Bot>;
    invoice: InvoiceContext<Bot>;
    left_chat_member: LeftChatMemberContext<Bot>;
    location: LocationContext<Bot>;
    message_auto_delete_timer_changed: MessageAutoDeleteTimerChangedContext<Bot>;
    message: MessageContext<Bot>;
    channel_post: MessageContext<Bot>;
    edited_message: MessageContext<Bot>;
    edited_channel_post: MessageContext<Bot>;
    business_message: MessageContext<Bot>;
    edited_business_message: MessageContext<Bot>;
    deleted_business_messages: BusinessMessagesDeletedContext<Bot>;
    business_connection: BusinessConnectionContext<Bot>;
    migrate_from_chat_id: MigrateFromChatIdContext<Bot>;
    migrate_to_chat_id: MigrateToChatIdContext<Bot>;
    new_chat_members: NewChatMembersContext<Bot>;
    new_chat_photo: NewChatPhotoContext<Bot>;
    new_chat_title: NewChatTitleContext<Bot>;
    passport_data: PassportDataContext<Bot>;
    pinned_message: PinnedMessageContext<Bot>;
    poll_answer: PollAnswerContext<Bot>;
    poll: PollContext<Bot>;
    pre_checkout_query: PreCheckoutQueryContext<Bot>;
    proximity_alert_triggered: ProximityAlertTriggeredContext<Bot>;
    write_access_allowed: WriteAccessAllowedContext<Bot>;
    boost_added: BoostAddedContext<Bot>;
    chat_background_set: ChatBackgroundSetContext<Bot>;
    forum_topic_created: ForumTopicCreatedContext<Bot>;
    forum_topic_edited: ForumTopicEditedContext<Bot>;
    forum_topic_closed: ForumTopicClosedContext<Bot>;
    forum_topic_reopened: ForumTopicReopenedContext<Bot>;
    general_forum_topic_hidden: GeneralForumTopicHiddenContext<Bot>;
    general_forum_topic_unhidden: GeneralForumTopicUnhiddenContext<Bot>;
    shipping_query: ShippingQueryContext<Bot>;
    successful_payment: SuccessfulPaymentContext<Bot>;
    refunded_payment: RefundedPaymentContext<Bot>;
    users_shared: UsersSharedContext<Bot>;
    chat_shared: ChatSharedContext<Bot>;
    video_chat_ended: VideoChatEndedContext<Bot>;
    video_chat_participants_invited: VideoChatParticipantsInvitedContext<Bot>;
    video_chat_scheduled: VideoChatScheduledContext<Bot>;
    video_chat_started: VideoChatStartedContext<Bot>;
    web_app_data: WebAppDataContext<Bot>;
    service_message: MessageContext<Bot>;
    message_reaction: MessageReactionContext<Bot>;
    message_reaction_count: MessageReactionCountContext<Bot>;
    chat_boost: ChatBoostContext<Bot>;
    removed_chat_boost: RemovedChatBoostContext<Bot>;
    giveaway_created: GiveawayCreatedContext<Bot>;
    giveaway_completed: GiveawayCompletedContext<Bot>;
    giveaway_winners: GiveawayWinnersContext<Bot>;
    purchased_paid_media: PaidMediaPurchasedContext<Bot>;
};
/**
 * Type util to get type of Context
 *
 * @example
 * ```ts
 * type Message = ContextType<Bot, "message">;
 * ```
 *
 *  */
type ContextType<Bot extends BotLike, Name extends keyof ContextsMapping<Bot>> = InstanceType<ContextsMapping<Bot>[Name]> & GetDerives<Bot, Name>;
/** Union type of MessageEvent names */
type MessageEventName = "new_chat_members" | "left_chat_member" | "new_chat_title" | "new_chat_photo" | "delete_chat_photo" | "group_chat_created" | "message_auto_delete_timer_changed" | "migrate_to_chat_id" | "migrate_from_chat_id" | "pinned_message" | "invoice" | "successful_payment" | "refunded_payment" | "users_shared" | "chat_shared" | "proximity_alert_triggered" | "write_access_allowed" | "forum_topic_created" | "forum_topic_edited" | "forum_topic_closed" | "forum_topic_reopened" | "general_forum_topic_hidden" | "general_forum_topic_unhidden" | "video_chat_scheduled" | "video_chat_started" | "video_chat_ended" | "video_chat_participants_invited" | "web_app_data" | "location" | "passport_data" | "giveaway_created" | "giveaway_completed" | "giveaway_winners" | "boost_added" | "chat_background_set";
/** Custom Event Name */
type CustomEventName = "service_message";
/** Union type of Update names */
type UpdateName = Exclude<keyof TelegramUpdate, "update_id"> | MessageEventName | CustomEventName;
/** Type helper to join union type */
type JoinUnion<T> = T extends infer U ? U extends any ? // biome-ignore lint/suspicious/noExplicitAny: <explanation>
Record<string, any> & U : never : never;
/** Type helper to add array and non-array type */
type MaybeArray<T> = T | T[];
/** Union type of attachments type */
type AttachmentType = TelegramInputMedia["type"] | "sticker" | "video_note" | "voice" | "contact" | "poll" | "venue" | "location" | "story";
/** Permits `string` but gives hints */
type SoftString<S extends string> = (string & {}) | S;
/** Like `Required<T>` but for specified keys of `T` */
type Require<O, K extends keyof O> = {
    [P in K]-?: NonNullable<O[P]>;
};
/** Type helper constructor */
type Constructor<T = {}> = new (...args: any[]) => T;
/** Like `Require<O, K>` but it sets `V` as the value for `K` values */
type RequireValue<O, K extends keyof O, V> = Omit<O, K> & {
    [P in K]-?: V;
};
/** Make some keys optional */
type Optional<T, K extends keyof T> = /** We pick every field but `K` and leave them as is */ Pick<T, Exclude<keyof T, K>> /** Then, we take our `K` fields and mark them as optional */ & {
    [P in K]?: T[P];
} /** Lastly, we add `[key: string]: any;` */ /** Lastly, we add `[key: string]: any;` */ & {};
/** Type util to make chat_id optional and add type property */
type id<T, I extends {
    chat_id: string | number;
}> = {
    type: T;
} & Optional<I, "chat_id">;
/** This type represent SendAnimationParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendAnimation = id<"animation", TelegramParams.SendAnimationParams>;
/** This type represent SendAudioParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendAudio = id<"audio", TelegramParams.SendAudioParams>;
/** This type represent SendDocumentParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendDocument = id<"document", TelegramParams.SendDocumentParams>;
/** This type represent SendPhotoParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendPhoto = id<"photo", TelegramParams.SendPhotoParams>;
/** This type represent SendStickerParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendSticker = id<"sticker", TelegramParams.SendStickerParams>;
/** This type represent SendVideoParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendVideo = id<"video", TelegramParams.SendVideoParams>;
/** This type represent SendVideoNoteParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendVideoNote = id<"video_note", TelegramParams.SendVideoNoteParams>;
/** This type represent SendVoiceParams and used by {@link Contexts.MessageContext.sendMedia} */
type tSendVoice = id<"voice", TelegramParams.SendVoiceParams>;
/** This Union type represent a media that can be sended and used by {@link Contexts.MessageContext.sendMedia} */
type tSendMethods = tSendAnimation | tSendAudio | tSendDocument | tSendPhoto | tSendSticker | tSendVideo | tSendVideoNote | tSendVoice;
/** Enum of ChatType property */
declare enum ChatType {
    Private = "private",
    Group = "group",
    Supergroup = "supergroup",
    Channel = "channel"
}
/** Enum of PollType property */
declare enum PollType {
    Regular = "regular",
    Quiz = "quiz"
}
/** Mapping attachments type to their structures */
interface AttachmentsMapping {
    animation: AnimationAttachment;
    audio: AudioAttachment;
    contact: ContactAttachment;
    document: DocumentAttachment;
    location: LocationAttachment;
    photo: PhotoAttachment;
    poll: PollAttachment;
    sticker: StickerAttachment;
    story: StoryAttachment;
    venue: VenueAttachment;
    video_note: VideoNoteAttachment;
    video: VideoAttachment;
    voice: VoiceAttachment;
}
/** Enum of EntityType property */
declare enum EntityType {
    Mention = "mention",
    Hashtag = "hashtag",
    Cashtag = "cashtag",
    BotCommand = "bot_command",
    Url = "url",
    Email = "email",
    PhoneNumber = "phone_number",
    Bold = "bold",
    Italic = "italic",
    Underline = "underline",
    Strikethrough = "strikethrough",
    Code = "code",
    Pre = "pre",
    TextLink = "text_link",
    TextMention = "text_mention"
}

/** Simple attachment */
declare class Attachment {
    attachmentType?: AttachmentType;
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/** Base interface for attachment */
interface DefaultAttachment {
    file_id: string;
    file_unique_id: string;
}
/** Attachment with `fileId` and `fileUniqueId` properties */
declare class FileAttachment<T extends DefaultAttachment = DefaultAttachment> extends Attachment {
    protected payload: T;
    /** Returns attachment's type (e.g. `'audio'`, `'photo'`) */
    attachmentType?: AttachmentType;
    constructor(payload: T);
    /** Identifier for this file, which can be used to download or reuse the file */
    get fileId(): string;
    /**
     * Unique identifier for this file, which is supposed to be the same over
     * time and for different bots. Can't be used to download or reuse the file.
     */
    get fileUniqueId(): string;
}

/**
 * This object represents an animation file
 * (GIF or H.264/MPEG-4 AVC video without sound).
 */
declare class AnimationAttachment extends FileAttachment<TelegramObjects.TelegramAnimation> {
    attachmentType: AttachmentType;
    /** Video width as defined by sender */
    get width(): number;
    /** Video height as defined by sender */
    get height(): number;
    /** Duration of the video in seconds as defined by sender */
    get duration(): number;
    /** Animation thumbnail as defined by sender */
    get thumbnail(): PhotoSize | undefined;
    /** Original animation filename as defined by sender */
    get fileName(): string | undefined;
    /** MIME type of the file as defined by sender */
    get mimeType(): string | undefined;
    /** File size */
    get fileSize(): number | undefined;
}

/**
 * This object represents an audio file to be treated as music by the Telegram
 * clients.
 */
declare class AudioAttachment extends FileAttachment<TelegramObjects.TelegramAudio> {
    attachmentType: AttachmentType;
    /** Duration of the audio in seconds as defined by sender */
    get duration(): number;
    /** Performer of the audio as defined by sender or by audio tags */
    get performer(): string | undefined;
    /** Title of the audio as defined by sender or by audio tags */
    get title(): string | undefined;
    /** Original filename as defined by sender */
    get fileName(): string | undefined;
    /** MIME type of the file as defined by sender */
    get mimeType(): string | undefined;
    /** File size */
    get fileSize(): number | undefined;
    /** Thumbnail of the album cover to which the music file belongs */
    get thumbnail(): PhotoSize | undefined;
}

/** This object represents a phone contact. */
declare class Contact {
    payload: TelegramObjects.TelegramContact;
    constructor(payload: TelegramObjects.TelegramContact);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Contact's phone number */
    get phoneNumber(): string;
    /** Contact's first name */
    get firstName(): string;
    /** Contact's last name */
    get lastName(): string | undefined;
    /** Contact's user identifier in Telegram */
    get userId(): number | undefined;
    /** Additional data about the contact in the form of a vCard */
    get vCard(): string | undefined;
}

/** This object represents a phone contact. */
declare class ContactAttachment extends Contact {
    attachmentType: AttachmentType;
}
interface ContactAttachment extends Attachment {
}

/**
 * This object represents a general file (as opposed to photos, voice messages
 * and audio files).
 */
declare class DocumentAttachment extends FileAttachment<TelegramObjects.TelegramDocument> {
    attachmentType: AttachmentType;
    /** Document thumbnail as defined by sender */
    get thumbnail(): PhotoSize | undefined;
    /** Original filename as defined by sender */
    get fileName(): string | undefined;
    /** MIME type of the file as defined by sender */
    get mimeType(): string | undefined;
    /** File size */
    get fileSize(): number | undefined;
}

/** This object represents a point on the map. */
declare class Location {
    payload: TelegramObjects.TelegramLocation;
    constructor(payload: TelegramObjects.TelegramLocation);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Longitude as defined by sender */
    get longitude(): number;
    /** Latitude as defined by sender */
    get latitude(): number;
    /** The radius of uncertainty for the location, measured in meters; `0-1500` */
    get horizontalAccuracy(): number | undefined;
    /**
     * Time relative to the message sending date,
     * during which the location can be updated, in seconds.
     * For active live locations only.
     */
    get livePeriod(): number | undefined;
    /**
     * The direction in which user is moving, in degrees; `1-360`.
     * For active live locations only.
     */
    get heading(): number | undefined;
    /**
     * Maximum distance for proximity alerts about approaching another chat member, in meters.
     * For sent live locations only.
     */
    get proximityAlertRadius(): number | undefined;
}

/** This object represents a point on the map. */
declare class LocationAttachment extends Location {
    attachmentType: AttachmentType;
}
interface LocationAttachment extends Attachment {
}

/** This object represents a photo file with it's sizes */
declare class PhotoAttachment extends Attachment {
    private payload;
    private readonly sorted;
    attachmentType: AttachmentType;
    constructor(payload: PhotoSize[]);
    /** Photo sizes */
    get sizes(): PhotoSize[];
    /** Biggest size of the photo */
    get bigSize(): PhotoSize;
    /** Medium size of the photo */
    get mediumSize(): PhotoSize;
    /** Smallest size of the photo */
    get smallSize(): PhotoSize;
}

/** This object represents a Telegram user or bot. */
declare class User {
    payload: TelegramObjects.TelegramUser;
    constructor(payload: TelegramObjects.TelegramUser);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier for this user or bot */
    get id(): number;
    /** `true`, if this user is a bot */
    isBot(): boolean;
    /** User's or bot's first name */
    get firstName(): string;
    /** User's or bot's last name */
    get lastName(): string | undefined;
    /** User's or bot's username */
    get username(): string | undefined;
    /**
     * [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag)
     * of the user's language
     */
    get languageCode(): string | undefined;
    /** `true`, if this user is a Telegram Premium user */
    isPremium(): true | undefined;
    /** `true`, if this user added the bot to the attachment menu */
    get addedToAttachmentMenu(): true | undefined;
    /**
     * `true`, if the bot can be invited to groups.
     *
     * Returned only in `getMe`.
     */
    canJoinGroups(): boolean | undefined;
    /**
     * `true`, if privacy mode is disabled for the bot.
     *
     * Returned only in `getMe`.
     */
    canReadAllGroupMessages(): boolean | undefined;
    /**
     * `true`, if the bot supports inline queries.
     *
     * Returned only in `getMe`.
     */
    supportsInlineQueries(): boolean | undefined;
    /**
     * `true`, if the bot can be connected to a Telegram Business account to receive its messages.
     *
     * Returned only in `getMe`.
     */
    canConnectToBusiness(): boolean | undefined;
}

/**
 * This object represents one special entity in a text message.
 * For example, hashtags, usernames, URLs, etc.
 */
declare class MessageEntity {
    payload: TelegramObjects.TelegramMessageEntity;
    constructor(payload: TelegramObjects.TelegramMessageEntity);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the entity.
     *
     * Can be `mention` (`@username`), `hashtag` (`#hashtag`), `cashtag`
     * (`$USD`), `bot_command` (`/start@jobs_bot`), `url`
     * (`https://telegram.org`), `email` (`do-not-reply@telegram.org`),
     * `phone_number` (`+1-212-555-0123`), `bold` (**bold text**), `italic`
     * (_italic text_), `underline` (underlined text), `strikethrough`
     * (~~strikethrough text~~), “spoiler” (spoiler message), `code` (`monowidth string`),
     * `pre` (`monowidth block`), `text_link` (for clickable text URLs), `text_mention`
     * (for users without usernames)
     */
    get type(): TelegramObjects.TelegramMessageEntityType;
    /** Offset in UTF-16 code units to the start of the entity */
    get offset(): number;
    /** Length of the entity in UTF-16 code units */
    get length(): number;
    /**
     * For `text_link` only, url that will be opened after user taps on the text
     */
    get url(): string | undefined;
    /** For `text_mention` only, the mentioned user */
    get user(): User | undefined;
    /** For `pre` only, the programming language of the entity text */
    get language(): string | undefined;
    /**
     * For `custom_emoji` only, unique identifier of the custom emoji.
     *
     * Use `getCustomEmojiStickers` to get full information about the sticker
     */
    get customEmojiId(): string | undefined;
}

/**
 * This object contains information about one answer option in a poll.
 *
 * [Documentation](https://core.telegram.org/bots/api/#polloption)
 */
declare class PollOption {
    payload: TelegramObjects.TelegramPollOption;
    constructor(payload: TelegramObjects.TelegramPollOption);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Option text, 1-100 characters
     */
    get text(): string;
    /**
     * *Optional*. Special entities that appear in the option *text*. Currently, only custom emoji entities are allowed in poll option texts
     */
    get textEntities(): MessageEntity[] | undefined;
    /**
     * Number of users that voted for this option
     */
    get voterCount(): number;
}

/** This object contains information about a poll. */
declare class Poll {
    payload: TelegramObjects.TelegramPoll;
    constructor(payload: TelegramObjects.TelegramPoll);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique poll identifier */
    get id(): string;
    /** Poll question, `1-300` characters */
    get question(): string;
    /**
     * *Optional*. Special entities that appear in the *question*. Currently, only custom emoji entities are allowed in poll questions
     */
    get questionEntities(): MessageEntity[] | undefined;
    /** List of poll options */
    get options(): PollOption[];
    /** Total number of users that voted in the poll */
    get totalVoterCount(): number;
    /** `true`, if the poll is closed */
    isClosed(): boolean;
    /** `true`, if the poll is anonymous */
    isAnonymous(): boolean;
    /** Poll type, currently can be `regular` or `quiz` */
    get type(): TelegramObjects.TelegramPollType;
    /** `true`, if the poll allows multiple answers */
    get allowsMultipleAnswers(): boolean;
    /**
     * 0-based identifier of the correct answer option. Available only for polls
     * in the quiz mode, which are closed, or was sent (not forwarded) by the bot
     * or to the private chat with the bot.
     */
    get correctOptionId(): number | undefined;
    /**
     * Text that is shown when a user chooses an incorrect answer or taps on the
     * lamp icon in a quiz-style poll, 0-200 characters
     */
    get explanation(): string | undefined;
    /**
     * Special entities like usernames, URLs, bot commands, etc. that appear in
     * the explanation
     */
    get explanationEntities(): MessageEntity[] | undefined;
    /** Amount of time in seconds the poll will be active after creation */
    get openPeriod(): number | undefined;
    /**
     * Point in time (Unix timestamp) when the poll will be automatically closed
     */
    get closeDate(): number | undefined;
}

/** This object contains information about a poll. */
declare class PollAttachment extends Poll {
    attachmentType: AttachmentType;
}
interface PollAttachment extends Attachment {
}

/** This object represents a file ready to be downloaded. The file can be downloaded via the link `https://api.telegram.org/file/bot<token>/<file_path>`. It is guaranteed that the link will be valid for at least 1 hour. When the link expires, a new one can be requested by calling `getFile`. */
declare class File {
    payload: TelegramObjects.TelegramFile;
    constructor(payload: TelegramObjects.TelegramFile);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Identifier for this file, which can be used to download or reuse the file
     */
    get fileId(): string;
    /**
     * Unique identifier for this file, which is supposed to be the same over
     * time and for different bots. Can't be used to download or reuse the file.
     */
    get fileUniqueId(): string;
    /** File size, if known */
    get fileSize(): number | undefined;
    /**
     * File path.
     * Use `https://api.telegram.org/file/bot<token>/<file_path>` to get the
     * file.
     */
    get filePath(): string | undefined;
}

/**
 * This object describes the position on faces where a mask should be placed
 * by default.
 */
declare class MaskPosition {
    payload: TelegramObjects.TelegramMaskPosition;
    constructor(payload: TelegramObjects.TelegramMaskPosition);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * The part of the face relative to which the mask should be placed.
     * One of `forehead`, `eyes`, `mouth`, or `chin`.
     */
    get point(): TelegramObjects.TelegramMaskPositionPoint;
    /**
     * Shift by X-axis measured in widths of the mask scaled to the face size,
     * from left to right. For example, choosing `-1.0` will place mask just to
     * the left of the default mask position.
     */
    get xShift(): number;
    /**
     * Shift by Y-axis measured in heights of the mask scaled to the face size,
     * from top to bottom. For example, `1.0` will place the mask just below the
     * default mask position.
     */
    get yShift(): number;
    /** Mask scaling coefficient. For example, `2.0` means double size. */
    get scale(): number;
}

/** This object represents a sticker. */
declare class StickerAttachment extends FileAttachment<TelegramObjects.TelegramSticker> {
    attachmentType: AttachmentType;
    /**
     * Type of the sticker, currently one of `regular`, `mask`, `custom_emoji`.
     *
     * The type of the sticker is independent from its format, which is determined by the fields `is_animated` and `is_video`.
     */
    get type(): TelegramObjects.TelegramStickerType;
    /** Sticker width */
    get width(): number;
    /** Sticker height */
    get height(): number;
    /** `true`, if the sticker is animated */
    isAnimated(): boolean;
    /** `true`, if the sticker is a video sticker */
    isVideo(): boolean;
    /** Sticker thumbnail in the .WEBP or .JPG format */
    get thumbnail(): PhotoSize | undefined;
    /** Emoji associated with the sticker */
    get emoji(): string | undefined;
    /** Name of the sticker set to which the sticker belongs */
    get setName(): string | undefined;
    /** Is this sticker a premium one? */
    isPremium(): this is Require<this, "premiumAnimation">;
    /** Premium animation for the sticker, if the sticker is premium */
    get premiumAnimation(): File | undefined;
    /** For mask stickers, the position where the mask should be placed */
    get maskPosition(): MaskPosition | undefined;
    /** For custom emoji stickers, unique identifier of the custom emoji */
    get customEmojiId(): string | undefined;
    /** `true`, if the sticker must be repainted to a text color in messages, the color of the Telegram Premium badge in emoji status, white color on chat photos, or another appropriate color in other places */
    get needs_repainting(): true | undefined;
    /** File size */
    get fileSize(): number | undefined;
}

/**
 * This object represents a chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chat)
 */
declare class Chat {
    payload: TelegramObjects.TelegramChat;
    constructor(payload: TelegramObjects.TelegramChat);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Unique identifier for this chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this identifier.
     */
    get id(): number;
    /**
     * Type of the chat, can be either “private”, “group”, “supergroup” or “channel”
     */
    get type(): TelegramObjects.TelegramChatType;
    /**
     * *Optional*. Title, for supergroups, channels and group chats
     */
    get title(): string | undefined;
    /**
     * *Optional*. Username, for private chats, supergroups and channels if available
     */
    get username(): string | undefined;
    /**
     * *Optional*. First name of the other party in a private chat
     */
    get firstName(): string | undefined;
    /**
     * *Optional*. Last name of the other party in a private chat
     */
    get lastName(): string | undefined;
    /**
     * *Optional*. *True*, if the supergroup chat is a forum (has [topics](https://telegram.org/blog/topics-in-groups-collectible-usernames#topics-in-groups) enabled)
     */
    get isForum(): boolean | undefined;
}

/**
 * This object represents a story.
 *
 * [Documentation](https://core.telegram.org/bots/api/#story)
 */
declare class Story {
    payload: TelegramObjects.TelegramStory;
    constructor(payload: TelegramObjects.TelegramStory);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier for the story in the chat */
    get id(): number;
    /** Chat that posted the story */
    get chat(): Chat;
}

/**
 * This object represents a story.
 *
 * [Documentation](https://core.telegram.org/bots/api/#story)
 */
declare class StoryAttachment extends Story {
    attachmentType: AttachmentType;
}
interface StoryAttachment extends Attachment {
}

/** This object represents a venue. */
declare class Venue {
    payload: TelegramObjects.TelegramVenue;
    constructor(payload: TelegramObjects.TelegramVenue);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Venue location */
    get location(): Location;
    /** Name of the venue */
    get title(): string;
    /** Address of the venue */
    get address(): string;
    /** Foursquare identifier of the venue */
    get foursquareId(): string | undefined;
    /** Foursquare type of the venue */
    get foursquareType(): string | undefined;
    /** Google Places identifier of the venue */
    get googlePlaceId(): string | undefined;
    /**
     * Google Places type of the venue.
     * (See [supported types](https://developers.google.com/places/web-service/supported_types).)
     */
    get googlePlaceType(): string | undefined;
}

/**
 * This object represents a venue.
 *
 * [Documentation](https://core.telegram.org/bots/api/#venue)
 */
declare class VenueAttachment extends Venue {
    attachmentType: AttachmentType;
}
interface VenueAttachment extends Attachment {
}

/** This object represents a video message. */
declare class VideoNoteAttachment extends FileAttachment<TelegramObjects.TelegramVideoNote> {
    attachmentType: AttachmentType;
    /**
     * Video width and height (diameter of the video message) as defined by
     * sender
     */
    get length(): number;
    /** Duration of the video in seconds as defined by sender */
    get duration(): number;
    /** Video thumbnail */
    get thumbnail(): PhotoSize | undefined;
    /** File size */
    get fileSize(): number | undefined;
}

/** This object represents a video file. */
declare class VideoAttachment extends FileAttachment<TelegramObjects.TelegramVideo> {
    attachmentType: AttachmentType;
    /** Video width as defined by sender */
    get width(): number;
    /** Video height as defined by sender */
    get height(): number;
    /** Duration of the video in seconds as defined by sender */
    get duration(): number;
    /** Video thumbnail */
    get thumbnail(): PhotoSize | undefined;
    /** Original filename as defined by sender */
    get fileName(): string | undefined;
    /** Mime type of a file as defined by sender */
    get mimeType(): string | undefined;
    /** File size */
    get fileSize(): number | undefined;
    /** Video cover */
    get cover(): PhotoSize[] | undefined;
    /** Start timestamp */
    get startTimestamp(): number | undefined;
}

/** This object represents a voice note. */
declare class VoiceAttachment extends FileAttachment<TelegramObjects.TelegramVoice> {
    attachmentType: AttachmentType;
    /** Duration of the audio in seconds as defined by sender */
    get duration(): number;
    /** MIME type of the file as defined by sender */
    get mimeType(): string | undefined;
    /** File size */
    get fileSize(): number | undefined;
}

/**
 * The background is a freeform gradient that rotates after every message in the chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundfillfreeformgradient)
 */
declare class BackgroundFillFreeformGradient {
    payload: TelegramObjects.TelegramBackgroundFillFreeformGradient;
    constructor(payload: TelegramObjects.TelegramBackgroundFillFreeformGradient);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background fill, always “freeform\_gradient”
     */
    get type(): "freeform_gradient";
    /**
     * A list of the 3 or 4 base colors that are used to generate the freeform gradient in the RGB24 format
     */
    get colors(): number[];
}

/**
 * The background is a gradient fill.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundfillgradient)
 */
declare class BackgroundFillGradient {
    payload: TelegramObjects.TelegramBackgroundFillGradient;
    constructor(payload: TelegramObjects.TelegramBackgroundFillGradient);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background fill, always “gradient”
     */
    get type(): "gradient";
    /**
     * Top color of the gradient in the RGB24 format
     */
    get topColor(): number;
    /**
     * Bottom color of the gradient in the RGB24 format
     */
    get bottomColor(): number;
    /**
     * Clockwise rotation angle of the background fill in degrees; 0-359
     */
    get rotationAngle(): number;
}

/**
 * The background is filled using the selected color.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundfillsolid)
 */
declare class BackgroundFillSolid {
    payload: TelegramObjects.TelegramBackgroundFillSolid;
    constructor(payload: TelegramObjects.TelegramBackgroundFillSolid);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background fill, always “solid”
     */
    get type(): "solid";
    /**
     * The color of the background fill in the RGB24 format
     */
    get color(): number;
}

/**
 * This object describes the way a background is filled based on the selected colors. Currently, it can be one of
 *
 * * [BackgroundFillSolid](https://core.telegram.org/bots/api/#backgroundfillsolid)
 * * [BackgroundFillGradient](https://core.telegram.org/bots/api/#backgroundfillgradient)
 * * [BackgroundFillFreeformGradient](https://core.telegram.org/bots/api/#backgroundfillfreeformgradient)
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundfill)
 */
declare const backgroundFillMap: {
    solid: typeof BackgroundFillSolid;
    gradient: typeof BackgroundFillGradient;
    freeform_gradient: typeof BackgroundFillFreeformGradient;
};

/**
 * The background is taken directly from a built-in chat theme.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundtypechattheme)
 */
declare class BackgroundTypeChatTheme {
    payload: TelegramObjects.TelegramBackgroundTypeChatTheme;
    constructor(payload: TelegramObjects.TelegramBackgroundTypeChatTheme);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background, always “chat\_theme”
     */
    get type(): "chat_theme";
    /**
     * Name of the chat theme, which is usually an emoji
     */
    get themeName(): string;
}

/**
 * The background is automatically filled based on the selected colors.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundtypefill)
 */
declare class BackgroundTypeFill {
    payload: TelegramObjects.TelegramBackgroundTypeFill;
    constructor(payload: TelegramObjects.TelegramBackgroundTypeFill);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background, always “fill”
     */
    get type(): "fill";
    /**
     * The background fill
     */
    get fill(): (typeof backgroundFillMap)[keyof typeof backgroundFillMap];
    /**
     * Dimming of the background in dark themes, as a percentage; 0-100
     */
    get darkThemeDimming(): number;
}

/**
 * The background is a PNG or TGV (gzipped subset of SVG with MIME type “application/x-tgwallpattern”) pattern to be combined with the background fill chosen by the user.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundtypepattern)
 */
declare class BackgroundTypePattern {
    payload: TelegramObjects.TelegramBackgroundTypePattern;
    constructor(payload: TelegramObjects.TelegramBackgroundTypePattern);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background, always “pattern”
     */
    get type(): "pattern";
    /**
     * Document with the pattern
     */
    get document(): DocumentAttachment;
    /**
     * The background fill that is combined with the pattern
     */
    get fill(): (typeof backgroundFillMap)[keyof typeof backgroundFillMap];
    /**
     * Intensity of the pattern when it is shown above the filled background; 0-100
     */
    get intensity(): number;
    /**
     * *Optional*. *True*, if the background fill must be applied only to the pattern itself. All other pixels are black in this case. For dark themes only
     */
    get isInverted(): boolean | undefined;
    /**
     * *Optional*. *True*, if the background moves slightly when the device is tilted
     */
    get isMoving(): boolean | undefined;
}

/**
 * The background is a wallpaper in the JPEG format.
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundtypewallpaper)
 */
declare class BackgroundTypeWallpaper {
    payload: TelegramObjects.TelegramBackgroundTypeWallpaper;
    constructor(payload: TelegramObjects.TelegramBackgroundTypeWallpaper);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background, always “wallpaper”
     */
    get type(): "wallpaper";
    /**
     * Document with the wallpaper
     */
    get document(): DocumentAttachment;
    /**
     * Dimming of the background in dark themes, as a percentage; 0-100
     */
    get darkThemeDimming(): number;
    /**
     * *Optional*. *True*, if the wallpaper is downscaled to fit in a 450x450 square and then box-blurred with radius 12
     */
    get isBlurred(): boolean | undefined;
    /**
     * *Optional*. *True*, if the background moves slightly when the device is tilted
     */
    get isMoving(): boolean | undefined;
}

/**
 * This object describes the type of a background. Currently, it can be one of
 *
 * * [BackgroundTypeFill](https://core.telegram.org/bots/api/#backgroundtypefill)
 * * [BackgroundTypeWallpaper](https://core.telegram.org/bots/api/#backgroundtypewallpaper)
 * * [BackgroundTypePattern](https://core.telegram.org/bots/api/#backgroundtypepattern)
 * * [BackgroundTypeChatTheme](https://core.telegram.org/bots/api/#backgroundtypechattheme)
 *
 * [Documentation](https://core.telegram.org/bots/api/#backgroundtype)
 */
declare const backgroundTypeMap: {
    fill: typeof BackgroundTypeFill;
    wallpaper: typeof BackgroundTypeWallpaper;
    pattern: typeof BackgroundTypePattern;
    chat_theme: typeof BackgroundTypeChatTheme;
};

/**
 * Describes the birthdate of a user.
 *
 * [Documentation](https://core.telegram.org/bots/api/#birthdate)
 */
declare class Birthdate {
    payload: TelegramObjects.TelegramBirthdate;
    constructor(payload: TelegramObjects.TelegramBirthdate);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Day of the user's birth; 1-31
     */
    get day(): number;
    /**
     * Month of the user's birth; 1-12
     */
    get month(): number;
    /**
     * *Optional*. Year of the user's birth
     */
    get year(): number | undefined;
}

/** This object represents a bot command */
declare class BotCommand {
    payload: TelegramObjects.TelegramBotCommand;
    constructor(payload: TelegramObjects.TelegramBotCommand);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Text of the command; 1-32 characters. Can contain only lowercase English letters, digits and underscores. */
    get command(): string;
    /** Description of the command; 1-256 characters */
    get description(): string;
}

/** This object represents the bot's description. */
declare class BotDescription {
    payload: TelegramObjects.TelegramBotDescription;
    constructor(payload: TelegramObjects.TelegramBotDescription);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The bot's description */
    get description(): string;
}

/** This object represents the bot's short description. */
declare class BotShortDescription {
    payload: TelegramObjects.TelegramBotShortDescription;
    constructor(payload: TelegramObjects.TelegramBotShortDescription);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The bot's short description */
    get description(): string;
}

/**
 * Describes the connection of the bot with a business account.
 *
 * [Documentation](https://core.telegram.org/bots/api/#businessconnection)
 */
declare class BusinessConnection {
    payload: TelegramObjects.TelegramBusinessConnection;
    constructor(payload: TelegramObjects.TelegramBusinessConnection);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Unique identifier of the business connection
     */
    get id(): string;
    /**
     * Business account user that created the business connection
     */
    get user(): User;
    /**
     * Identifier of a private chat with the user who created the business connection. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier.
     */
    get userChatId(): number;
    /**
     * Date the connection was established in Unix time
     */
    get date(): number;
    /**
     * True, if the bot can act on behalf of the business account in chats that were active in the last 24 hours
     */
    get canReply(): boolean;
    /**
     * True, if the connection is active
     */
    get isEnabled(): boolean;
}

/**
 * Contains information about the start page settings of a Telegram Business account.
 *
 * [Documentation](https://core.telegram.org/bots/api/#businessintro)
 */
declare class BusinessIntro {
    payload: TelegramObjects.TelegramBusinessIntro;
    constructor(payload: TelegramObjects.TelegramBusinessIntro);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * *Optional*. Title text of the business intro
     */
    get title(): string | undefined;
    /**
     * *Optional*. Message text of the business intro
     */
    get message(): string | undefined;
    /**
     * *Optional*. Sticker of the business intro
     */
    get sticker(): StickerAttachment | undefined;
}

/**
 * Contains information about the location of a Telegram Business account.
 *
 * [Documentation](https://core.telegram.org/bots/api/#businesslocation)
 */
declare class BusinessLocation {
    payload: TelegramObjects.TelegramBusinessLocation;
    constructor(payload: TelegramObjects.TelegramBusinessLocation);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Address of the business
     */
    get address(): string;
    /**
     * *Optional*. Location of the business
     */
    get location(): Location | undefined;
}

/** Describes the connection of the bot with a business account. */
declare class BusinessMessagesDeleted {
    payload: TelegramObjects.TelegramBusinessMessagesDeleted;
    constructor(payload: TelegramObjects.TelegramBusinessMessagesDeleted);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier of the business connection */
    get businessConnectionId(): string;
    /** Information about a chat in the business account. The bot may not have access to the chat or the corresponding user. */
    get chat(): Chat;
    /** A list of identifiers of deleted messages in the chat of the business account */
    get messageIds(): number[];
}

/**
 * Describes an interval of time during which a business is open.
 *
 * [Documentation](https://core.telegram.org/bots/api/#businessopeninghoursinterval)
 */
declare class BusinessOpeningHoursInterval {
    payload: TelegramObjects.TelegramBusinessOpeningHoursInterval;
    constructor(payload: TelegramObjects.TelegramBusinessOpeningHoursInterval);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * The minute's sequence number in a week, starting on Monday, marking the start of the time interval during which the business is open; 0 - 7 \* 24 \* 60
     */
    get openingMinute(): number;
    /**
     * The minute's sequence number in a week, starting on Monday, marking the end of the time interval during which the business is open; 0 - 8 \* 24 \* 60
     */
    get closingMinute(): number;
}

/**
 * [Documentation](https://core.telegram.org/bots/api/#businessopeninghours)
 */
declare class BusinessOpeningHours {
    payload: TelegramObjects.TelegramBusinessOpeningHours;
    constructor(payload: TelegramObjects.TelegramBusinessOpeningHours);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique name of the time zone for which the opening hours are defined */
    get timeZoneName(): string;
    /** List of time intervals describing business opening hours */
    get openingHours(): TelegramObjects.TelegramBusinessOpeningHoursInterval[];
}

/** A placeholder, currently holds no information. */
declare class CallbackGame {
    payload: TelegramObjects.TelegramCallbackGame;
    constructor(payload: TelegramObjects.TelegramCallbackGame);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/**
 * This object describes a message that was deleted or is otherwise inaccessible to the bot.
 *
 * [Documentation](https://core.telegram.org/bots/api/#inaccessiblemessage)
 */
declare class InaccessibleMessage {
    payload: TelegramObjects.TelegramInaccessibleMessage;
    constructor(payload: TelegramObjects.TelegramInaccessibleMessage);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique message identifier inside the chat */
    get id(): number;
    /** Chat the message belonged to */
    get chat(): Chat;
    /** Always `0`. The field can be used to differentiate regular and inaccessible messages. */
    get date(): number;
}

/** This object contains information about the chat whose identifier was shared with the bot using a KeyboardButtonRequestChat button. */
declare class ChatShared {
    payload: TelegramObjects.TelegramChatShared;
    constructor(payload: TelegramObjects.TelegramChatShared);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Identifier of the request */
    get requestId(): number;
    /** Identifier of the shared chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the chat and could be unable to use this identifier, unless the chat is already known to the bot by some other means. */
    get chatId(): number;
    /** Title of the chat, if the title was requested by the bot. */
    get title(): string | undefined;
    /** Username of the chat, if the username was requested by the bot and available. */
    get username(): string | undefined;
    /** Available sizes of the chat photo, if the photo was requested by the bot. */
    get photo(): PhotoSize[] | undefined;
}

/** This object represents an animated emoji that displays a random value. */
declare class Dice {
    payload: TelegramObjects.TelegramDice;
    constructor(payload: TelegramObjects.TelegramDice);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Emoji on which the dice throw animation is based */
    get emoji(): NonNullable<TelegramParams.SendDiceEmoji | undefined>;
    /**
     * Value of the dice,
     * `1-6` for `🎲`, `🎯` and `🎳` base emoji,
     * `1-5` for `🏀` and `⚽️` base emoji,
     * `1-64` for `🎰` base emoji
     */
    get value(): number;
}

/** This object represents a game. */
declare class Game {
    payload: TelegramObjects.TelegramGame;
    constructor(payload: TelegramObjects.TelegramGame);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Title of the game */
    get title(): string;
    /** Description of the game */
    get description(): string;
    /** Photo that will be displayed in the game message in chats. */
    get photo(): PhotoSize[] | undefined;
    /**
     * Brief description of the game or high scores included in the game message
     * Can be automatically edited to include current high scores for the game
     * when the bot calls `setGameScore`, or manually edited using
     * `editMessageText`. 0-4096 characters.
     */
    get text(): string | undefined;
    /**
     * Special entities that appear in text, such as usernames, URLs, bot
     * commands, etc.
     */
    get textEntities(): MessageEntity[] | undefined;
    /**
     * Animation that will be displayed in the game message in chats.
     * Upload via BotFather
     */
    get animation(): AnimationAttachment | undefined;
}

/** This object represents a message about a scheduled giveaway. */
declare class Giveaway {
    payload: TelegramObjects.TelegramGiveaway;
    constructor(payload: TelegramObjects.TelegramGiveaway);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The list of chats which the user must join to participate in the giveaway */
    get chats(): Chat[];
    /** Point in time (Unix timestamp) when winners of the giveaway will be selected */
    get winnersSelectionDate(): number;
    /** The number of users which are supposed to be selected as winners of the giveaway */
    get winnerCount(): number;
    /** `true`, if only users who join the chats after the giveaway started should be eligible to win */
    get onlyNewMembers(): boolean | undefined;
    /** `true`, if the list of giveaway winners will be visible to everyone */
    hasPublicWinners(): boolean | undefined;
    /** Description of additional giveaway prize */
    get prizeDescription(): string | undefined;
    /** A list of two-letter ISO 3166-1 alpha-2 country codes indicating the countries from which eligible users for the giveaway must come. If empty, then all users can participate in the giveaway. Users with a phone number that was bought on Fragment can always participate in giveaways. */
    get countryCodes(): string[] | undefined;
    /** The number of months the Telegram Premium subscription won from the giveaway will be active for */
    get premiumSubscriptionMonthCount(): number | undefined;
    /** The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only */
    get prizeStarCount(): number | undefined;
}

/** This object represents a message about the completion of a giveaway with public winners. */
declare class GiveawayWinners {
    payload: TelegramObjects.TelegramGiveawayWinners;
    constructor(payload: TelegramObjects.TelegramGiveawayWinners);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The chat that created the giveaway */
    get chat(): Chat;
    /** Identifier of the message with the giveaway in the chat */
    get messageId(): number;
    /** Point in time (Unix timestamp) when winners of the giveaway were selected */
    get winnersSelectionDate(): number;
    /** Total number of winners in the giveaway */
    get winnerCount(): number;
    /** List of up to 100 winners of the giveaway */
    get winners(): User[];
    /** The number of other chats the user had to join in order to be eligible for the giveaway */
    get additionalChatCount(): number | undefined;
    /** The number of months the Telegram Premium subscription won from the giveaway will be active for */
    get premiumSubscriptionMonthCount(): number | undefined;
    /** Number of undistributed prizes */
    get unclaimedPrizeCount(): number | undefined;
    /** `true`, if only users who had joined the chats after the giveaway started were eligible to win */
    get onlyNewMembers(): boolean | undefined;
    /** `true`, if the giveaway was canceled because the payment for it was refunded */
    wasRefunded(): boolean | undefined;
    /** Description of additional giveaway prize */
    get prizeDescription(): string | undefined;
    /** The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only */
    get prizeStarCount(): number | undefined;
}

/** This object contains basic information about an invoice. */
declare class Invoice {
    payload: TelegramObjects.TelegramInvoice;
    constructor(payload: TelegramObjects.TelegramInvoice);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Product name */
    get title(): string;
    /** Product description */
    get description(): string;
    /**
     * Unique bot deep-linking parameter that can be used to generate this
     * invoice
     */
    get startParameter(): string;
    /** Three-letter ISO 4217 currency code */
    get currency(): TelegramObjects.TelegramCurrencies;
    /**
     * Total price in the smallest units of the currency
     * (integer, not float/double). For example, for a price of
     * `US$ 1.45` pass `amount = 145`. See the `exp` parameter in
     * [currencies.json](https://core.telegram.org/bots/payments/currencies.json),
     * it shows the number of digits past the decimal point for each currency
     * (2 for the majority of currencies).
     */
    get totalAmount(): number;
}

/** Describes the options used for link preview generation. */
declare class LinkPreviewOptions {
    payload: TelegramObjects.TelegramLinkPreviewOptions;
    constructor(payload: TelegramObjects.TelegramLinkPreviewOptions);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** `true`, if the link preview is disabled */
    isDisabled(): boolean | undefined;
    /** URL to use for the link preview. If empty, then the first URL found in the message text will be used */
    get url(): string | undefined;
    /** `true`, if the media in the link preview is supposed to be shrunk; ignored if the URL isn't explicitly specified or media size change isn't supported for the preview */
    preferSmallMedia(): boolean | undefined;
    /** `true`, if the media in the link preview is supposed to be enlarged; ignored if the URL isn't explicitly specified or media size change isn't supported for the preview */
    preferLargeMedia(): boolean | undefined;
    /** `true`, if the link preview must be shown above the message text; otherwise, the link preview will be shown below the message text */
    showAboveText(): boolean | undefined;
}

/** The message was originally sent on behalf of a chat to a group chat. */
declare class MessageOriginChat extends MessageOrigin {
    payload: TelegramObjects.TelegramMessageOriginChat;
    constructor(payload: TelegramObjects.TelegramMessageOriginChat);
    /** Type of the message origin, always `chat` */
    get type(): "chat";
    /** Date the message was sent originally in Unix time */
    get date(): number;
    /** Chat that sent the message originally */
    get senderChat(): Chat;
    /** For messages originally sent by an anonymous chat administrator, original message author signature */
    get authorSignature(): string | undefined;
}

/** The message was originally sent by an unknown user. */
declare class MessageOriginHiddenUser extends MessageOrigin {
    payload: TelegramObjects.TelegramMessageOriginHiddenUser;
    constructor(payload: TelegramObjects.TelegramMessageOriginHiddenUser);
    /** Type of the message origin, always `hidden_user` */
    get type(): "hidden_user";
    /** Date the message was sent originally in Unix time */
    get date(): number;
    /** Name of the user that sent the message originally */
    get senderUserName(): string;
}

/** The message was originally sent by a known user. */
declare class MessageOriginUser extends MessageOrigin {
    payload: TelegramObjects.TelegramMessageOriginUser;
    constructor(payload: TelegramObjects.TelegramMessageOriginUser);
    /** Type of the message origin, always `user` */
    get type(): "user";
    /** Date the message was sent originally in Unix time */
    get date(): number;
    /** User that sent the message originally */
    get senderUser(): User;
}

interface MessageOriginMapping {
    user: MessageOriginUser;
    chat: MessageOriginChat;
    channel: MessageOriginChannel;
    hidden_user: MessageOriginHiddenUser;
}
declare class MessageOrigin {
    payload: TelegramObjects.TelegramMessageOrigin;
    constructor(payload: TelegramObjects.TelegramMessageOrigin);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Is this message origin a certain one?  */
    is<T extends TelegramObjects.TelegramMessageOrigin["type"]>(type: T): this is MessageOriginMapping[T];
}

/** The message was originally sent to a channel chat. */
declare class MessageOriginChannel extends MessageOrigin {
    payload: TelegramObjects.TelegramMessageOriginChannel;
    constructor(payload: TelegramObjects.TelegramMessageOriginChannel);
    /** Type of the message origin, always `channel` */
    get type(): "channel";
    /** Date the message was sent originally in Unix time */
    get date(): number;
    /** Channel chat to which the message was originally sent */
    get chat(): Chat;
    /** Unique message identifier inside the chat */
    get messageId(): number;
    /** Signature of the original post author */
    get authorSignature(): string | undefined;
}

/**
 * The paid media is a video.
 *
 * [Documentation](https://core.telegram.org/bots/api/#paidmediavideo)
 */
declare class PaidMediaVideo {
    payload: TelegramObjects.TelegramPaidMediaVideo;
    constructor(payload: TelegramObjects.TelegramPaidMediaVideo);
    get [Symbol.toStringTag](): string;
    /**
     * Type of the paid media, always “video”
     */
    get type(): "video";
    /**
     * The video
     */
    get video(): VideoAttachment;
}

/**
 * The paid media isn't available before the payment.
 *
 * [Documentation](https://core.telegram.org/bots/api/#paidmediapreview)
 */
declare class PaidMediaPreview {
    payload: TelegramObjects.TelegramPaidMediaPreview;
    constructor(payload: TelegramObjects.TelegramPaidMediaPreview);
    get [Symbol.toStringTag](): string;
    /**
     * Type of the paid media, always “preview”
     */
    get type(): "preview";
    /**
     * *Optional*. Media width as defined by the sender
     */
    get width(): number | undefined;
    /**
     * *Optional*. Media height as defined by the sender
     */
    get height(): number | undefined;
    /**
     * *Optional*. Duration of the media in seconds as defined by the sender
     */
    get duration(): number | undefined;
}

/**
 * The paid media is a photo.
 *
 * [Documentation](https://core.telegram.org/bots/api/#paidmediaphoto)
 */
declare class PaidMediaPhoto {
    payload: TelegramObjects.TelegramPaidMediaPhoto;
    constructor(payload: TelegramObjects.TelegramPaidMediaPhoto);
    get [Symbol.toStringTag](): string;
    /**
     * Type of the paid media, always “photo”
     */
    get type(): "photo";
    /**
     * The photo
     */
    get photo(): PhotoAttachment | undefined;
}

/**
 * Describes the paid media added to a message.
 *
 * [Documentation](https://core.telegram.org/bots/api/#paidmediainfo)
 */
declare class PaidMediaInfo {
    payload: TelegramObjects.TelegramPaidMediaInfo;
    constructor(payload: TelegramObjects.TelegramPaidMediaInfo);
    get [Symbol.toStringTag](): string;
    /**
     * The number of Telegram Stars that must be paid to buy access to the media
     */
    get starCount(): number;
    /**
     * Information about the paid media
     */
    get paidMedia(): (PaidMediaPhoto | PaidMediaPreview | PaidMediaVideo)[];
}

/** This object contains information about a message that is being replied to, which may come from another chat or forum topic. */
declare class ExternalReplyInfo {
    payload: TelegramObjects.TelegramExternalReplyInfo;
    constructor(payload: TelegramObjects.TelegramExternalReplyInfo);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Origin of the message replied to by the given message */
    get origin(): MessageOriginUser | MessageOriginChat | MessageOriginChannel | MessageOriginHiddenUser;
    /** Chat the original message belongs to. Available only if the chat is a supergroup or a channel. */
    get chat(): Chat | undefined;
    /** Unique message identifier inside the original chat. Available only if the original chat is a supergroup or a channel. */
    get messageId(): number | undefined;
    /** Options used for link preview generation for the original message, if it is a text message */
    get linkPreviewOptions(): LinkPreviewOptions | undefined;
    /** Message is an animation, information about the animation */
    get animation(): AnimationAttachment | undefined;
    /** Message is an audio file, information about the file */
    get audio(): AudioAttachment | undefined;
    /** Message is a general file, information about the file */
    get document(): DocumentAttachment | undefined;
    /** Message is a photo, available sizes of the photo */
    get photo(): PhotoAttachment | undefined;
    /** Message is a sticker, information about the sticker */
    get sticker(): StickerAttachment | undefined;
    /** Message is a forwarded story */
    get story(): StoryAttachment | undefined;
    /** Message is a video, information about the video */
    get video(): VideoAttachment | undefined;
    /** Message is a video note, information about the video message */
    get videoNote(): VideoNoteAttachment | undefined;
    /** Message is a voice message, information about the file */
    get voice(): VoiceAttachment | undefined;
    /** `true`, if the message media is covered by a spoiler animation */
    hasMediaSpoiler(): boolean | undefined;
    /** Message is a shared contact, information about the contact */
    get contact(): ContactAttachment | undefined;
    /** Message is a dice with random value */
    get dice(): Dice | undefined;
    /** Message is a game, information about the game */
    get game(): Game | undefined;
    /** Message is a scheduled giveaway, information about the giveaway */
    get giveaway(): Giveaway | undefined;
    /** A giveaway with public winners was completed */
    get giveawayWinners(): GiveawayWinners | undefined;
    /** Message is an invoice for a payment, information about the invoice */
    get invoice(): Invoice | undefined;
    /** Message is a shared location, information about the location */
    get location(): Location | undefined;
    /** Message is a native poll, information about the poll */
    get poll(): Poll | undefined;
    /** Message is a venue, information about the venue */
    get venue(): Venue | undefined;
    get paidMedia(): PaidMediaInfo | undefined;
}

/** This object represents a service message about a forum topic closed in the chat. Currently holds no information. */
declare class ForumTopicClosed {
    payload: TelegramObjects.TelegramForumTopicClosed;
    constructor(payload: TelegramObjects.TelegramForumTopicClosed);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/** This object represents a service message about a new forum topic created in the chat. */
declare class ForumTopicCreated {
    payload: TelegramObjects.TelegramForumTopicCreated;
    constructor(payload: TelegramObjects.TelegramForumTopicCreated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Name of the topic */
    get name(): string;
    /** Color of the topic icon in RGB format */
    get iconColor(): number;
    /** Unique identifier of the custom emoji shown as the topic icon */
    get iconCustomEmojiId(): string | undefined;
}

/** This object represents a service message about an edited forum topic. */
declare class ForumTopicEdited {
    payload: TelegramObjects.TelegramForumTopicEdited;
    constructor(payload: TelegramObjects.TelegramForumTopicEdited);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** New name of the topic, if it was edited */
    get name(): string | undefined;
    /** New identifier of the custom emoji shown as the topic icon, if it was edited; an empty string if the icon was removed */
    get iconCustomEmojiId(): string | undefined;
}

/** This object represents a service message about an edited forum topic. */
declare class ForumTopicReopened {
    payload: TelegramObjects.TelegramForumTopicReopened;
    constructor(payload: TelegramObjects.TelegramForumTopicReopened);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/** This object represents a service message about General forum topic hidden in the chat. Currently holds no information. */
declare class GeneralForumTopicHidden {
    payload: TelegramObjects.TelegramGeneralForumTopicHidden;
    constructor(payload: TelegramObjects.TelegramGeneralForumTopicHidden);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/** This object represents a service message about General forum topic unhidden in the chat. Currently holds no information. */
declare class GeneralForumTopicUnhidden {
    payload: TelegramObjects.TelegramGeneralForumTopicUnhidden;
    constructor(payload: TelegramObjects.TelegramGeneralForumTopicUnhidden);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/**
 * This object represents a parameter of the inline keyboard button used to
 * automatically authorize a user.
 */
declare class LoginUrl {
    payload: TelegramObjects.TelegramLoginUrl;
    constructor(payload: TelegramObjects.TelegramLoginUrl);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * An HTTP URL to be opened with user authorization data added to the query
     * string when the button is pressed. If the user refuses to provid
     * authorization data, the original URL without information about the user
     * will be opened. The data added is the same as described in Receiving
     * authorization data.
     *
     * **NOTE**: You **must** always check the hash of the received data to
     * verify the authentication and the integrity of the data as described in
     * Checking authorization.
     */
    get url(): string;
    /** New text of the button in forwarded messages. */
    get forwardText(): string | undefined;
    /**
     * Username of a bot, which will be used for user authorization.
     * See Setting up a bot for more details. If not specified, the current
     * bot's username will be assumed. The url's domain must be the same as the
     * domain linked with the bot. See Linking your domain to the bot for more
     * details.
     */
    get botUsername(): string | undefined;
    /**
     * Pass `true` to request the permission for your bot to send messages to the
     * user.
     */
    get requestWriteAccess(): boolean | undefined;
}

/** This object represents one button of an inline keyboard. You must use exactly one of the optional fields. */
declare class InlineKeyboardButton {
    payload: TelegramObjects.TelegramInlineKeyboardButton;
    constructor(payload: TelegramObjects.TelegramInlineKeyboardButton);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Label text on the button */
    get text(): string;
    /** HTTP or tg:// url to be opened when button is pressed */
    get url(): string | undefined;
    /**
     * An HTTP URL used to automatically authorize the user.
     * Can be used as a replacement for the Telegram Login Widget.
     */
    get loginUrl(): LoginUrl | undefined;
    /**
     * Data to be sent in a callback query to the bot when button is pressed,
     * 1-64 bytes
     */
    get callbackData(): string | undefined;
    /**
     * If set, pressing the button will prompt the user to select one of their
     * chats, open that chat and insert the bot's username and the specified
     * inline query in the input field. Can be empty, in which case just the
     * bot's username will be inserted.
     *
     * **Note**: This offers an easy way for users to start using your bot in
     * inline mode when they are currently in a private chat with it. Especially
     * useful when combined with `switch_pm…` actions – in this case the user will
     * be automatically returned to the chat they switched from, skipping the
     * chat selection screen.
     */
    get switchInlineQuery(): string | undefined;
    /**
     * If set, pressing the button will insert the bot's username and the
     * specified inline query in the current chat's input field. Can be empty, in
     * which case only the bot's username will be inserted.
     *
     * This offers a quick way for the user to open your bot in inline mode in
     * the same chat – good for selecting something from multiple options.
     */
    get switchInlineQueryCurrentChat(): string | undefined;
    /**
     * Description of the game that will be launched when the user presses the
     * button.
     *
     * **NOTE**: This type of button **must** always be the first button in the
     * first row.
     */
    get callbackGame(): CallbackGame | undefined;
    /**
     * Specify `true`, to send a Pay button.
     *
     * **NOTE**: This type of button **must** always be the first button in the first row.
     */
    get pay(): boolean | undefined;
}

/** This object represents an inline keyboard that appears right next to the message it belongs to. */
declare class InlineKeyboardMarkup {
    payload: TelegramObjects.TelegramInlineKeyboardMarkup;
    constructor(payload: TelegramObjects.TelegramInlineKeyboardMarkup);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Array of button rows */
    get inlineKeyboard(): InlineKeyboardButton[][];
}

/** This object represents a service message about a change in auto-delete timer settings */
declare class MessageAutoDeleteTimerChanged {
    payload: TelegramObjects.TelegramMessageAutoDeleteTimerChanged;
    constructor(payload: TelegramObjects.TelegramMessageAutoDeleteTimerChanged);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** New auto-delete time for messages in the chat */
    get messageAutoDeleteTime(): number;
}

/**
 * Contains data required for decrypting and authenticatin
 * `EncryptedPassportElement`. See the Telegram Passport Documentation for a
 * complete description of the data decryption and authentication processes.
 */
declare class EncryptedCredentials {
    payload: TelegramObjects.TelegramEncryptedCredentials;
    constructor(payload: TelegramObjects.TelegramEncryptedCredentials);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Base64-encoded encrypted JSON-serialized data with unique user's payload,
     * data hashes and secrets required for `EncryptedPassportElement` decryption
     * and authentication
     */
    get data(): string;
    /** Base64-encoded data hash for data authentication */
    get hash(): string;
    /**
     * Base64-encoded secret, encrypted with the bot's public RSA key, required
     * for data decryption
     */
    get secret(): string;
}

/**
 * This object represents a file uploaded to Telegram Passport.
 * Currently all Telegram Passport files are in JPEG format when decrypted and
 * don't exceed 10MB.
 */
declare class PassportFile {
    payload: TelegramObjects.TelegramPassportFile;
    constructor(payload: TelegramObjects.TelegramPassportFile);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Identifier for this file, which can be used to download or reuse the file
     */
    get fileId(): string;
    /**
     * Unique identifier for this file, which is supposed to be the same over
     * time and for different bots. Can't be used to download or reuse the file.
     */
    get fileUniqueId(): string;
    /** File size */
    get fileSize(): number;
    /** Unix time when the file was uploaded */
    get fileDate(): number;
}

/**
 * Contains information about documents or other Telegram Passport elements
 * shared with the bot by the user.
 */
declare class EncryptedPassportElement {
    payload: TelegramObjects.TelegramEncryptedPassportElement;
    constructor(payload: TelegramObjects.TelegramEncryptedPassportElement);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Element type. One of `personal_details`, `passport`, `driver_license`,
     * `identity_card`, `internal_passport`, `address`, `utility_bill`,
     * `bank_statement`, `rental_agreement`, `passport_registration`,
     * `temporary_registration`, `phone_number`, `email`.
     */
    get type(): TelegramObjects.TelegramEncryptedPassportElementType;
    /**
     * Base64-encoded encrypted Telegram Passport element data provided by th
     * user, available for `personal_details`, `passport`, `driver_license`,
     * `identity_card`, `internal_passport` and `address` types.
     * Can be decrypted and verified using the accompanying
     * `EncryptedCredentials`.
     */
    get data(): string | undefined;
    /** User's verified phone number, available only for `phone_number` type */
    get phoneNumber(): string | undefined;
    /** User's verified email address, available only for `email` type */
    get email(): string | undefined;
    /**
     * Array of encrypted files with documents provided by the user, available
     * for `utility_bill`, `bank_statement`, `rental_agreement`,
     * `passport_registration` and `temporary_registration` types. Files can be
     * decrypted and verified using the accompanying `EncryptedCredentials`.
     */
    get files(): PassportFile[] | undefined;
    /**
     * Encrypted file with the front side of the document, provided by the user.
     * Available for `passport`, `driver_license`, `identity_card` and
     * `internal_passport`. The file can be decrypted and verified using the
     * accompanying `EncryptedCredentials`.
     */
    get frontSide(): PassportFile | undefined;
    /**
     * Encrypted file with the reverse side of the document, provided by the
     * user. Available for `driver_license` and `identity_card`. The file can be
     * decrypted and verified using the accompanying `EncryptedCredentials`.
     */
    get reverseSide(): PassportFile | undefined;
    /**
     * Encrypted file with the selfie of the user holding a document, provided by
     * the user; available for `passport`, `driver_license`, `identity_card` and
     * `internal_passport`. The file can be decrypted and verified using the
     * accompanying `EncryptedCredentials`.
     */
    get selfie(): PassportFile | undefined;
    /**
     * Array of encrypted files with translated versions of documents provided by
     * the user. Available if requested for `passport`, `driver_license`,
     * `identity_card`, `internal_passport`, `utility_bill`, `bank_statement`,
     * `rental_agreement`, `passport_registration` and `temporary_registration`
     * types. Files can be decrypted and verified using the accompanying
     * `EncryptedCredentials`.
     */
    get translation(): PassportFile[] | undefined;
    /**
     * Base64-encoded element hash for using in `PassportElementErrorUnspecified`
     */
    get hash(): string;
}

/**
 * Contains information about Telegram Passport data shared with the bot by the
 * user.
 */
declare class PassportData {
    payload: TelegramObjects.TelegramPassportData;
    constructor(payload: TelegramObjects.TelegramPassportData);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Array with information about documents and other Telegram Passport
     * elements that was shared with the bot
     */
    get data(): EncryptedPassportElement[] | undefined;
    /** Encrypted credentials required to decrypt the data */
    get credentials(): EncryptedCredentials;
}

/**
 * This object represents the content of a service message,
 * sent whenever a user in the chat triggers a proximity alert set by another user.
 */
declare class ProximityAlertTriggered {
    payload: TelegramObjects.TelegramProximityAlertTriggered;
    constructor(payload: TelegramObjects.TelegramProximityAlertTriggered);
    /** User that triggered the alert */
    get traveler(): User;
    /** User that set the alert */
    get watcher(): User;
    /** The distance between the users */
    get distance(): number;
}

/** This object represents a shipping address. */
declare class ShippingAddress {
    payload: TelegramObjects.TelegramShippingAddress;
    constructor(payload: TelegramObjects.TelegramShippingAddress);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** ISO 3166-1 alpha-2 country code */
    get countryCode(): string;
    /** State, if applicable */
    get state(): string;
    /** City */
    get city(): string;
    /** First line for the address */
    get firstStreetLine(): string;
    /** Second line for the address */
    get secondStreetLine(): string;
    /** Address post code */
    get postCode(): string;
}

/** This object represents information about an order. */
declare class OrderInfo {
    payload: TelegramObjects.TelegramOrderInfo;
    constructor(payload: TelegramObjects.TelegramOrderInfo);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** User name */
    get name(): string | undefined;
    /** User's phone number */
    get phoneNumber(): string | undefined;
    /** User email */
    get email(): string | undefined;
    /** User shipping address */
    get shippingAddress(): ShippingAddress | undefined;
}

/** This object contains basic information about a successful payment. */
declare class SuccessfulPayment {
    payload: TelegramObjects.TelegramSuccessfulPayment;
    constructor(payload: TelegramObjects.TelegramSuccessfulPayment);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Three-letter ISO 4217 currency code */
    get currency(): TelegramObjects.TelegramCurrencies;
    /**
     * Total price in the smallest units of the currency
     * (integer, not float/double). For example, for a price of
     * `US$ 1.45` pass `amount = 145`. See the `exp` parameter in
     * [currencies.json](https://core.telegram.org/bots/payments/currencies.json),
     * it shows the number of digits past the decimal point for each currency
     * (2 for the majority of currencies).
     */
    get totalAmount(): number;
    /** Bot specified invoice payload */
    get invoicePayload(): string;
    /** Identifier of the shipping option chosen by the user */
    get shippingOptionId(): string | undefined;
    /** Order info provided by the user */
    get orderInfo(): OrderInfo | undefined;
    /** Telegram payment identifier */
    get telegramPaymentChargeId(): string;
    /** Provider payment identifier */
    get providerPaymentChargeId(): string;
}

/** This object contains information about the quoted part of a message that is replied to by the given message. */
declare class TextQuote {
    payload: TelegramObjects.TelegramTextQuote;
    constructor(payload: TelegramObjects.TelegramTextQuote);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Text of the quoted part of a message that is replied to by the given message */
    get text(): string;
    /** Special entities that appear in the quote. Currently, only `bold`, `italic`, `underline`, `strikethrough`, `spoiler`, and `custom_emoji` entities are kept in quotes. */
    get entities(): MessageEntity[] | undefined;
    /** Approximate quote position in the original message in UTF-16 code units as specified by the sender */
    get position(): number;
    /** `true`, if the quote was chosen manually by the message sender. Otherwise, the quote was added automatically by the server. */
    isManual(): boolean | undefined;
}

/** This object contains information about the user whose identifier was shared with the bot using a `KeyboardButtonRequestUser` button. */
declare class SharedUser {
    payload: TelegramObjects.TelegramSharedUser;
    constructor(payload: TelegramObjects.TelegramSharedUser);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Identifier of the shared user. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so 64-bit integers or double-precision float types are safe for storing these identifiers. The bot may not have access to the user and could be unable to use this identifier, unless the user is already known to the bot by some other means. */
    get userId(): number;
    /** First name of the user, if the name was requested by the bot */
    get firstName(): string | undefined;
    /** Last name of the user, if the name was requested by the bot */
    get lastName(): string | undefined;
    /** Username of the user, if the username was requested by the bot */
    get username(): string | undefined;
    /** Available sizes of the chat photo, if the photo was requested by the bot */
    get photo(): PhotoSize[] | undefined;
}

/** This object contains information about the user whose identifier was shared with the bot using a `KeyboardButtonRequestUser` button. */
declare class UsersShared {
    payload: TelegramObjects.TelegramUsersShared;
    constructor(payload: TelegramObjects.TelegramUsersShared);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Identifier of the request */
    get requestId(): number;
    /** Information about users shared with the bot. */
    get users(): SharedUser[];
}

/** This object represents a service message about a video chat ended in the chat. */
declare class VideoChatEnded {
    payload: TelegramObjects.TelegramVideoChatEnded;
    constructor(payload: TelegramObjects.TelegramVideoChatEnded);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Video chat duration; in seconds */
    get duration(): number;
}

/** This object represents a service message about new members invited to a video chat. */
declare class VideoChatParticipantsInvited {
    payload: TelegramObjects.TelegramVideoChatParticipantsInvited;
    constructor(payload: TelegramObjects.TelegramVideoChatParticipantsInvited);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** New members that were invited to the video chat */
    get users(): User[];
}

/**
 * This object represents a service message about a video chat scheduled in the chat
 */
declare class VideoChatScheduled {
    payload: TelegramObjects.TelegramVideoChatScheduled;
    constructor(payload: TelegramObjects.TelegramVideoChatScheduled);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Point in time (Unix timestamp) when the video chat is supposed to be started by a chat administrator */
    get startDate(): number;
}

/**
 * This object represents a service message about a video chat started in the chat.
 * Currently holds no information.
 */
declare class VideoChatStarted {
    payload: TelegramObjects.TelegramVideoChatStarted;
    constructor(payload: TelegramObjects.TelegramVideoChatStarted);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}

/** Contains data sent from a Web App to the bot. */
declare class WebAppData {
    payload: TelegramObjects.TelegramWebAppData;
    constructor(payload: TelegramObjects.TelegramWebAppData);
    /** The data. Be aware that a bad client can send arbitrary data in this field. */
    get data(): string;
    /**
     * Text of the `web_app` keyboard button, from which the Web App was opened.
     * Be aware that a bad client can send arbitrary data in this field.
     */
    get buttonText(): string;
}

/** This object represents a service message about a user allowing a bot added to the attachment menu to write messages. Currently holds no information. */
declare class WriteAccessAllowed {
    payload: TelegramObjects.TelegramWriteAccessAllowed;
    constructor(payload: TelegramObjects.TelegramWriteAccessAllowed);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** `true`, if the access was granted after the user accepted an explicit request from a Web App sent by the method requestWriteAccess */
    get fromRequest(): boolean | undefined;
    /** Name of the Web App which was launched from a link */
    get webAppName(): string | undefined;
    /** `true`, if the access was granted when the bot was added to the attachment or side menu */
    get fromAttachmentMenu(): string | undefined;
}

/**
 * This object represents a chat background.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatbackground)
 */
declare class ChatBackground {
    payload: TelegramObjects.TelegramChatBackground;
    constructor(payload: TelegramObjects.TelegramChatBackground);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the background
     */
    get type(): TelegramObjects.TelegramBackgroundType;
}

/** This object represents a service message about a user boosting a chat. */
declare class ChatBoostAdded {
    payload: TelegramObjects.TelegramChatBoostAdded;
    constructor(payload: TelegramObjects.TelegramChatBoostAdded);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Number of boosts added by the user */
    get boostCount(): number;
}

/** This object represents a service message about the completion of a giveaway without public winners. */
declare class GiveawayCompleted {
    payload: TelegramObjects.TelegramGiveawayCompleted;
    constructor(payload: TelegramObjects.TelegramGiveawayCompleted);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Number of winners in the giveaway */
    get winnerCount(): number;
    /** Number of undistributed prizes */
    get unclaimedPrizeCount(): number | undefined;
    /** Message with the giveaway that was completed, if it wasn't deleted */
    get message(): Message | undefined;
    /** *True*, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway. */
    get isStarGiveaway(): boolean | undefined;
}

/** This object represents a service message about the creation of a scheduled giveaway. Currently holds no information. */
declare class GiveawayCreated {
    payload: TelegramObjects.TelegramGiveawayCreated;
    constructor(payload: TelegramObjects.TelegramGiveawayCreated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only */
    get prizeStarCount(): number | undefined;
}

/** This object represents a message. */
declare class Message {
    payload: TelegramObjects.TelegramMessage;
    constructor(payload: TelegramObjects.TelegramMessage);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique message identifier inside this chat */
    get id(): number;
    /** Unique identifier of a message thread to which the message belongs; for supergroups only */
    get threadId(): number | undefined;
    /** Sender, empty for messages sent to channels */
    get from(): User | undefined;
    /**
     * Sender of the message, sent on behalf of a chat.
     * The channel itself for channel messages.
     * The supergroup itself for messages from anonymous group administrators.
     * The linked channel for messages automatically forwarded to the discussion group
     */
    get senderChat(): Chat | undefined;
    /** If the sender of the message boosted the chat, the number of boosts added by the user */
    get senderBoostCount(): number | undefined;
    /** The bot that actually sent the message on behalf of the business account. Available only for outgoing messages sent on behalf of the connected business account. */
    get senderBusinessBot(): User | undefined;
    /** Date the message was sent in Unix time */
    get createdAt(): number;
    /** Unique identifier of the business connection from which the message was received. If non-empty, the message belongs to a chat of the corresponding business account that is independent from any potential bot chat which might share the same identifier. */
    get businessConnectionId(): string | undefined;
    /** Conversation the message belongs to */
    get chat(): Chat;
    /** Information about the original message for forwarded messages */
    get forwardOrigin(): MessageOriginUser | MessageOriginChat | MessageOriginChannel | MessageOriginHiddenUser | undefined;
    /** `true`, if the message is sent to a forum topic */
    isTopicMessage(): boolean | undefined;
    /** `true`, if the message is a channel post that was automatically forwarded to the connected discussion group */
    isAutomaticForward(): boolean | undefined;
    /** For replies, the original message */
    get replyMessage(): Omit<Message, "replyMessage"> | undefined;
    /**  For replies to a story, the original story */
    get replyStory(): Story | undefined;
    /** Information about the message that is being replied to, which may come from another chat or forum topic */
    get externalReply(): ExternalReplyInfo | undefined;
    /** For replies that quote part of the original message, the quoted part of the message */
    get quote(): TextQuote | undefined;
    /** Bot through which the message was sent */
    get viaBot(): User | undefined;
    /** Date the message was last edited in Unix time */
    get updatedAt(): number | undefined;
    /** `true`, if the message can't be forwarded */
    hasProtectedContent(): true | undefined;
    /** `true`, True, if the message was sent by an implicit action, for example, as an away or a greeting business message, or as a scheduled message */
    isFromOffline(): true | undefined;
    /** The unique identifier of a media message group this message belongs to */
    get mediaGroupId(): string | undefined;
    /**
     * Signature of the post author for messages in channels,
     * or the custom title of an anonymous group administrator
     */
    get authorSignature(): string | undefined;
    /**
     * For text messages, the actual UTF-8 text of the message, 0-4096 characters
     */
    get text(): string | undefined;
    /**
     * For text messages, special entities like usernames, URLs, bot commands,
     * etc. that appear in the text
     */
    get entities(): MessageEntity[] | undefined;
    /** Options used for link preview generation for the message, if it is a text message and link preview options were changed */
    get linkPreviewOptions(): LinkPreviewOptions | undefined;
    /** Unique identifier of the message effect added to the message */
    get effectId(): string | undefined;
    /**
     * Message is an animation, information about the animation. For backward
     * compatibility, when this field is set, the `document` field will also be set
     */
    get animation(): AnimationAttachment | undefined;
    /** Message is an audio file, information about the file */
    get audio(): AudioAttachment | undefined;
    /** Message is a general file, information about the file */
    get document(): DocumentAttachment | undefined;
    /** Message is a photo, available sizes of the photo */
    get photo(): PhotoSize[] | undefined;
    /** Message is a sticker, information about the sticker */
    get sticker(): StickerAttachment | undefined;
    /** Message is a forwarded story */
    get story(): StoryAttachment | undefined;
    /** Message is a video, information about the video */
    get video(): VideoAttachment | undefined;
    /** Message is a video note, information about the video message */
    get videoNote(): VideoNoteAttachment | undefined;
    /** Message is a voice message, information about the file */
    get voice(): VoiceAttachment | undefined;
    /**
     * Caption for the animation, audio, document, photo, video or voice,
     * 0-1024 characters
     */
    get caption(): string | undefined;
    /**
     * For messages with a caption, special entities like usernames, URLs, bot
     * commands, etc. that appear in the caption
     */
    get captionEntities(): MessageEntity[] | undefined;
    /**
     * True, if the caption must be shown above the message media
     */
    isShowCaptionAboveMedia(): boolean;
    /** `true`, if the message media is covered by a spoiler animation */
    hasMediaSpoiler(): true | undefined;
    /** Message is a shared contact, information about the contact */
    get contact(): Contact | undefined;
    /** Message is a dice with random value from 1 to 6 */
    get dice(): Dice | undefined;
    /** Message is a game, information about the game */
    get game(): Game | undefined;
    /** Message is a native poll, information about the poll */
    get poll(): Poll | undefined;
    /**
     * Message is a venue, information about the venue.
     * For backward compatibility, when this field is set,
     * the `location` field will also be set
     */
    get venue(): Venue | undefined;
    /** Message is a shared location, information about the location */
    get location(): Location | undefined;
    /**
     * Inline keyboard attached to the message.
     *
     * `login_url` buttons are represented as ordinary `url` buttons.
     */
    get replyMarkup(): InlineKeyboardMarkup | undefined;
    /** The domain name of the website on which the user has logged in. */
    get connectedWebsite(): string | undefined;
    /** Telegram Passport data */
    get passportData(): PassportData | undefined;
    /**
     * New members that were added to the group or supergroup and information
     * about them (the bot itself may be one of these members)
     */
    get newChatMembers(): User[] | undefined;
    /**
     * A member was removed from the group, information about them (this member
     * may be the bot itself)
     */
    get leftChatMember(): User | undefined;
    /** A chat title was changed to this value */
    get newChatTitle(): string | undefined;
    /** A chat photo was change to this value */
    get newChatPhoto(): PhotoSize[] | undefined;
    /** Service message: the chat photo was deleted */
    get deleteChatPhoto(): boolean | undefined;
    /** Service message: the group has been created */
    get groupChatCreated(): boolean | undefined;
    /**
     * Service message: the supergroup has been created. This field can't be
     * received in a message coming through updates, because bot can't be a
     * member of a supergroup when it is created. It can only be found in
     * `replyMessage` if someone replies to a very first message in a
     * directly created supergroup.
     */
    get supergroupChatCreated(): boolean | undefined;
    /** Service message: auto-delete timer settings changed in the chat */
    get messageAutoDeleteTimerChanged(): MessageAutoDeleteTimerChanged | undefined;
    /**
     * Service message: the channel has been created. This field can't be
     * received in a message coming through updates, because bot can't be a
     * member of a channel when it is created. It can only be found in
     * `replyMessage` if someone replies to a very first message in a channel.
     */
    get channelChatCreated(): boolean | undefined;
    /**
     * The group has been migrated to a supergroup with the specified identifier.
     * This number may be greater than 32 bits and some programming languages may
     * have difficulty/silent defects in interpreting it. But it is smaller than
     * 52 bits, so a signed 64 bit integer or double-precision float type are
     * safe for storing this identifier.
     */
    get migrateToChatId(): number | undefined;
    /**
     * The supergroup has been migrated from a group with the specified
     * identifier. This number may be greater than 32 bits and some programming
     * languages may have difficulty/silent defects in interpreting it. But it is
     * smaller than 52 bits, so a signed 64 bit integer or double-precision float
     * type are safe for storing this identifier.
     */
    get migrateFromChatId(): number | undefined;
    /**
     * Specified message was pinned. Note that the Message object in this field
     * will not contain further `replyMessage` fields even if it is itself a
     * reply.
     */
    get pinnedMessage(): InaccessibleMessage | Omit<Message, "replyMessage"> | undefined;
    /** Message is an invoice for a payment, information about the invoice */
    get invoice(): Invoice | undefined;
    /**
     * Message is a service message about a successful payment,
     * information about the payment.
     */
    get successfulPayment(): SuccessfulPayment | undefined;
    /** Service message: a user was shared with the bot */
    get usersShared(): UsersShared | undefined;
    /** Service message: a chat was shared with the bot */
    get chatShared(): ChatShared | undefined;
    /**
     * Service message.
     * A user in the chat triggered another user's proximity alert
     * while sharing Live Location.
     */
    get proximityAlertTriggered(): ProximityAlertTriggered | undefined;
    /** Service message: the user allowed the bot added to the attachment menu to write messages */
    get writeAccessAllowed(): WriteAccessAllowed | undefined;
    /** Service message: chat boost added */
    get chatBoostAdded(): ChatBoostAdded | undefined;
    /** Service message: chat background set */
    get chatBackgroundSet(): ChatBackground | undefined;
    /** Service message: forum topic created */
    get forumTopicCreated(): ForumTopicCreated | undefined;
    /** Service message: forum topic edited */
    get forumTopicEdited(): ForumTopicEdited | undefined;
    /** Service message: forum topic closed */
    get forumTopicClosed(): ForumTopicClosed | undefined;
    /** Service message: forum topic reopened */
    get forumTopicReopened(): ForumTopicReopened | undefined;
    /** Service message: the 'General' forum topic hidden */
    get generalForumTopicHidden(): GeneralForumTopicHidden | undefined;
    /** Service message: the 'General' forum topic unhidden */
    get generalForumTopicUnhidden(): GeneralForumTopicUnhidden | undefined;
    /** The message is a scheduled giveaway message */
    get giveaway(): Giveaway | undefined;
    /** Service message: a scheduled giveaway was created */
    get giveawayCreated(): GiveawayCreated | undefined;
    /** Service message: a giveaway without public winners was completed */
    get giveawayCompleted(): GiveawayCompleted | undefined;
    /** A giveaway with public winners was completed */
    get giveawayWinners(): GiveawayWinners | undefined;
    /** Service message: video chat scheduled */
    get videoChatScheduled(): VideoChatScheduled | undefined;
    /** Service message: video chat started */
    get videoChatStarted(): VideoChatStarted | undefined;
    /** Service message: video chat ended */
    get videoChatEnded(): VideoChatEnded | undefined;
    /** Service message: new participants invited to a video chat */
    get videoChatParticipantsInvited(): VideoChatParticipantsInvited | undefined;
    /** Service message: data sent by a Web App */
    get webAppData(): WebAppData | undefined;
}

/**
 * This object represents an incoming callback query from a callback button in
 * an inline keyboard. If the button that originated the query was attached to
 * a message sent by the bot, the field message will be present.
 * If the button was attached to a message sent via the bot (in inline mode),
 * the field inline_message_id will be present.
 * Exactly one of the fields `data` or `game_short_name` will be present.
 */
declare class CallbackQuery {
    payload: TelegramObjects.TelegramCallbackQuery;
    constructor(payload: TelegramObjects.TelegramCallbackQuery);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier for this query */
    get id(): string;
    /** Sender */
    get from(): User;
    /** Sender ID */
    get senderId(): number;
    /**
     * Message sent by the bot with the callback button that originated the query
     */
    get message(): InaccessibleMessage | Message | undefined;
    /**
     * Identifier of the message sent via the bot in inline mode,
     * that originated the query.
     */
    get inlineMessageId(): string | undefined;
    /**
     * Global identifier, uniquely corresponding to the chat to which the message
     * with the callback button was sent. Useful for high scores in games.
     */
    get chatInstance(): string;
    /**
     * Data associated with the callback button.
     * Be aware that a bad client can send arbitrary data in this field.
     */
    get data(): string | undefined;
    /**
     * Short name of a Game to be returned,
     * serves as the unique identifier for the game
     */
    get gameShortName(): string | undefined;
}

/** Represents the rights of an administrator in a chat. */
declare class ChatAdministratorRights {
    payload: TelegramObjects.TelegramChatAdministratorRights;
    constructor(payload: TelegramObjects.TelegramChatAdministratorRights);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** `true`, if the user's presence in the chat is hidden */
    isAnonymous(): boolean;
    /** `true`, if the administrator can access the chat event log, chat statistics, message statistics in channels, see channel members, see anonymous administrators in supergroups and ignore slow mode. Implied by any other administrator privilege */
    canManageChat(): boolean;
    /** `true`, if the administrator can delete messages of other users */
    canDeleteMessages(): boolean;
    /** `true`, if the administrator can manage video chats */
    canManageVideoChats(): boolean;
    /** `true`, if the administrator can restrict, ban or unban chat members */
    canRestrictMembers(): boolean;
    /** `true`, if the administrator can add new administrators with a subset of their own privileges or demote administrators that he has promoted, directly or indirectly (promoted by administrators that were appointed by the user) */
    canPromoteMembers(): boolean;
    /** `true`, if the user is allowed to change the chat title, photo and other settings */
    canChangeInfo(): boolean;
    /** `true`, if the user is allowed to invite new users to the chat */
    canInviteUsers(): boolean;
    /** `true`, if the administrator can post in the channel; channels only */
    canPostMessages(): boolean | undefined;
    /** `true`, if the administrator can edit messages of other users and can pin messages; channels only */
    canEditMessages(): boolean | undefined;
    /** `true`, if the user is allowed to pin messages; groups and supergroups only */
    canPinMessages(): boolean | undefined;
    /** `true`, if the administrator can post stories in the channel; channels only */
    canPostStories(): boolean;
    /** `true`, if the administrator can edit stories posted by other users; channels only */
    canEditStories(): boolean;
    /** `true`, if the administrator can delete stories posted by other users; channels only */
    canDeleteStories(): boolean;
    /** `true`, if the user is allowed to create, rename, close, and reopen forum topics; supergroups only */
    canManageTopics(): boolean | undefined;
}

/** The boost was obtained by the creation of a Telegram Premium giveaway. This boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription. */
declare class ChatBoostSourceGiveaway extends ChatBoostSource {
    payload: TelegramObjects.TelegramChatBoostSourceGiveaway;
    constructor(payload: TelegramObjects.TelegramChatBoostSourceGiveaway);
    /** Source of the boost, always `giveaway` */
    get source(): "giveaway";
    get giveawayMessageId(): number;
    /** User that boosted the chat */
    get user(): User | undefined;
    /** `true`, if the giveaway was completed, but there was no user to win the prize */
    isUnclaimed(): boolean | undefined;
    /** The number of Telegram Stars that were split between giveaway winners; for Telegram Star giveaways only */
    get prizeStarCount(): number | undefined;
}

/** The boost was obtained by subscribing to Telegram Premium or by gifting a Telegram Premium subscription to another user. */
declare class ChatBoostSourcePremium extends ChatBoostSource {
    payload: TelegramObjects.TelegramChatBoostSourcePremium;
    constructor(payload: TelegramObjects.TelegramChatBoostSourcePremium);
    /** Source of the boost, always `premium` */
    get source(): "premium";
    /** User that boosted the chat */
    get user(): User;
}

interface ChatBoostSourceMapping {
    premium: ChatBoostSourcePremium;
    gift_code: ChatBoostSourceGiftCode;
    giveaway: ChatBoostSourceGiveaway;
}
declare class ChatBoostSource {
    payload: TelegramObjects.TelegramChatBoostSource;
    constructor(payload: TelegramObjects.TelegramChatBoostSource);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Is this chat boost source a certain one? */
    is<T extends TelegramObjects.TelegramChatBoostSource["source"]>(source: T): this is ChatBoostSourceMapping[T];
}

/** The boost was obtained by the creation of Telegram Premium gift codes to boost a chat. Each such code boosts the chat 4 times for the duration of the corresponding Telegram Premium subscription. */
declare class ChatBoostSourceGiftCode extends ChatBoostSource {
    payload: TelegramObjects.TelegramChatBoostSourceGiftCode;
    constructor(payload: TelegramObjects.TelegramChatBoostSourceGiftCode);
    /** Source of the boost, always `gift_code` */
    get source(): "gift_code";
    /** User for which the gift code was created */
    get user(): User;
}

/** This object represents a boost added to a chat or changed. */
declare class ChatBoostRemoved {
    payload: TelegramObjects.TelegramChatBoostRemoved;
    constructor(payload: TelegramObjects.TelegramChatBoostRemoved);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Chat which was boosted */
    get chat(): Chat;
    /** Unique identifier of the boost */
    get id(): string;
    /** Point in time (Unix timestamp) when the boost was removed */
    get removeDate(): number;
    /** Source of the removed boost */
    get source(): ChatBoostSourcePremium | ChatBoostSourceGiftCode | ChatBoostSourceGiveaway;
}

/** This object contains information about a chat boost. */
declare class ChatBoost {
    payload: TelegramObjects.TelegramChatBoost;
    constructor(payload: TelegramObjects.TelegramChatBoost);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier of the boost */
    get id(): string;
    /** Point in time (Unix timestamp) when the chat was boosted */
    get addDate(): number;
    /** Point in time (Unix timestamp) when the boost will automatically expire, unless the booster's Telegram Premium subscription is prolonged */
    get expirationDate(): number;
    /** Source of the added boost */
    get source(): ChatBoostSourcePremium | ChatBoostSourceGiftCode | ChatBoostSourceGiveaway;
}

/** This object represents a boost added to a chat or changed. */
declare class ChatBoostUpdated {
    payload: TelegramObjects.TelegramChatBoostUpdated;
    constructor(payload: TelegramObjects.TelegramChatBoostUpdated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Chat which was boosted */
    get chat(): Chat;
    /** Information about the chat boost */
    get boost(): ChatBoost;
}

/** Represents a location to which a chat is connected. */
declare class ChatLocation {
    payload: TelegramObjects.TelegramChatLocation;
    constructor(payload: TelegramObjects.TelegramChatLocation);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The location to which the supergroup is connected. Can't be a live location. */
    get location(): Location;
    /** Location address; `1-64` characters, as defined by the chat owner */
    get address(): string;
}

/**
 * Describes actions that a non-administrator user is allowed to take in a chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatpermissions)
 */
declare class ChatPermissions {
    payload: TelegramObjects.TelegramChatPermissions;
    constructor(payload: TelegramObjects.TelegramChatPermissions);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * *Optional*. *True*, if the user is allowed to send text messages, contacts, giveaways, giveaway winners, invoices, locations and venues
     */
    get canSendMessages(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send audios
     */
    get canSendAudios(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send documents
     */
    get canSendDocuments(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send photos
     */
    get canSendPhotos(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send videos
     */
    get canSendVideos(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send video notes
     */
    get canSendVideoNotes(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send voice notes
     */
    get canSendVoiceNotes(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send polls
     */
    get canSendPolls(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to send animations, games, stickers and use inline bots
     */
    get canSendOtherMessages(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to add web page previews to their messages
     */
    get canAddWebPagePreviews(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to change the chat title, photo and other settings. Ignored in public supergroups
     */
    get canChangeInfo(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to invite new users to the chat
     */
    get canInviteUsers(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to pin messages. Ignored in public supergroups
     */
    get canPinMessages(): boolean | undefined;
    /**
     * *Optional*. *True*, if the user is allowed to create forum topics. If omitted defaults to the value of can\_pin\_messages
     */
    get canManageTopics(): boolean | undefined;
}

/** This object represents a chat photo. */
declare class ChatPhoto {
    payload: TelegramObjects.TelegramChatPhoto;
    constructor(payload: TelegramObjects.TelegramChatPhoto);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * File identifier of small (`160x160`) chat photo.
     * This `file_id` can be used only for photo download and only for as long
     * as the photo is not changed.
     */
    get smallFileId(): string;
    /**
     * Unique file identifier of small (`160x160`) chat photo, which is supposed
     * to be the same over time and for different bots. Can't be used to download
     * or reuse the file.
     */
    get smallFileUniqueId(): string;
    /**
     * File identifier of big (`640x640`) chat photo. This `file_id` can be used
     * only for photo download and only for as long as the photo is not changed.
     */
    get bigFileId(): string;
    /**
     * Unique file identifier of big (`640x640`) chat photo, which is supposed
     * to be the same over time and for different bots. Can't be used to
     * download or reuse the file.
     */
    get bigFileUniqueId(): string;
}

/**
 * This object contains full information about a chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatfullinfo)
 */
declare class ChatFullInfo {
    payload: TelegramObjects.TelegramChatFullInfo;
    constructor(payload: TelegramObjects.TelegramChatFullInfo);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Unique identifier for this chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this identifier.
     */
    get id(): number;
    /**
     * Type of the chat, can be either “private”, “group”, “supergroup” or “channel”
     */
    get type(): TelegramObjects.TelegramChatFullInfoType;
    /**
     * *Optional*. Title, for supergroups, channels and group chats
     */
    get title(): string | undefined;
    /**
     * *Optional*. Username, for private chats, supergroups and channels if available
     */
    get username(): string | undefined;
    /**
     * *Optional*. First name of the other party in a private chat
     */
    get firstName(): string | undefined;
    /**
     * *Optional*. Last name of the other party in a private chat
     */
    get lastName(): string | undefined;
    /**
     * *Optional*. *True*, if the supergroup chat is a forum (has [topics](https://telegram.org/blog/topics-in-groups-collectible-usernames#topics-in-groups) enabled)
     */
    get isForum(): boolean | undefined;
    /**
     * Identifier of the accent color for the chat name and backgrounds of the chat photo, reply header, and link preview. See [accent colors](https://core.telegram.org/bots/api/#accent-colors) for more details.
     */
    get accentColorId(): number;
    /**
     * The maximum number of reactions that can be set on a message in the chat
     */
    get maxReactionCount(): number;
    /**
     * *Optional*. Chat photo
     */
    get photo(): ChatPhoto | undefined;
    /**
     * *Optional*. If non-empty, the list of all [active chat usernames](https://telegram.org/blog/topics-in-groups-collectible-usernames#collectible-usernames); for private chats, supergroups and channels
     */
    get activeUsernames(): string[] | undefined;
    /**
     * *Optional*. For private chats, the date of birth of the user
     */
    get birthdate(): Birthdate | undefined;
    /**
     * *Optional*. For private chats with business accounts, the intro of the business
     */
    get businessIntro(): BusinessIntro | undefined;
    /**
     * *Optional*. For private chats with business accounts, the location of the business
     */
    get businessLocation(): BusinessLocation | undefined;
    /**
     * *Optional*. For private chats with business accounts, the opening hours of the business
     */
    get businessOpeningHours(): BusinessOpeningHours | undefined;
    /**
     * *Optional*. For private chats, the personal channel of the user
     */
    get personalChat(): Chat | undefined;
    /**
     * *Optional*. List of available reactions allowed in the chat. If omitted, then all [emoji reactions](https://core.telegram.org/bots/api/#reactiontypeemoji) are allowed.
     */
    get availableReactions(): TelegramObjects.TelegramReactionType[] | undefined;
    /**
     * *Optional*. Custom emoji identifier of the emoji chosen by the chat for the reply header and link preview background
     */
    get backgroundCustomEmojiId(): string | undefined;
    /**
     * *Optional*. Identifier of the accent color for the chat's profile background. See [profile accent colors](https://core.telegram.org/bots/api/#profile-accent-colors) for more details.
     */
    get profileAccentColorId(): number | undefined;
    /**
     * *Optional*. Custom emoji identifier of the emoji chosen by the chat for its profile background
     */
    get profileBackgroundCustomEmojiId(): string | undefined;
    /**
     * *Optional*. Custom emoji identifier of the emoji status of the chat or the other party in a private chat
     */
    get emojiStatusCustomEmojiId(): string | undefined;
    /**
     * *Optional*. Expiration date of the emoji status of the chat or the other party in a private chat, in Unix time, if any
     */
    get emojiStatusExpirationDate(): number | undefined;
    /**
     * *Optional*. Bio of the other party in a private chat
     */
    get bio(): string | undefined;
    /**
     * *Optional*. *True*, if privacy settings of the other party in the private chat allows to use `tg://user?id=<user_id>` links only in chats with the user
     */
    get hasPrivateForwards(): boolean | undefined;
    /**
     * *Optional*. *True*, if the privacy settings of the other party restrict sending voice and video note messages in the private chat
     */
    get hasRestrictedVoiceAndVideoMessages(): boolean | undefined;
    /**
     * *Optional*. *True*, if users need to join the supergroup before they can send messages
     */
    get joinToSendMessages(): boolean | undefined;
    /**
     * *Optional*. *True*, if all users directly joining the supergroup need to be approved by supergroup administrators
     */
    get joinByRequest(): boolean | undefined;
    /**
     * *Optional*. Description, for groups, supergroups and channel chats
     */
    get description(): string | undefined;
    /**
     * *Optional*. Primary invite link, for groups, supergroups and channel chats
     */
    get inviteLink(): string | undefined;
    /**
     * *Optional*. The most recent pinned message (by sending date)
     */
    get pinnedMessage(): Message | undefined;
    /**
     * *Optional*. Default chat member permissions, for groups and supergroups
     */
    get permissions(): ChatPermissions | undefined;
    /**
     * *Optional*. For supergroups, the minimum allowed delay between consecutive messages sent by each unprivileged user; in seconds
     */
    get slowModeDelay(): number | undefined;
    /**
     * *Optional*. For supergroups, the minimum number of boosts that a non-administrator user needs to add in order to ignore slow mode and chat permissions
     */
    get unrestrictBoostCount(): number | undefined;
    /**
     * *Optional*. The time after which all messages sent to the chat will be automatically deleted; in seconds
     */
    get messageAutoDeleteTime(): number | undefined;
    /**
     * *Optional*. *True*, if aggressive anti-spam checks are enabled in the supergroup. The field is only available to chat administrators.
     */
    get hasAggressiveAntiSpamEnabled(): boolean | undefined;
    /**
     * *Optional*. *True*, if non-administrators can only get the list of bots and administrators in the chat
     */
    get hasHiddenMembers(): boolean | undefined;
    /**
     * *Optional*. *True*, if messages from the chat can't be forwarded to other chats
     */
    get hasProtectedContent(): boolean | undefined;
    /**
     * *Optional*. *True*, if new chat members will have access to old messages; available only to chat administrators
     */
    get hasVisibleHistory(): boolean | undefined;
    /**
     * *Optional*. For supergroups, name of the group sticker set
     */
    get stickerSetName(): string | undefined;
    /**
     * *Optional*. *True*, if the bot can change the group sticker set
     */
    get canSendPaidMedia(): boolean | undefined;
    /**
     * *Optional*. *True*, if the bot can change the group sticker set
     */
    get canSetStickerSet(): boolean | undefined;
    get canSendGift(): boolean | undefined;
    /**
     * *Optional*. For supergroups, the name of the group's custom emoji sticker set. Custom emoji from this set can be used by all users and bots in the group.
     */
    get customEmojiStickerSetName(): string | undefined;
    /**
     * *Optional*. Unique identifier for the linked chat, i.e. the discussion group identifier for a channel and vice versa; for supergroups and channel chats. This identifier may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
     */
    get linkedChatId(): number | undefined;
    /**
     * *Optional*. For supergroups, the location to which the supergroup is connected
     */
    get location(): ChatLocation | undefined;
}

/** Represents an invite link for a chat. */
declare class ChatInviteLink {
    payload: TelegramObjects.TelegramChatInviteLink;
    constructor(payload: TelegramObjects.TelegramChatInviteLink);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * The invite link. If the link was created by another chat administrator,
     * then the second part of the link will be replaced with `…`.
     */
    get link(): string;
    /** Creator of the link */
    get creator(): User;
    /** Invite link name */
    get name(): string | undefined;
    /** `true`, if the link is primary */
    isPrimary(): boolean;
    /** `true`, if the link is revoked */
    isRevoked(): boolean;
    /** Point in time (Unix timestamp) when the link will expire or has been expired */
    get expireDate(): number | undefined;
    /**
     * Maximum number of users that can be members of the chat simultaneously
     * after joining the chat via this invite link;
     * `1-99999`
     */
    get memberLimit(): number | undefined;
    /** `true`, if users joining the chat via the link need to be approved by chat administrators */
    get createsJoinRequest(): boolean;
    /** Number of pending join requests created using this link */
    get pendingJoinRequestCount(): number | undefined;
}

/** Represents a join request sent to a chat. */
declare class ChatJoinRequest {
    payload: TelegramObjects.TelegramChatJoinRequest;
    constructor(payload: TelegramObjects.TelegramChatJoinRequest);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Chat to which the request was sent */
    get chat(): Chat;
    /** User that sent the join request */
    get from(): User;
    /** Identifier of a private chat with the user who sent the join request. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot can use this identifier for 24 hours to send messages until the join request is processed, assuming no other administrator contacted the user. */
    get userChatId(): number;
    /** Date the request was sent in Unix time */
    get date(): number;
    /** Bio of the user */
    get bio(): string | undefined;
    /** Chat invite link that was used by the user to send the join request */
    get inviteLink(): ChatInviteLink | undefined;
}

/**
 * This object contains information about one member of a chat. Currently, the following 6 types of chat members are supported:
 * - `ChatMemberOwner`
 * - `ChatMemberAdministrator`
 * - `ChatMemberMember`
 * - `ChatMemberRestricted`
 * - `ChatMemberLeft`
 * - `ChatMemberBanned`
 */
declare class ChatMember {
    payload: JoinUnion<TelegramObjects.TelegramChatMember>;
    constructor(payload: JoinUnion<TelegramObjects.TelegramChatMember>);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Information about the user */
    get user(): User;
    /** The member's status in the chat */
    get status(): "creator" | "administrator" | "member" | "restricted" | "left" | "kicked";
    /** Owner and administrators only. Custom title for this user */
    get customTitle(): string | undefined;
    /** Owner and administrators only. `true`, if the user's presence in the chat is hidden */
    isAnonymous(): boolean | undefined;
    /**
     * Restricted and kicked only.
     * Date when restrictions will be lifted for this user;
     * unix time
     */
    get untilDate(): number | undefined;
    /**
     * Administrators only.
     * `true`, if the bot is allowed to edit administrator privileges of that
     * user
     */
    canBeEdited(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can access the chat event log, chat statistics,
     * message statistics in channels, see channel members, see anonymous administrators
     * in supergroups and ignore slow mode.
     * Implied by any other administrator privilege
     */
    canManageChat(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can post in the channel;
     * channels only
     */
    canPostMessages(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can edit messages of other users
     * and can pin messages; channels only
     */
    canEditMessages(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can delete messages of other users
     */
    canDeleteMessages(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can manage video chats
     */
    canManageVideoChats(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can restrict, ban or unban chat members
     */
    canRestrictMembers(): boolean | undefined;
    /**
     * Administrators only.
     * `true`, if the administrator can add new administrators with a subset o
     * their own privileges or demote administrators that he has promoted,
     * directly or indirectly (promoted by administrators that were appointed by
     * the user)
     */
    canPromoteMembers(): boolean | undefined;
    /**
     * Administrators and restricted only.
     * `true`, if the user is allowed to change the chat title,
     * photo and other settings
     */
    canChangeInfo(): boolean | undefined;
    /**
     * Administrators and restricted only.
     * `true`, if the user is allowed to invite new users to the chat
     */
    canInviteUsers(): boolean | undefined;
    /**
     * Administrators and restricted only.
     * `true`, if the user is allowed to pin messages;
     * groups and supergroups only
     */
    canPinMessages(): boolean | undefined;
    /** `true`, if the administrator can post stories in the channel; channels only */
    canPostStories(): any;
    /** `true`, if the administrator can edit stories posted by other users; channels only */
    canEditStories(): any;
    /** `true`, if the administrator can delete stories posted by other users; channels only */
    canDeleteStories(): any;
    /** `true`, if the user is allowed to create, rename, close, and reopen forum topics; supergroups only */
    canManageTopics(): boolean | undefined;
    /**
     * Restricted only.
     * `true`, if the user is a member of the chat at the moment of the request
     */
    isMember(): boolean | undefined;
    /**
     * Restricted only.
     * `true`, if the user is allowed to send text messages,
     * contacts, locations and venues
     */
    canSendMessages(): boolean | undefined;
    /** `true`, if the user is allowed to send audios */
    canSendAudios(): boolean | undefined;
    /** `true`, if the user is allowed to send documents */
    canSendDocuments(): boolean | undefined;
    /** `true`, if the user is allowed to send photos */
    canSendPhotos(): boolean | undefined;
    /** `true`, if the user is allowed to send videos */
    canSendVideos(): boolean | undefined;
    /** `true`, if the user is allowed to send video notes */
    canSendVideoNotes(): boolean | undefined;
    /** `true`, if the user is allowed to send voice notes */
    canSendVoiceNotes(): boolean | undefined;
    /** Restricted only. `true`, if the user is allowed to send polls */
    canSendPolls(): boolean | undefined;
    /**
     * Restricted only.
     * `true`, if the user is allowed to send animations, games,
     * stickers and use inline bots
     */
    canSendOtherMessages(): boolean | undefined;
    /**
     * Restricted only
     * `true`, if the user is allowed to add web page previews to their messages
     */
    canAddWebPagePreviews(): boolean | undefined;
}

/**
 * This object represents changes in the status of a chat member.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatmemberupdated)
 */
declare class ChatMemberUpdated {
    payload: TelegramObjects.TelegramChatMemberUpdated;
    constructor(payload: TelegramObjects.TelegramChatMemberUpdated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Chat the user belongs to
     */
    get chat(): Chat;
    /**
     * Performer of the action, which resulted in the change
     */
    get from(): User;
    /**
     * Date the change was done in Unix time
     */
    get date(): number;
    /**
     * Previous information about the chat member
     */
    get oldChatMember(): ChatMember;
    /**
     * New information about the chat member
     */
    get newChatMember(): ChatMember;
    /**
     * *Optional*. Chat invite link, which was used by the user to join the chat; for joining by invite link events only.
     */
    get inviteLink(): ChatInviteLink | undefined;
    /**
     * *Optional*. True, if the user joined the chat after sending a direct join request and being approved by an administrator
     */
    get viaJoinRequest(): boolean | undefined;
    /**
     * *Optional*. True, if the user joined the chat via a chat folder invite link
     */
    get viaChatFolderInviteLink(): boolean | undefined;
}

/** Represents a result of an inline query that was chosen by the user and sent to their chat partner. */
declare class ChosenInlineResult {
    payload: TelegramObjects.TelegramChosenInlineResult;
    constructor(payload: TelegramObjects.TelegramChosenInlineResult);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The unique identifier for the result that was chosen */
    get resultId(): string;
    /** The user that chose the result */
    get from(): User;
    /** Sender ID */
    get senderId(): number;
    /** Sender location, only for bots that require user location */
    get location(): Location | undefined;
    /**
     * Identifier of the sent inline message. Available only if there is an
     * inline keyboard attached to the message. Will be also received in callback
     * queries and can be used to edit the message.
     */
    get inlineMessageId(): string | undefined;
    /** The query that was used to obtain the result */
    get query(): string;
}

/**
 * Represents a location on a map. By default, the location will be sent by the user. Alternatively, you can use *input\_message\_content* to send a message with the specified content instead of the location.
 *
 * [Documentation](https://core.telegram.org/bots/api/#inlinequeryresultlocation)
 */
declare class InlineQueryResultLocation {
    payload: TelegramObjects.TelegramInlineQueryResultLocation;
    constructor(payload: TelegramObjects.TelegramInlineQueryResultLocation);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Type of the result, must be *location*
     */
    get type(): "location";
    /**
     * Unique identifier for this result, 1-64 Bytes
     */
    get id(): string;
    /**
     * Location latitude in degrees
     */
    get latitude(): number;
    /**
     * Location longitude in degrees
     */
    get longitude(): number;
    /**
     * Location title
     */
    get title(): string;
    /**
     * *Optional*. The radius of uncertainty for the location, measured in meters; 0-1500
     */
    get horizontalAccuracy(): number | undefined;
    /**
     * *Optional*. Period in seconds during which the location can be updated, should be between 60 and 86400, or 0x7FFFFFFF for live locations that can be edited indefinitely.
     */
    get livePeriod(): number | undefined;
    /**
     * *Optional*. For live locations, a direction in which the user is moving, in degrees. Must be between 1 and 360 if specified.
     */
    get heading(): number | undefined;
    /**
     * *Optional*. For live locations, a maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified.
     */
    get proximityAlertRadius(): number | undefined;
    /**
     * *Optional*. [Inline keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to the message
     */
    get replyMarkup(): InlineKeyboardMarkup | undefined;
    /**
     * *Optional*. Content of the message to be sent instead of the location
     */
    get inputMessageContent(): TelegramObjects.TelegramInputMessageContent | undefined;
    /**
     * *Optional*. Url of the thumbnail for the result
     */
    get thumbnailUrl(): string | undefined;
    /**
     * *Optional*. Thumbnail width
     */
    get thumbnailWidth(): number | undefined;
    /**
     * *Optional*. Thumbnail height
     */
    get thumbnailHeight(): number | undefined;
}

/**
 * This object represents an incoming inline query.
 * When the user sends an empty query, your bot could return some default or
 * trending results.
 */
declare class InlineQuery {
    payload: TelegramObjects.TelegramInlineQuery;
    constructor(payload: TelegramObjects.TelegramInlineQuery);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique identifier for this query */
    get id(): string;
    /** Sender */
    get from(): User;
    /** Sender location, only for bots that request user location */
    get location(): Location | undefined;
    /** Text of the query (up to 256 characters) */
    get query(): string;
    /** Offset of the results to be returned, can be controlled by the bot */
    get offset(): string;
}

/**
 * Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent) of a location message to be sent as the result of an inline query.
 *
 * [Documentation](https://core.telegram.org/bots/api/#inputlocationmessagecontent)
 */
declare class InputLocationMessageContent {
    payload: TelegramObjects.TelegramInputLocationMessageContent;
    constructor(payload: TelegramObjects.TelegramInputLocationMessageContent);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Latitude of the location in degrees
     */
    get latitude(): number;
    /**
     * Longitude of the location in degrees
     */
    get longitude(): number;
    /**
     * *Optional*. The radius of uncertainty for the location, measured in meters; 0-1500
     */
    get horizontalAccuracy(): number | undefined;
    /**
     * *Optional*. Period in seconds during which the location can be updated, should be between 60 and 86400, or 0x7FFFFFFF for live locations that can be edited indefinitely.
     */
    get livePeriod(): number | undefined;
    /**
     * *Optional*. For live locations, a direction in which the user is moving, in degrees. Must be between 1 and 360 if specified.
     */
    get heading(): number | undefined;
    /**
     * *Optional*. For live locations, a maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified.
     */
    get proximityAlertRadius(): number | undefined;
}

/**
 * This object contains information about one answer option in a poll to send.
 *
 * [Documentation](https://core.telegram.org/bots/api/#inputpolloption)
 */
declare class InputPollOption {
    payload: TelegramObjects.TelegramInputPollOption;
    constructor(payload: TelegramObjects.TelegramInputPollOption);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Option text, 1-100 characters
     */
    get text(): string | {
        toString(): string;
    };
    /**
     * *Optional*. Mode for parsing entities in the text. See [formatting options](https://core.telegram.org/bots/api/#formatting-options) for more details. Currently, only custom emoji entities are allowed
     */
    get textParseMode(): "HTML" | "MarkdownV2" | "Markdown" | undefined;
    /**
     * *Optional*. A JSON-serialized list of special entities that appear in the poll option text. It can be specified instead of *text\_parse\_mode*
     */
    get textEntities(): TelegramObjects.TelegramMessageEntity[] | undefined;
}

/** Contains information about a Web App. */
declare class WebAppInfo {
    payload: TelegramObjects.TelegramWebAppInfo;
    constructor(payload: TelegramObjects.TelegramWebAppInfo);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** An HTTPS URL of a Web App to be opened with additional data as specified in Initializing Web Apps */
    get url(): string;
}

/** This object describes the bot's menu button in a private chat. */
declare class MenuButton {
    payload: JoinUnion<TelegramObjects.TelegramMenuButton>;
    constructor(payload: JoinUnion<TelegramObjects.TelegramMenuButton>);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Type of the button */
    get type(): "commands" | "web_app" | "default";
    /** Text on the button */
    get text(): any;
    /**
     * Description of the Web App that will be launched when the user presses the button.
     * The Web App will be able to send an arbitrary message on behalf of the user
     * using the method `answerWebAppQuery`.
     */
    get webApp(): WebAppInfo | undefined;
}

/** This object represents a unique message identifier. */
declare class MessageId {
    payload: TelegramObjects.TelegramMessageId;
    constructor(payload: TelegramObjects.TelegramMessageId);
    /** Unique message identifier */
    get id(): number;
}

/**
 * The reaction is based on a custom emoji.
 *
 * [Documentation](https://core.telegram.org/bots/api/#reactiontypecustomemoji)
 */
declare class ReactionTypeCustomEmoji extends ReactionType {
    payload: TelegramObjects.TelegramReactionTypeCustomEmoji;
    constructor(payload: TelegramObjects.TelegramReactionTypeCustomEmoji);
    /** Type of the reaction, always `custom_emoji` */
    get type(): "custom_emoji";
    /** Custom emoji identifier */
    get customEmoji(): string;
}

/**
 * The reaction is based on an emoji.
 *
 * [Documentation](https://core.telegram.org/bots/api/#reactiontypeemoji)
 */
declare class ReactionTypeEmoji extends ReactionType {
    payload: TelegramObjects.TelegramReactionTypeEmoji;
    constructor(payload: TelegramObjects.TelegramReactionTypeEmoji);
    /** Type of the reaction, always `emoji` */
    get type(): "emoji";
    /** Reaction emoji. Currently, it can be one of "👍", "👎", "❤", "🔥", "🥰", "👏", "😁", "🤔", "🤯", "😱", "🤬", "😢", "🎉", "🤩", "🤮", "💩", "🙏", "👌", "🕊", "🤡", "🥱", "🥴", "😍", "🐳", "❤‍🔥", "🌚", "🌭", "💯", "🤣", "⚡", "🍌", "🏆", "💔", "🤨", "😐", "🍓", "🍾", "💋", "🖕", "😈", "😴", "😭", "🤓", "👻", "👨‍💻", "👀", "🎃", "🙈", "😇", "😨", "🤝", "✍", "🤗", "🫡", "🎅", "🎄", "☃", "💅", "🤪", "🗿", "🆒", "💘", "🙉", "🦄", "😘", "💊", "🙊", "😎", "👾", "🤷‍♂", "🤷", "🤷‍♀", "😡" */
    get emoji(): TelegramObjects.TelegramReactionTypeEmojiEmoji;
}

/**
 * The reaction is paid.
 *
 * [Documentation](https://core.telegram.org/bots/api#reactiontypepaid)
 */
declare class ReactionTypePaid extends ReactionType {
    payload: TelegramObjects.TelegramReactionTypePaid;
    constructor(payload: TelegramObjects.TelegramReactionTypePaid);
    /** Type of the reaction, always `emoji` */
    get type(): "paid";
}

interface ReactionTypeMapping {
    emoji: ReactionTypeEmoji;
    custom_emoji: ReactionTypeCustomEmoji;
    paid: ReactionTypePaid;
}
declare class ReactionType {
    payload: TelegramObjects.TelegramReactionType;
    constructor(payload: TelegramObjects.TelegramReactionType);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Is this reaction type the same as the `type`? */
    is<T extends TelegramObjects.TelegramReactionType["type"]>(type: T): this is ReactionTypeMapping[T];
}

/** This object represents reaction changes on a message with anonymous reactions. */
declare class MessageReactionCountUpdated {
    payload: TelegramObjects.TelegramMessageReactionCountUpdated;
    constructor(payload: TelegramObjects.TelegramMessageReactionCountUpdated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The chat containing the message the user reacted to */
    get chat(): Chat;
    /** Unique identifier of the message inside the chat */
    get id(): number;
    /** Date of the change in Unix time */
    get date(): number;
    /** List of reactions that are present on the message */
    get reactions(): ReactionType[];
}

/** This object represents a change of a reaction on a message performed by a user. */
declare class MessageReactionUpdated {
    payload: TelegramObjects.TelegramMessageReactionUpdated;
    constructor(payload: TelegramObjects.TelegramMessageReactionUpdated);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** The chat containing the message the user reacted to */
    get chat(): Chat;
    /** Unique identifier of the message inside the chat */
    get id(): number;
    /** The user that changed the reaction, if the user isn't anonymous */
    get user(): User | undefined;
    /** The chat on behalf of which the reaction was changed, if the user is anonymous */
    get actorChat(): Chat | undefined;
    /** Date of the change in Unix time */
    get date(): number;
    /** Previous list of reaction types that were set by the user */
    get oldReactions(): TelegramObjects.TelegramReactionType[];
    /** New list of reaction types that have been set by the user */
    get newReactions(): TelegramObjects.TelegramReactionType[];
}

/** This object represents an answer of a user in a non-anonymous poll. */
declare class PollAnswer {
    payload: TelegramObjects.TelegramPollAnswer;
    constructor(payload: TelegramObjects.TelegramPollAnswer);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique poll identifier */
    get pollId(): string;
    /** The chat that changed the answer to the poll, if the voter is anonymous */
    get voterChat(): Chat | undefined;
    /** The user, who changed the answer to the poll */
    get user(): User | undefined;
    /** Sender ID. Since `user` and `voterChat` are mutually exclusive, this field will either contain `user.id` or `voterChat.id` as a shortcut =) */
    get senderId(): number;
    /**
     * 0-based identifiers of answer options, chosen by the user.
     * May be empty if the user retracted their vote.
     */
    get optionIds(): number[];
}

/** This object contains information about an incoming pre-checkout query. */
declare class PreCheckoutQuery {
    payload: TelegramObjects.TelegramPreCheckoutQuery;
    constructor(payload: TelegramObjects.TelegramPreCheckoutQuery);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique query identifier */
    get id(): string;
    /** User who sent the query */
    get from(): User;
    /** Sender ID */
    get senderId(): number;
    /** Three-letter ISO 4217 currency code */
    get currency(): TelegramObjects.TelegramCurrencies;
    /**
     * Total price in the smallest units of the currency
     * (integer, not float/double). For example, for a price of
     * `US$ 1.45` pass `amount = 145`. See the `exp` parameter in
     * [currencies.json](https://core.telegram.org/bots/payments/currencies.json),
     * it shows the number of digits past the decimal point for each currency
     * (2 for the majority of currencies).
     */
    get totalAmount(): number;
    /** Bot specified invoice payload */
    get invoicePayload(): string;
    /** Identifier of the shipping option chosen by the user */
    get shippingOptionId(): string | undefined;
    /** Order info provided by the user */
    get orderInfo(): OrderInfo | undefined;
}

/** Represents a reaction added to a message along with the number of times it was added. */
declare class ReactionCount {
    payload: TelegramObjects.TelegramReactionCount;
    constructor(payload: TelegramObjects.TelegramReactionCount);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Type of the reaction */
    get type(): ReactionTypeEmoji | ReactionTypeCustomEmoji;
    /** Number of times the reaction was added */
    get totalCount(): number;
}

/** Contains information about an inline message sent by a Web App on behalf of a user. */
declare class SentWebAppMessage {
    payload: TelegramObjects.TelegramSentWebAppMessage;
    constructor(payload: TelegramObjects.TelegramSentWebAppMessage);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * Identifier of the sent inline message.
     *
     * Available only if there is an inline keyboard attached to the message.
     */
    get inlineMessageId(): string | undefined;
}

/** This object contains information about an incoming shipping query. */
declare class ShippingQuery {
    payload: TelegramObjects.TelegramShippingQuery;
    constructor(payload: TelegramObjects.TelegramShippingQuery);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Unique query identifier */
    get id(): string;
    /** User who sent the query */
    get from(): User;
    /** Sender ID */
    get senderId(): number;
    /** Bot specified invoice payload */
    get invoicePayload(): string;
    /** User specified shipping address */
    get shippingAddress(): ShippingAddress;
}

/** This object represents a sticker set. */
declare class StickerSet {
    payload: TelegramObjects.TelegramStickerSet;
    constructor(payload: TelegramObjects.TelegramStickerSet);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Sticker set name */
    get name(): string;
    /** Sticker set title */
    get title(): string;
    /** Type of stickers in the set, currently one of `regular`, `mask`, `custom_emoji` */
    get stickerType(): TelegramObjects.TelegramStickerSetStickerType;
    /** List of all set stickers */
    get stickers(): StickerAttachment[] | undefined;
    /** Sticker set thumbnail in the .WEBP or .TGS format */
    get thumbnail(): PhotoSize | undefined;
}

/**
 * This object represents an incoming update.
 *
 * At most **one** of the optional parameters can be present in any given
 * update.
 */
declare class Update {
    payload: TelegramObjects.TelegramUpdate;
    constructor(payload: TelegramObjects.TelegramUpdate);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /**
     * The update's unique identifier.
     * Update identifiers start from a certain positive number and increase
     * sequentially. This ID becomes especially handy if you're using
     * **Webhooks**, since it allows you to ignore repeated updates or to restore
     * the correct update sequence, should they get out of order. If there are no
     * new updates for at least a week, then identifier of the next update will
     * be chosen randomly instead of sequentially.
     */
    get id(): number;
    /**
     * New incoming message of any kind — text, photo, sticker, etc.
     */
    get message(): Message | undefined;
    /** New version of a message that is known to the bot and was edited */
    get editedMessage(): Message | undefined;
    /** New incoming channel post of any kind — text, photo, sticker, etc. */
    get channelPost(): Message | undefined;
    /** New version of a channel post that is known to the bot and was edited */
    get editedChannelPost(): Message | undefined;
    /** A reaction to a message was changed by a user. The bot must be an administrator in the chat and must explicitly specify `message_reaction` in the list of allowed_updates to receive these updates. The update isn't received for reactions set by bots. */
    get messageReaction(): MessageReactionUpdated | undefined;
    /** Reactions to a message with anonymous reactions were changed. The bot must be an administrator in the chat and must explicitly specify `message_reaction_count` in the list of allowed_updates to receive these updates. */
    get messageReactionCount(): MessageReactionCountUpdated | undefined;
    /** New incoming inline query */
    get inlineQuery(): InlineQuery | undefined;
    /**
     * The result of an inline query that was chosen by a user and sent to their
     * chat partner. Please see our documentation on the feedback collecting for
     * details on how to enable these updates for your bot.
     */
    get chosenInlineResult(): ChosenInlineResult | undefined;
    /** New incoming callback query */
    get callbackQuery(): CallbackQuery | undefined;
    /** New incoming shipping query. Only for invoices with flexible price */
    get shippingQuery(): ShippingQuery | undefined;
    /**
     * New incoming pre-checkout query. Contains full information about checkout
     */
    get preCheckoutQuery(): PreCheckoutQuery | undefined;
    /**
     * New poll state. Bots receive only updates about stopped polls and polls,
     * which are sent by the bot
     */
    get poll(): Poll | undefined;
    /**
     * A user changed their answer in a non-anonymous poll. Bots receive new
     * votes only in polls that were sent by the bot itself.
     */
    get pollAnswer(): PollAnswer | undefined;
    /** The bot's chat member status was updated in a chat. For private chats, this update is received only when the bot is blocked or unblocked by the user. */
    get myChatMember(): ChatMemberUpdated | undefined;
    /**
     * A chat member's status was updated in a chat.
     *
     * The bot must be an administrator in the chat and must explicitly specify `chat_member` in the list of `allowed_updates` to receive these updates.
     */
    get chatMember(): ChatMemberUpdated | undefined;
    /** A request to join the chat has been sent. The bot must have the `can_invite_users` administrator right in the chat to receive these updates. */
    get chatJoinRequest(): ChatJoinRequest | undefined;
    /** A chat boost was added or changed. The bot must be an administrator in the chat to receive these updates. */
    get chatBoost(): ChatBoostUpdated | undefined;
    /** A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates. */
    get removedChatBoost(): ChatBoostRemoved | undefined;
}

/** This object represent a user's profile pictures. */
declare class UserProfilePhotos {
    payload: TelegramObjects.TelegramUserProfilePhotos;
    constructor(payload: TelegramObjects.TelegramUserProfilePhotos);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
    /** Total number of profile pictures the target user has */
    get totalCount(): number;
    /** Requested profile pictures (in up to 4 sizes each) */
    get photos(): PhotoSize[][] | undefined;
}

interface ContextOptions<Bot extends BotLike> {
    bot: Bot;
    update?: TelegramObjects.TelegramUpdate;
    updateType: UpdateName;
    updateId?: number;
}
/** Main base context */
declare class Context<Bot extends BotLike> {
    bot: Bot;
    updateId?: number;
    update?: TelegramObjects.TelegramUpdate;
    protected updateType: UpdateName;
    constructor(options: ContextOptions<Bot>);
    /** [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) */
    get [Symbol.toStringTag](): string;
}
interface Context<Bot extends BotLike> {
    is<T extends UpdateName>(rawTypes: MaybeArray<SoftString<T>>): this is ContextType<Bot, T> & (Bot["__Derives"] extends {} ? Bot["__Derives"]["global"] & Bot["__Derives"][T] : {});
}

interface SendMixinMetadata {
    get chatId(): number;
    get businessConnectionId(): string | undefined;
    get senderId(): number | undefined;
    get threadId(): number | undefined;
    isTopicMessage: () => boolean | undefined;
}
/** This object represents a mixin which can invoke `chatId`/`senderId`-dependent methods */
declare class SendMixin<Bot extends BotLike> {
    /** Sends message to current chat */
    send(text: TelegramParams.SendMessageParams["text"], params?: Optional<TelegramParams.SendMessageParams, "chat_id" | "text">): Promise<MessageContext<Bot>>;
    /** Sends photo to current chat */
    sendPhoto(photo: TelegramParams.SendPhotoParams["photo"], params?: Optional<TelegramParams.SendPhotoParams, "chat_id" | "photo">): Promise<MessageContext<Bot>>;
    /** Sends document to current chat */
    sendDocument(document: TelegramParams.SendDocumentParams["document"], params?: Optional<TelegramParams.SendDocumentParams, "chat_id" | "document">): Promise<MessageContext<Bot>>;
    /** Sends audio to current chat */
    sendAudio(audio: TelegramParams.SendAudioParams["audio"], params?: Optional<TelegramParams.SendAudioParams, "chat_id" | "audio">): Promise<MessageContext<Bot>>;
    /** Sends video to current chat */
    sendVideo(video: TelegramParams.SendVideoParams["video"], params?: Optional<TelegramParams.SendVideoParams, "chat_id" | "video">): Promise<MessageContext<Bot>>;
    /** Sends animation to current chat */
    sendAnimation(animation: TelegramParams.SendAnimationParams["animation"], params?: Optional<TelegramParams.SendAnimationParams, "chat_id" | "animation">): Promise<MessageContext<Bot>>;
    /** Sends video note to current chat */
    sendVideoNote(videoNote: TelegramParams.SendVideoNoteParams["video_note"], params?: Optional<TelegramParams.SendVideoNoteParams, "chat_id" | "video_note">): Promise<MessageContext<Bot>>;
    /** Sends voice to current chat */
    sendVoice(voice: TelegramParams.SendVoiceParams["voice"], params?: Optional<TelegramParams.SendVoiceParams, "chat_id" | "voice">): Promise<MessageContext<Bot>>;
    /** Sends location to current chat */
    sendLocation(latitude: number, longitude: number, params?: Optional<TelegramParams.SendLocationParams, "chat_id" | "latitude" | "longitude">): Promise<MessageContext<Bot>>;
    /** Sends invoice to current user */
    sendInvoice(params: Optional<TelegramParams.SendInvoiceParams, "chat_id">): Promise<MessageContext<Bot>>;
    /** Sends venue to current chat */
    sendVenue(params: Optional<TelegramParams.SendVenueParams, "chat_id">): Promise<MessageContext<Bot>>;
    /** Sends contact to current chat */
    sendContact(params: Optional<TelegramParams.SendContactParams, "chat_id">): Promise<MessageContext<Bot>>;
    /** Sends poll to current chat */
    sendPoll(params: Optional<TelegramParams.SendPollParams, "chat_id">): Promise<MessageContext<Bot>>;
    /** Sends sticker */
    sendSticker(sticker: TelegramParams.SendStickerParams["sticker"], params?: Optional<TelegramParams.SendStickerParams, "sticker" | "chat_id">): Promise<MessageContext<Bot>>;
    /** Stops poll in current chat */
    stopPoll(messageId: number, params?: Partial<TelegramParams.StopPollParams>): Promise<Poll>;
    /** Sends chat action to current chat */
    sendChatAction(action: TelegramParams.SendChatActionParams["action"], params?: Optional<TelegramParams.SendChatActionParams, "chat_id" | "action">): Promise<true>;
    /** Sends dice */
    sendDice(emoji: TelegramParams.SendDiceParams["emoji"], params?: Partial<TelegramParams.SendDiceParams>): Promise<MessageContext<Bot>>;
    /** Sends paid media to current chat */
    sendPaidMedia(paidMedia: TelegramParams.SendPaidMediaParams["media"], starCount: number, params?: Optional<TelegramParams.SendPaidMediaParams, "chat_id" | "media" | "star_count">): Promise<MessageContext<Bot>>;
    /** Sends media group to current chat */
    sendMediaGroup(mediaGroup: TelegramParams.SendMediaGroupParams["media"], params?: Optional<TelegramParams.SendMediaGroupParams, "chat_id" | "media">): Promise<MessageContext<Bot>[]>;
    /**
     * Automatically uses correct media method to send media
     *
     * @example
     * ```js
     * context.sendMedia({
     *   type: 'photo',
     *   photo: MediaUpload.path('./image.png'),
     *   caption: 'good image yes yes'
     * })
     * ```
     */
    sendMedia<T extends string>(query: {
        type: T;
    } & tSendMethods): ReturnType<T extends "animation" ? typeof this.sendAnimation : T extends "audio" ? typeof this.sendAudio : T extends "document" ? typeof this.sendDocument : T extends "photo" ? typeof this.sendPhoto : T extends "sticker" ? typeof this.sendSticker : T extends "video_note" ? typeof this.sendVideoNote : T extends "video" ? typeof this.sendVideo : T extends "voice" ? typeof this.sendVoice : () => never>;
    /** Returns chat boosts by the user */
    getChatBoosts(userId: number): Promise<_gramio_types.TelegramUserChatBoosts>;
}
interface SendMixin<Bot extends BotLike> extends Context<Bot>, SendMixinMetadata {
}

interface NodeMixinMetadata {
    get id(): number;
}
/** Construct a type that has `reply_parameters` `Partial` */
type WithPartialReplyParameters<T> = T & {
    reply_parameters?: Partial<TelegramObjects.TelegramReplyParameters>;
};
type WithQuote<T = {}> = {
    quote: string;
} & T;
/** This object represents a mixin which has `id` field and can invoke `id`-dependent methods */
declare class NodeMixin<Bot extends BotLike> {
    /** Replies to current message */
    reply(text: TelegramParams.SendMessageParams["text"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendMessageParams, "chat_id" | "text">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with photo */
    replyWithPhoto(photo: TelegramParams.SendPhotoParams["photo"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendPhotoParams, "chat_id" | "photo">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with document */
    replyWithDocument(document: TelegramParams.SendDocumentParams["document"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendDocumentParams, "chat_id" | "document">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with audio */
    replyWithAudio(audio: TelegramParams.SendAudioParams["audio"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendAudioParams, "chat_id" | "audio">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with video */
    replyWithVideo(video: TelegramParams.SendVideoParams["video"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendVideoParams, "chat_id" | "video">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with animation */
    replyWithAnimation(animation: TelegramParams.SendAnimationParams["animation"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendAnimationParams, "chat_id" | "animation">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with video note */
    replyWithVideoNote(videoNote: TelegramParams.SendVideoNoteParams["video_note"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendVideoNoteParams, "chat_id" | "video_note">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with voice */
    replyWithVoice(voice: TelegramParams.SendVoiceParams["voice"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendVoiceParams, "chat_id" | "voice">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with media group */
    replyWithMediaGroup(mediaGroup: TelegramParams.SendMediaGroupParams["media"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendMediaGroupParams, "chat_id" | "media">>): Promise<MessageContext<Bot>[]>;
    /** Replies to current message with location */
    replyWithLocation(latitude: number, longitude: number, params?: WithPartialReplyParameters<Optional<TelegramParams.SendLocationParams, "chat_id" | "latitude" | "longitude">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with invoice */
    replyWithInvoice(params: WithPartialReplyParameters<Optional<TelegramParams.SendInvoiceParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with venue */
    replyWithVenue(params: WithPartialReplyParameters<Optional<TelegramParams.SendVenueParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with contact */
    replyWithContact(params: WithPartialReplyParameters<Optional<TelegramParams.SendContactParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with poll */
    replyWithPoll(params: WithPartialReplyParameters<Optional<TelegramParams.SendPollParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with sticker */
    replyWithSticker(sticker: TelegramParams.SendStickerParams["sticker"], params?: WithPartialReplyParameters<Optional<TelegramParams.SendStickerParams, "chat_id" | "sticker">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a dice */
    replyWithDice(emoji: TelegramParams.SendDiceParams["emoji"], params?: WithPartialReplyParameters<Partial<TelegramParams.SendDiceParams>>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote */
    replyWithQuote(params: WithQuote<{
        text: string;
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendMessageParams, "chat_id" | "text">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a photo */
    quoteWithPhoto(params: WithQuote<{
        photo: TelegramParams.SendPhotoParams["photo"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendPhotoParams, "chat_id" | "photo">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a document */
    quoteWithDocument(params: WithQuote<{
        document: TelegramParams.SendDocumentParams["document"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendDocumentParams, "chat_id" | "document">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and an audio */
    quoteWithAudio(params: WithQuote<{
        audio: TelegramParams.SendAudioParams["audio"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendAudioParams, "chat_id" | "audio">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a video */
    quoteWithVideo(params: WithQuote<{
        video: TelegramParams.SendVideoParams["video"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendVideoParams, "chat_id" | "video">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and an animation */
    quoteWithAnimation(params: WithQuote<{
        animation: TelegramParams.SendAnimationParams["animation"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendAnimationParams, "chat_id" | "animation">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a video note */
    quoteWithVideoNote(params: WithQuote<{
        videoNote: TelegramParams.SendVideoNoteParams["video_note"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendVideoNoteParams, "chat_id" | "video_note">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a voice */
    quoteWithVoice(params: WithQuote<{
        voice: TelegramParams.SendVoiceParams["voice"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendVoiceParams, "chat_id" | "voice">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a media group */
    quoteWithMediaGroup(params: WithQuote<{
        mediaGroup: TelegramParams.SendMediaGroupParams["media"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendMediaGroupParams, "chat_id" | "media">>): Promise<MessageContext<Bot>[]>;
    /** Replies to current message with a quote and a location */
    quoteWithLocation(params: WithQuote<{
        latitude: number;
        longitude: number;
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendLocationParams, "chat_id" | "latitude" | "longitude">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and an invoice */
    quoteWithInvoice(params: WithQuote & WithPartialReplyParameters<Optional<TelegramParams.SendInvoiceParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a venue */
    quoteWithVenue(params: WithQuote & WithPartialReplyParameters<Optional<TelegramParams.SendVenueParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a contact */
    quoteWithContact(params: WithQuote & WithPartialReplyParameters<Optional<TelegramParams.SendContactParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a poll */
    quoteWithPoll(params: WithQuote & WithPartialReplyParameters<Optional<TelegramParams.SendPollParams, "chat_id">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a sticker */
    quoteWithSticker(params: WithQuote<{
        sticker: TelegramParams.SendStickerParams["sticker"];
    }> & WithPartialReplyParameters<Optional<TelegramParams.SendStickerParams, "chat_id" | "sticker">>): Promise<MessageContext<Bot>>;
    /** Replies to current message with a quote and a dice */
    quoteWithDice(params: WithQuote<{
        emoji: TelegramParams.SendDiceParams["emoji"];
    }> & WithPartialReplyParameters<Partial<TelegramParams.SendDiceParams>>): Promise<MessageContext<Bot>>;
    /** Deletes current message */
    delete(params?: Optional<TelegramParams.DeleteMessageParams, "chat_id" | "message_id">): Promise<true>;
    /** Deletes messages in current chat */
    deleteMessages(ids: TelegramParams.DeleteMessagesParams["message_ids"]): Promise<true>;
    /** Edits current message live location */
    editMessageLiveLocation(params: TelegramParams.EditMessageLiveLocationParams): Promise<true | MessageContext<Bot>>;
    /** Edits current message live location. An alias for `editMessageLiveLocation` */
    editLiveLocation(params: TelegramParams.EditMessageLiveLocationParams): Promise<true | MessageContext<Bot>>;
    /** Stops current message live location */
    stopMessageLiveLocation(params?: TelegramParams.StopMessageLiveLocationParams): Promise<true | MessageContext<Bot>>;
    /** Stops current message live location. An alias for `stopMessageLiveLocation` */
    stopLiveLocation(params?: TelegramParams.StopMessageLiveLocationParams): Promise<true | MessageContext<Bot>>;
    /** Edits current message text */
    editMessageText(text: TelegramParams.EditMessageTextParams["text"], params?: Partial<TelegramParams.EditMessageTextParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message text. An alias for `editMessageText` */
    editText(text: TelegramParams.EditMessageTextParams["text"], params?: Partial<TelegramParams.EditMessageTextParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message caption */
    editMessageCaption(caption: NonNullable<TelegramParams.EditMessageCaptionParams["caption"]>, params?: Partial<TelegramParams.EditMessageCaptionParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message caption. An alias for `editMessageCaption` */
    editCaption(caption: NonNullable<TelegramParams.EditMessageCaptionParams["caption"]>, params?: Partial<TelegramParams.EditMessageCaptionParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message media */
    editMessageMedia(media: TelegramParams.EditMessageMediaParams["media"], params?: Partial<TelegramParams.EditMessageMediaParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message media. An alias for `editMessageMedia` */
    editMedia(media: TelegramParams.EditMessageMediaParams["media"], params?: Partial<TelegramParams.EditMessageMediaParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message reply markup */
    editMessageReplyMarkup(replyMarkup: TelegramParams.EditMessageReplyMarkupParams["reply_markup"], params?: Partial<TelegramParams.EditMessageReplyMarkupParams>): Promise<true | MessageContext<Bot>>;
    /** Edits current message reply markup. An alias for `editMessageReplyMarkup` */
    editReplyMarkup(replyMarkup: TelegramParams.EditMessageReplyMarkupParams["reply_markup"], params?: Partial<TelegramParams.EditMessageReplyMarkupParams>): Promise<true | MessageContext<Bot>>;
    /** Copies current message [into other chat if `chatId` is provided] */
    copy(params?: Optional<TelegramParams.CopyMessageParams, "chat_id" | "from_chat_id" | "message_id">): Promise<MessageId>;
    /** Copies messages from current chat and sends to another */
    copyMessages(chatId: TelegramParams.CopyMessagesParams["chat_id"], ids: TelegramParams.CopyMessagesParams["message_ids"], params?: Optional<TelegramParams.CopyMessagesParams, "chat_id" | "from_chat_id" | "message_ids">): Promise<MessageId[]>;
    /** Forwards current message [into other chat if `chatId` is provided] */
    forward(params?: Optional<TelegramParams.ForwardMessageParams, "chat_id" | "from_chat_id" | "message_id">): Promise<MessageContext<Bot>>;
    /** Forwards messages from current chat to another */
    forwardMessages(chatId: TelegramParams.ForwardMessagesParams["chat_id"], ids: TelegramParams.ForwardMessagesParams["message_ids"], params?: Optional<TelegramParams.ForwardMessagesParams, "chat_id" | "from_chat_id" | "message_ids">): Promise<MessageId[]>;
    /** Sets a reaction on a message */
    setReaction(reaction: TelegramObjects.TelegramReactionTypeEmoji["emoji"] | TelegramObjects.TelegramReactionType, params?: Optional<TelegramParams.SetMessageReactionParams, "chat_id" | "message_id">): Promise<true>;
    /** Sets multiple amount of reactions on a message */
    setReactions(rawReactions: (TelegramObjects.TelegramReactionTypeEmoji["emoji"] | TelegramObjects.TelegramReactionType)[], params?: Optional<TelegramParams.SetMessageReactionParams, "chat_id" | "message_id">): Promise<true>;
    /** Reacts to a message */
    react(rawReactions: MaybeArray<TelegramObjects.TelegramReactionTypeEmoji["emoji"] | TelegramObjects.TelegramReactionType>, params?: Optional<TelegramParams.SetMessageReactionParams, "chat_id" | "message_id">): Promise<true>;
    /** Clears reactions from the message */
    clearReactions(params?: Optional<TelegramParams.SetMessageReactionParams, "chat_id" | "message_id">): Promise<true>;
}
interface NodeMixin<Bot extends BotLike> extends Context<Bot>, NodeMixinMetadata, SendMixin<Bot> {
}

/** This object represents a mixin which has sender data (e.g. `senderId`, `from` etc.) */
declare class TargetMixin {
    payload: Record<string, any>;
    /** Checks if the instance has `from` and `senderId` properties */
    hasFrom(): this is Require<this, "from" | "senderId">;
    /** Sender, empty for messages sent to channels */
    get from(): User | undefined;
    /** Checks if the instance has `senderChat` property */
    hasSenderChat(): this is Require<this, "senderChat">;
    /**
     * Sender of the message, sent on behalf of a chat.
     * The channel itself for channel messages.
     * The supergroup itself for messages from anonymous group administrators.
     * The linked channel for messages automatically forwarded to the discussion group
     */
    get senderChat(): Chat | undefined;
    /**
     * *Optional*. If the sender of the message boosted the chat, the number of boosts added by the user
     */
    get senderBoostCount(): TelegramMessage["sender_boost_count"];
    /** Conversation the message belongs to */
    get chat(): Chat;
    /** Sender's ID */
    get senderId(): number | undefined;
    /** Chat ID */
    get chatId(): number;
    /** Unique identifier of the business connection from which the message was received. If non-empty, the message belongs to a chat of the corresponding business account that is independent from any potential bot chat which might share the same identifier. */
    get businessConnectionId(): string | undefined;
    /** Chat type */
    get chatType(): _gramio_types.TelegramChatType;
    /** Is this chat a private one? */
    isPM(): this is RequireValue<this, "chatType", ChatType.Private>;
    /** Is this chat a group? */
    isGroup(): this is RequireValue<this, "chatType", ChatType.Group>;
    /** Is this chat a supergroup? */
    isSupergroup(): this is RequireValue<this, "chatType", ChatType.Supergroup>;
    /** Is this chat a channel? */
    isChannel(): this is RequireValue<this, "chatType", ChatType.Channel>;
}

/** This object represents a mixin that is responsible for all the chat management methods */
declare class ChatControlMixin<Bot extends BotLike> {
    /** Sets a custom title */
    setCustomTitle(title: string, params?: Optional<TelegramParams.SetChatAdministratorCustomTitleParams, "chat_id" | "user_id">): Promise<true>;
    /** Sets default chat permissions */
    setChatDefaultPermissions(permissions: TelegramObjects.TelegramChatPermissions, params?: Optional<TelegramParams.SetChatPermissionsParams, "chat_id" | "permissions">): Promise<true>;
    /** Sets a new profile photo for the chat */
    setChatPhoto(photo: TelegramParams.SetChatPhotoParams["photo"], params?: Optional<TelegramParams.SetChatPhotoParams, "chat_id" | "photo">): Promise<true>;
    /** Deletes a chat photo */
    removeChatPhoto(params?: Optional<TelegramParams.DeleteChatPhotoParams, "chat_id">): Promise<true>;
    /** Changes chat title */
    setChatTitle(title: string, params?: Optional<TelegramParams.SetChatTitleParams, "chat_id" | "title">): Promise<true>;
    /** Changes chat description */
    setChatDescription(description: string, params?: Optional<TelegramParams.SetChatDescriptionParams, "chat_id" | "description">): Promise<true>;
    /** Sets new group stickerset */
    setChatStickerSet(name: string, params?: Optional<TelegramParams.SetChatStickerSetParams, "chat_id" | "sticker_set_name">): Promise<true>;
    /** Deletes group stickerset */
    deleteChatStickerSet(params?: Optional<TelegramParams.DeleteChatStickerSetParams, "chat_id">): Promise<true>;
}
interface ChatControlMixin<Bot extends BotLike> extends Context<Bot>, TargetMixin, NodeMixin<Bot> {
}

/** This object represents a mixin that works with all `*ChatInviteLink` methods */
declare class ChatInviteControlMixin<Bot extends BotLike> {
    /** Generates new primary invite link */
    exportInviteLink(params?: Optional<TelegramParams.ExportChatInviteLinkParams, "chat_id">): Promise<string>;
    /** Creates an additional invite link */
    createInviteLink(params?: Optional<TelegramParams.CreateChatInviteLinkParams, "chat_id">): Promise<_gramio_types.TelegramChatInviteLink>;
    /** Edits non-primary invite link created by the bot */
    editInviteLink(link: string, params?: Optional<TelegramParams.EditChatInviteLinkParams, "chat_id" | "invite_link">): Promise<_gramio_types.TelegramChatInviteLink>;
    /** Revokes an invite link generated by a bot */
    revokeInviteLink(link: string, params?: Optional<TelegramParams.RevokeChatInviteLinkParams, "chat_id" | "invite_link">): Promise<_gramio_types.TelegramChatInviteLink>;
}
interface ChatInviteControlMixin<Bot extends BotLike> extends Context<Bot>, TargetMixin {
}

/** This object represents a mixin that is able to control member's rights */
declare class ChatMemberControlMixin<Bot extends BotLike> {
    /** Bans a user (o_O) */
    banMember(params?: Optional<TelegramParams.BanChatMemberParams, "chat_id" | "user_id">): Promise<true>;
    /** Unbans a user (O_o) */
    unbanMember(params?: Optional<TelegramParams.UnbanChatMemberParams, "chat_id" | "user_id">): Promise<true>;
    /** Restricts a user (O_O) */
    restrictMember(permissions: TelegramObjects.TelegramChatPermissions, params?: Optional<TelegramParams.RestrictChatMemberParams, "chat_id" | "user_id">): Promise<true>;
    /** Promotes/demotes a user (o_o) */
    promoteMember(params?: Optional<TelegramParams.PromoteChatMemberParams, "chat_id" | "user_id">): Promise<true>;
}
interface ChatMemberControlMixin<Bot extends BotLike> extends Context<Bot>, TargetMixin, NodeMixin<Bot> {
}

/** This object is a mixin that does all the chat-sender stuff, right? */
declare class ChatSenderControlMixin<Bot extends BotLike> {
    /** Bans a channel chat */
    banChatSender(senderChatId: number, params?: Optional<TelegramParams.BanChatSenderChatParams, "chat_id" | "sender_chat_id">): Promise<true>;
    /** Unbans a channel chat */
    unbanChatSender(senderChatId: number, params?: Optional<TelegramParams.UnbanChatSenderChatParams, "chat_id" | "sender_chat_id">): Promise<true>;
}
interface ChatSenderControlMixin<Bot extends BotLike> extends Context<Bot>, TargetMixin {
}

interface ForumMixinMetadata {
    get threadId(): number | undefined;
}
/** This object represents a mixin that's used in all topic-related updates  */
declare class ForumMixin<Bot extends BotLike> {
    /** Checks whether this topic is actually a 'General' one */
    isGeneralTopic(): this is RequireValue<this, "threadId", undefined>;
    /** Returns custom emoji stickers, which can be used as a forum topic icon by any user */
    getTopicIcons(): Promise<_gramio_types.TelegramSticker[]>;
    /** Creates a topic */
    createTopic(name: string, params?: Optional<TelegramParams.CreateForumTopicParams, "chat_id" | "name">): Promise<_gramio_types.TelegramForumTopic>;
    /** Edits topic info */
    editTopic(params: Optional<TelegramParams.EditForumTopicParams, "chat_id" | "message_thread_id">): Promise<true>;
    /** Edits General topic info */
    editGeneralTopic(params: Optional<TelegramParams.EditGeneralForumTopicParams, "chat_id">): Promise<true>;
    /** Closes topic */
    closeTopic(params?: Optional<TelegramParams.CloseForumTopicParams, "chat_id" | "message_thread_id">): Promise<true>;
    /** Closes General topic */
    closeGeneralTopic(params?: Optional<TelegramParams.CloseGeneralForumTopicParams, "chat_id">): Promise<true>;
    /** Reopens topic */
    reopenTopic(params?: Optional<TelegramParams.ReopenForumTopicParams, "chat_id" | "message_thread_id">): Promise<true>;
    /** Reopens General topic */
    reopenGeneralTopic(params?: Optional<TelegramParams.ReopenGeneralForumTopicParams, "chat_id">): Promise<true>;
    /** Deletes topic along with all its messages */
    deleteTopic(params?: Optional<TelegramParams.DeleteForumTopicParams, "chat_id" | "message_thread_id">): Promise<true>;
    /** Clears the list of pinned messages */
    unpinAllTopicMessages(params?: Optional<TelegramParams.UnpinAllForumTopicMessagesParams, "chat_id" | "message_thread_id">): Promise<true>;
    /** Clears the list of pinned messages in a General topic */
    unpinAllGeneralTopicMessages(params?: Optional<TelegramParams.UnpinAllGeneralForumTopicMessagesParams, "chat_id">): Promise<true>;
    /** Hides General topic */
    hideGeneralTopic(params?: Optional<TelegramParams.HideGeneralForumTopicParams, "chat_id">): Promise<true>;
    /** Unhides General topic */
    unhideGeneralTopic(params?: Optional<TelegramParams.UnhideGeneralForumTopicParams, "chat_id">): Promise<true>;
}
interface ForumMixin<Bot extends BotLike> extends Context<Bot>, ForumMixinMetadata, NodeMixin<Bot> {
}

/** This object represents a mixin that ensures you have methods to pin/unpin messages in the chat */
declare class PinsMixin<Bot extends BotLike> {
    /** Adds message to the list of pinned messages */
    pinChatMessage(params?: Optional<TelegramParams.PinChatMessageParams, "chat_id" | "message_id">): Promise<true>;
    /** Removes message from the list of pinned messages  */
    unpinChatMessage(params?: Optional<TelegramParams.UnpinChatMessageParams, "chat_id" | "message_id">): Promise<true>;
    /** Clears the list of pinned messages */
    unpinAllChatMessages(params?: Optional<TelegramParams.UnpinAllChatMessagesParams, "chat_id">): Promise<true>;
}
interface PinsMixin<Bot extends BotLike> extends Context<Bot>, TargetMixin, NodeMixin<Bot> {
}

interface CreateActionControllerParams {
    /**
     * Interval between `sendChatAction` calls, in milliseconds
     * @default 5000
     */
    interval?: number;
    /**
     * Initial wait before the first cycle of `sendChatAction` calls, in milliseconds
     * @default 0
     */
    wait?: number;
    /**
     * Timeout for `sendChatAction` calls, in milliseconds. `0` to disable
     * @default 0
     */
    timeout?: number;
}
interface ControllerOptions<Bot extends BotLike> {
    action: TelegramParams.SendChatActionParams["action"];
    params: Optional<TelegramParams.SendChatActionParams, "chat_id" | "action"> & CreateActionControllerParams;
    context: Context<Bot> & SendMixin<Bot>;
}
/**
 * This object represent ChatAction mixin
 *
 * @example
 * ```typescript
 * bot.on("message", (context) => {
 * 		const controller = context.createActionController('typing');
 *
 *		controller.start();
 *
 *		await sleep(10_000)
 *
 *		controller.stop();
 *
 *		return context.send("soo sleepy...")
 * });
 * ```
 *
 *  */
declare class ChatActionController<Bot extends BotLike> {
    private abortController;
    action: TelegramParams.SendChatActionParams["action"];
    interval: number;
    wait: number;
    timeout: number;
    private context;
    constructor(options: ControllerOptions<Bot>);
    started: boolean;
    /** Starts the `sendChatAction(action)` loop until `stop()` is called */
    start(): void;
    /** Stops the loop */
    stop(): void;
}
declare class ChatActionMixin<Bot extends BotLike> {
    /** Creates a controller that when `start()`ed executes `sendChatAction(action)` every `interval` milliseconds until `stop()`ped */
    createActionController(action: TelegramParams.SendChatActionParams["action"], params?: Optional<TelegramParams.SendChatActionParams, "chat_id" | "action"> & CreateActionControllerParams): ChatActionController<Bot>;
}
interface ChatActionMixin<Bot extends BotLike> extends Context<Bot>, SendMixin<Bot> {
}

interface CloneMixinMetadata<P> {
    /** The raw data that is used for this Context */
    payload: P;
}
/** This object represents a mixin which has `clone(options?)` method */
declare class CloneMixin<Bot extends BotLike, C extends Context<Bot> & Constructor<C>, Options extends Record<string, any>> {
    clone(options?: Options): C;
}
interface CloneMixin<Bot extends BotLike, C, Options> extends Context<Bot>, CloneMixinMetadata<Options["payload"]> {
}

interface DownloadMixinMetadata {
    get attachment(): Attachment | undefined;
}
/** This object represents a mixin that can be used to download media files */
declare class DownloadMixin<Bot extends BotLike> {
    /** Downloads attachment */
    download(): Promise<ArrayBuffer>;
    download(path: string): Promise<string>;
}
interface DownloadMixin<Bot extends BotLike> extends Context<Bot>, DownloadMixinMetadata {
}

interface MessageContextOptions<Bot extends BotLike> {
    bot: Bot;
    update?: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId?: number;
    type?: UpdateName;
}
/** Called when `message` event occurs */
declare class MessageContext<Bot extends BotLike> extends Context<Bot> {
    #private;
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: MessageContextOptions<Bot>);
    /**
     * For text messages, the actual UTF-8 text of the message, 0-4096 characters
     */
    get text(): string | undefined;
    set text(text: string | undefined);
    /** Checks if the message has `text` property */
    hasText(): this is Require<this, "text">;
    /**
     * Caption for the animation, audio, document, photo, video or voice,
     * 0-1024 characters
     */
    get caption(): string | undefined;
    set caption(caption: string | undefined);
    /** Checks if the message has `caption` property */
    hasCaption(): this is Require<this, "caption">;
    /** Checks if the message has `dice` property */
    hasDice(): this is Require<this, "dice">;
    /** Value after the `/start` command */
    get rawStartPayload(): string | undefined;
    /** Parsed value after the `/start` command */
    get startPayload(): string | number | undefined;
    /** Does this message have start payload? */
    hasStartPayload(): this is Require<this, "startPayload">;
    /** Checks if the message has `author_signature` property */
    hasAuthorSignature(): this is Require<this, "authorSignature">;
    /** Checks if there are any entities (with specified type) */
    hasEntities(type?: EntityType | MessageEntity["type"]): this is Require<this, "entities">;
    /** Checks if there are any caption entities (with specified type) */
    hasCaptionEntities(type?: EntityType | MessageEntity["type"]): this is Require<this, "captionEntities">;
    get paidMedia(): PaidMediaInfo | undefined;
    /** Message attachment */
    get attachment(): AnimationAttachment | AudioAttachment | ContactAttachment | DocumentAttachment | LocationAttachment | PhotoAttachment | PollAttachment | StickerAttachment | StoryAttachment | VenueAttachment | VideoNoteAttachment | VideoAttachment | VoiceAttachment | undefined;
    /** Does this message have an attachment with a specific type `type`? */
    hasAttachmentType<T extends AttachmentType>(type: T): this is RequireValue<this, "attachment", AttachmentsMapping[T]>;
    /** Does this message even have an attachment? */
    hasAttachment(): this is Require<this, "attachment">;
    /** Is this message a giveaway */
    isGiveaway(): this is Require<this, "giveaway">;
    /** Is this message an event? */
    isEvent(): boolean;
    /** Event type */
    get eventType(): MessageEventName | undefined;
    /** Is this message a service one? */
    isServiceMessage(): boolean;
    /** Is this message in topic */
    isTopicMessage(): boolean;
    /** Does this message have a forward origin? */
    hasForwardOrigin(): this is Require<this, "forwardOrigin">;
    /** Does this message have a quote? */
    hasQuote(): this is Require<this, "quote">;
    /** Does this message have link preview options? */
    hasLinkPreviewOptions(): this is Require<this, "linkPreviewOptions">;
    /** Does this message have external reply info? */
    hasReplyInfo(): this is Require<this, "externalReply">;
    /** Does this message have reply message? */
    hasReplyMessage(): this is Require<this, "replyMessage">;
    /** Checks if the sent message has `via_bot` property */
    hasViaBot(): this is Require<this, "viaBot">;
    /** @deprecated use `hasAttachmentType(type)` and `hasAttachment` instead */
    hasAttachments(type?: AttachmentType | AttachmentType): boolean;
}
interface MessageContext<Bot extends BotLike> extends Constructor<MessageContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, DownloadMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, MessageContext<Bot>, MessageContextOptions<Bot>> {
}

interface CallbackQueryContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramCallbackQuery;
    updateId: number;
}
/** Called when `callback_query` event occurs */
declare class CallbackQueryContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramCallbackQuery;
    constructor(options: CallbackQueryContextOptions<Bot>);
    /** Checks if the query has `message` property */
    hasMessage(): this is Require<this, "message">;
    /**
     * Message with the callback button that originated the query.
     * Note that message content and message date will not be available
     * if the message is too old
     */
    get message(): MessageContext<Bot> | undefined;
    /** Checks if the query has `queryPayload` property */
    hasQueryPayload(): this is Require<this, "queryPayload">;
    /**
     * Data associated with the callback button.
     * Be aware that a bad client can send arbitrary data in this field.
     */
    get queryPayload(): unknown;
    /** Checks if the query has `inlineMessageId` property */
    hasInlineMessageId(): this is Require<this, "inlineMessageId">;
    /** Checks if the query has `data` property */
    hasData(): this is Require<this, "data">;
    /** Checks if the query has `gameShortName` property */
    hasGameShortName(): this is Require<this, "gameShortName">;
    /** Answers to current callback query */
    answerCallbackQuery(params?: string | Partial<TelegramParams.AnswerCallbackQueryParams>): Promise<true>;
    /** Sets the result of an interaction with a Web App and sends a corresponding message  */
    answerWebAppQuery(params: TelegramParams.AnswerWebAppQueryParams): Promise<TelegramObjects.TelegramSentWebAppMessage>;
    /** Answers to current callback query. An alias for `answerCallbackQuery` */
    answer(params?: string | Partial<TelegramParams.AnswerCallbackQueryParams>): Promise<true>;
    /** Edits a callback query messages text */
    editText(text: TelegramParams.EditMessageTextParams["text"], params?: Partial<TelegramParams.EditMessageTextParams>): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
    /** Edits a callback query messages caption */
    editCaption(caption: NonNullable<TelegramParams.EditMessageCaptionParams["caption"]>, params?: Partial<TelegramParams.EditMessageCaptionParams>): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
    /** Edits a callback query messages media */
    editMedia(media: TelegramParams.EditMessageMediaParams["media"], params?: Partial<TelegramParams.EditMessageMediaParams>): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
    /** Edits a callback query messages live location */
    editLiveLocation(params: TelegramParams.EditMessageLiveLocationParams): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
    /** Stops a callback query messages live location */
    stopLiveLocation(params?: TelegramParams.StopMessageLiveLocationParams): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
    /** Edits a callback query messages reply markup */
    editReplyMarkup(replyMarkup: TelegramParams.EditMessageReplyMarkupParams["reply_markup"], params?: Partial<TelegramParams.EditMessageReplyMarkupParams>): Promise<true | TelegramObjects.TelegramMessage> | Promise<true | MessageContext<Bot>>;
}
interface CallbackQueryContext<Bot extends BotLike> extends Constructor<CallbackQueryContext<Bot>>, CallbackQuery, SendMixin<Bot>, CloneMixin<Bot, CallbackQueryContext<Bot>, CallbackQueryContextOptions<Bot>> {
}

interface ChatBoostContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramChatBoostUpdated;
    updateId: number;
}
/** This object represents a boost added to a chat or changed. */
declare class ChatBoostContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramChatBoostUpdated;
    constructor(options: ChatBoostContextOptions<Bot>);
}
interface ChatBoostContext<Bot extends BotLike> extends Constructor<ChatBoostContext<Bot>>, ChatBoostUpdated, SendMixin<Bot>, CloneMixin<Bot, ChatBoostContext<Bot>, ChatBoostContextOptions<Bot>> {
}

interface ChatJoinRequestContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramChatJoinRequest;
    updateId: number;
}
/**
 * Represents a join request sent to a chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatjoinrequest)
 */
declare class ChatJoinRequestContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramChatJoinRequest;
    constructor(options: ChatJoinRequestContextOptions<Bot>);
    /** Approves chat join request */
    approve(): Promise<true>;
    /** Declines chat join request */
    decline(): Promise<true>;
}
interface ChatJoinRequestContext<Bot extends BotLike> extends Constructor<ChatJoinRequestContext<Bot>>, ChatJoinRequest, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, ChatInviteControlMixin<Bot>, CloneMixin<Bot, ChatJoinRequestContext<Bot>, ChatJoinRequestContextOptions<Bot>> {
}

interface ChatMemberContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramChatMemberUpdated;
    updateId: number;
    type?: UpdateName;
}
/**
 * This object represents changes in the status of a chat member.
 *
 * [Documentation](https://core.telegram.org/bots/api/#chatmemberupdated)
 */
declare class ChatMemberContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramChatMemberUpdated;
    constructor(options: ChatMemberContextOptions<Bot>);
    /** Does this update have `invite_link` property? */
    hasInviteLink(): this is Require<this, "inviteLink">;
}
interface ChatMemberContext<Bot extends BotLike> extends Constructor<ChatMemberContext<Bot>>, ChatMemberUpdated, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, ChatControlMixin<Bot>, CloneMixin<Bot, ChatMemberContext<Bot>, ChatMemberContextOptions<Bot>> {
}

interface ChatSharedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object contains information about the chat whose identifier was shared with the bot using a `KeyboardButtonRequestChat` button. */
declare class ChatSharedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    private event;
    constructor(options: ChatSharedContextOptions<Bot>);
    /** Identifier of the request */
    get requestId(): number;
    /** Identifier of the shared chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the chat and could be unable to use this identifier, unless the chat is already known to the bot by some other means. */
    get sharedChatId(): number;
    /** Title of the chat, if the title was requested by the bot. */
    get title(): string | undefined;
    /** Username of the chat, if the username was requested by the bot and available. */
    get username(): string | undefined;
    /** Available sizes of the chat photo, if the photo was requested by the bot. */
    get photo(): PhotoSize[] | undefined;
}
interface ChatSharedContext<Bot extends BotLike> extends Constructor<ChatSharedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ChatSharedContext<Bot>, ChatSharedContextOptions<Bot>> {
}

interface ChosenInlineResultContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramChosenInlineResult;
    updateId: number;
}
/**
 * The result of an inline query that was chosen by
 * a user and sent to their chat partner
 */
declare class ChosenInlineResultContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramChosenInlineResult;
    constructor(options: ChosenInlineResultContextOptions<Bot>);
    /** Checks if the result has `location` property */
    hasLocation(): this is Require<this, "location">;
    /** Checks if the query has `inlineMessageId` property */
    hasInlineMessageId(): this is Require<this, "inlineMessageId">;
    /** Edits a callback query messages text */
    editText(text: TelegramParams.EditMessageTextParams["text"], params?: Partial<TelegramParams.EditMessageTextParams>): Promise<true | TelegramObjects.TelegramMessage>;
    /** Edits a callback query messages caption */
    editCaption(caption: NonNullable<TelegramParams.EditMessageCaptionParams["caption"]>, params?: Partial<TelegramParams.EditMessageCaptionParams>): Promise<true | TelegramObjects.TelegramMessage>;
    /** Edits a callback query messages media */
    editMedia(media: TelegramParams.EditMessageMediaParams["media"], params?: Partial<TelegramParams.EditMessageMediaParams>): Promise<true | TelegramObjects.TelegramMessage>;
    /** Edits a callback query messages live location */
    editLiveLocation(params: TelegramParams.EditMessageLiveLocationParams): Promise<true | TelegramObjects.TelegramMessage>;
    /** Stops a callback query messages live location */
    stopLiveLocation(params?: TelegramParams.StopMessageLiveLocationParams): Promise<true | TelegramObjects.TelegramMessage>;
    /** Edits a callback query messages reply markup */
    editReplyMarkup(replyMarkup: TelegramParams.EditMessageReplyMarkupParams["reply_markup"], params?: Partial<TelegramParams.EditMessageReplyMarkupParams>): Promise<true | TelegramObjects.TelegramMessage>;
}
interface ChosenInlineResultContext<Bot extends BotLike> extends Constructor<ChosenInlineResultContext<Bot>>, ChosenInlineResult, SendMixin<Bot>, ChatActionMixin<Bot>, CloneMixin<Bot, ChosenInlineResultContext<Bot>, ChosenInlineResultContextOptions<Bot>> {
}

interface DeleteChatPhotoContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** Service message: the chat photo was deleted */
declare class DeleteChatPhotoContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: DeleteChatPhotoContextOptions<Bot>);
}
interface DeleteChatPhotoContext<Bot extends BotLike> extends Constructor<DeleteChatPhotoContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, DeleteChatPhotoContext<Bot>, DeleteChatPhotoContextOptions<Bot>> {
}

interface ForumTopicClosedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about a forum topic closed in the chat. Currently holds no information. */
declare class ForumTopicClosedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: ForumTopicClosedContextOptions<Bot>);
}
interface ForumTopicClosedContext<Bot extends BotLike> extends Constructor<ForumTopicClosedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ForumTopicClosedContext<Bot>, ForumTopicClosedContextOptions<Bot>> {
}

interface ForumTopicCreatedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about a new forum topic created in the chat. */
declare class ForumTopicCreatedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    private event;
    constructor(options: ForumTopicCreatedContextOptions<Bot>);
    /** Name of the topic */
    get name(): string;
    /** Color of the topic icon in RGB format */
    get iconColor(): number;
    /** Unique identifier of the custom emoji shown as the topic icon */
    get iconCustomEmojiId(): string | undefined;
    /** Checks whether the event has `iconCustomEmojiId` property */
    hasIconCustomEmojiId(): this is Require<this, "iconCustomEmojiId">;
}
interface ForumTopicCreatedContext<Bot extends BotLike> extends Constructor<ForumTopicCreatedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ForumTopicCreatedContext<Bot>, ForumTopicCreatedContextOptions<Bot>> {
}

interface ForumTopicEditedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about an edited forum topic. */
declare class ForumTopicEditedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    private event;
    constructor(options: ForumTopicEditedContextOptions<Bot>);
    /** New name of the topic, if it was edited */
    get name(): string | undefined;
    /** Checks whether the `name` property has been edited */
    hasName(): this is Require<this, "name">;
    /** New identifier of the custom emoji shown as the topic icon, if it was edited; an empty string if the icon was removed */
    get iconCustomEmojiId(): string | undefined;
    /** Checks whether the `iconCustomEmojiId` property has been edited */
    hasIconCustomEmojiId(): this is Require<this, "iconCustomEmojiId">;
}
interface ForumTopicEditedContext<Bot extends BotLike> extends Constructor<ForumTopicEditedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ForumTopicEditedContext<Bot>, ForumTopicEditedContextOptions<Bot>> {
}

interface ForumTopicReopenedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about a forum topic reopened in the chat. Currently holds no information. */
declare class ForumTopicReopenedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: ForumTopicReopenedContextOptions<Bot>);
    /** Checks whether this topic is actually a 'General' one */
    isGeneralTopic(): this is RequireValue<this, "threadId", undefined>;
}
interface ForumTopicReopenedContext<Bot extends BotLike> extends Constructor<ForumTopicReopenedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ForumTopicReopenedContext<Bot>, ForumTopicReopenedContextOptions<Bot>> {
}

interface GeneralForumTopicHiddenContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about General forum topic hidden in the chat. Currently holds no information. */
declare class GeneralForumTopicHiddenContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GeneralForumTopicHiddenContextOptions<Bot>);
    /** Checks whether this topic is actually a 'General' one */
    isGeneralTopic(): this is RequireValue<this, "threadId", undefined>;
}
interface GeneralForumTopicHiddenContext<Bot extends BotLike> extends Constructor<GeneralForumTopicHiddenContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GeneralForumTopicHiddenContext<Bot>, GeneralForumTopicHiddenContextOptions<Bot>> {
}

interface GeneralForumTopicUnhiddenContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about General forum topic unhidden in the chat. Currently holds no information. */
declare class GeneralForumTopicUnhiddenContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GeneralForumTopicUnhiddenContextOptions<Bot>);
    /** Checks whether this topic is actually a 'General' one */
    isGeneralTopic(): this is RequireValue<this, "threadId", undefined>;
}
interface GeneralForumTopicUnhiddenContext<Bot extends BotLike> extends Constructor<GeneralForumTopicUnhiddenContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GeneralForumTopicUnhiddenContext<Bot>, GeneralForumTopicUnhiddenContextOptions<Bot>> {
}

interface GiveawayCompletedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about the creation of a scheduled giveaway. Currently holds no information. */
declare class GiveawayCompletedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GiveawayCompletedContextOptions<Bot>);
    /** Giveaway completed */
    get eventGiveaway(): GiveawayCompleted;
}
interface GiveawayCompletedContext<Bot extends BotLike> extends Constructor<GiveawayCompletedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GiveawayCompletedContext<Bot>, GiveawayCompletedContextOptions<Bot>> {
}

interface GiveawayCreatedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about the creation of a scheduled giveaway. */
declare class GiveawayCreatedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GiveawayCreatedContextOptions<Bot>);
    get eventGiveaway(): GiveawayCreated;
}
interface GiveawayCreatedContext<Bot extends BotLike> extends Constructor<GiveawayCreatedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GiveawayCreatedContext<Bot>, GiveawayCreatedContextOptions<Bot>> {
}

interface GiveawayWinnersContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a message about the completion of a giveaway with public winners. */
declare class GiveawayWinnersContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GiveawayWinnersContextOptions<Bot>);
    /** Giveaway winners */
    get eventGiveaway(): GiveawayWinners;
}
interface GiveawayWinnersContext<Bot extends BotLike> extends Constructor<GiveawayWinnersContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ForumMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GiveawayWinnersContext<Bot>, GiveawayWinnersContextOptions<Bot>> {
}

interface GroupChatCreatedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** service message: the group has been created */
declare class GroupChatCreatedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: GroupChatCreatedContextOptions<Bot>);
}
interface GroupChatCreatedContext<Bot extends BotLike> extends Constructor<GroupChatCreatedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, GroupChatCreatedContext<Bot>, GroupChatCreatedContextOptions<Bot>> {
}

interface InlineQueryContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramInlineQuery;
    updateId: number;
}
/**
 * This object represents an incoming inline query. When the user sends an empty query, your bot could return some default or trending results.
 *
 * [Documentation](https://core.telegram.org/bots/api/#inlinequery)
 */
declare class InlineQueryContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramInlineQuery;
    constructor(options: InlineQueryContextOptions<Bot>);
    /** Sender's ID */
    get senderId(): number;
    /** Checks if query has `location` property */
    hasLocation(): this is Require<this, "location">;
    /** Answers to inline query */
    answerInlineQuery(results: TelegramObjects.TelegramInlineQueryResult[], params?: Partial<TelegramParams.AnswerInlineQueryParams>): Promise<true>;
    /** Answers to inline query. An alias for `answerInlineQuery` */
    answer(results: TelegramObjects.TelegramInlineQueryResult[], params?: Partial<TelegramParams.AnswerInlineQueryParams>): Promise<true>;
}
interface InlineQueryContext<Bot extends BotLike> extends Constructor<InlineQueryContext<Bot>>, InlineQuery, CloneMixin<Bot, InlineQueryContext<Bot>, InlineQueryContextOptions<Bot>> {
}

interface InvoiceContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * Message is an invoice for a [payment](https://core.telegram.org/bots/api/#payments), information about the invoice. [More about payments »](https://core.telegram.org/bots/api/#payments)
 *
 * [Documentation](https://core.telegram.org/bots/api/#invoice)
 */
declare class InvoiceContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: InvoiceContextOptions<Bot>);
    /** Invoice */
    get eventInvoice(): Invoice;
}
interface InvoiceContext<Bot extends BotLike> extends Constructor<InvoiceContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, InvoiceContext<Bot>, InvoiceContextOptions<Bot>> {
}

interface LeftChatMemberContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** A member was removed from the group, information about them (this member may be the bot itself) */
declare class LeftChatMemberContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: LeftChatMemberContextOptions<Bot>);
    /** Left chat member */
    get eventMember(): User;
}
interface LeftChatMemberContext<Bot extends BotLike> extends Constructor<LeftChatMemberContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, LeftChatMemberContext<Bot>, LeftChatMemberContextOptions<Bot>> {
}

interface LocationContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a point on the map.
 *
 * [Documentation](https://core.telegram.org/bots/api/#location)
 */
declare class LocationContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: LocationContextOptions<Bot>);
    /** Location */
    get eventLocation(): Location;
}
interface LocationContext<Bot extends BotLike> extends Constructor<LocationContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, LocationContext<Bot>, LocationContextOptions<Bot>> {
}

interface MessageAutoDeleteTimerChangedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about a change in auto-delete timer settings.
 *
 * [Documentation](https://core.telegram.org/bots/api/#messageautodeletetimerchanged)
 */
declare class MessageAutoDeleteTimerChangedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: MessageAutoDeleteTimerChangedContextOptions<Bot>);
    /** Message auto delete timer */
    get autoDeleteTimer(): MessageAutoDeleteTimerChanged;
}
interface MessageAutoDeleteTimerChangedContext<Bot extends BotLike> extends Constructor<MessageAutoDeleteTimerChangedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, MessageAutoDeleteTimerChangedContext<Bot>, MessageAutoDeleteTimerChangedContextOptions<Bot>> {
}

interface MessageReactionCountContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessageReactionCountUpdated;
    updateId: number;
}
/** This object represents reaction changes on a message with anonymous reactions. */
declare class MessageReactionCountContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessageReactionCountUpdated;
    constructor(options: MessageReactionCountContextOptions<Bot>);
}
interface MessageReactionCountContext<Bot extends BotLike> extends Constructor<MessageReactionCountContext<Bot>>, MessageReactionCountUpdated, SendMixin<Bot>, NodeMixin<Bot>, CloneMixin<Bot, MessageReactionCountContext<Bot>, MessageReactionCountContextOptions<Bot>> {
}

interface MessageReactionContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessageReactionUpdated;
    updateId: number;
}
/** This object represents a change of a reaction on a message performed by a user. */
declare class MessageReactionContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessageReactionUpdated;
    constructor(options: MessageReactionContextOptions<Bot>);
    /** Checks if context has the `user` property */
    hasUser(): this is Require<this, "user">;
    /** Checks if context has the `actorChat` property */
    hasActorChat(): this is Require<this, "actorChat">;
}
interface MessageReactionContext<Bot extends BotLike> extends Constructor<MessageReactionContext<Bot>>, MessageReactionUpdated, SendMixin<Bot>, NodeMixin<Bot>, CloneMixin<Bot, MessageReactionContext<Bot>, MessageReactionContextOptions<Bot>> {
}

interface MigrateFromChatIdContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** The group has been migrated to a supergroup with the specified identifier. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this identifier. */
declare class MigrateFromChatIdContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: MigrateFromChatIdContextOptions<Bot>);
    /** Chat ID */
    get eventId(): number;
}
interface MigrateFromChatIdContext<Bot extends BotLike> extends Constructor<MigrateFromChatIdContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, ChatInviteControlMixin<Bot>, CloneMixin<Bot, MigrateFromChatIdContext<Bot>, MigrateFromChatIdContextOptions<Bot>> {
}

interface MigrateToChatIdContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** The group has been migrated to a supergroup with the specified identifier. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this identifier. */
declare class MigrateToChatIdContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: MigrateToChatIdContextOptions<Bot>);
    /** Chat ID */
    get eventId(): number;
}
interface MigrateToChatIdContext<Bot extends BotLike> extends Constructor<MigrateToChatIdContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, ChatInviteControlMixin<Bot>, CloneMixin<Bot, MigrateToChatIdContext<Bot>, MigrateToChatIdContextOptions<Bot>> {
}

interface NewChatMembersContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**  New members that were added to the group or supergroup and information about them (the bot itself may be one of these members) */
declare class NewChatMembersContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: NewChatMembersContextOptions<Bot>);
    /** New chat members */
    get eventMembers(): User[];
}
interface NewChatMembersContext<Bot extends BotLike> extends Constructor<NewChatMembersContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, NewChatMembersContext<Bot>, NewChatMembersContextOptions<Bot>> {
}

interface NewChatPhotoContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** A chat photo was change to this value */
declare class NewChatPhotoContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: NewChatPhotoContextOptions<Bot>);
    /** New chat photo */
    get eventPhoto(): PhotoSize[];
}
interface NewChatPhotoContext<Bot extends BotLike> extends Constructor<NewChatPhotoContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, NewChatPhotoContext<Bot>, NewChatPhotoContextOptions<Bot>> {
}

interface NewChatTitleContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** A chat title was changed to this value */
declare class NewChatTitleContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: NewChatTitleContextOptions<Bot>);
    /** New chat title */
    get eventTitle(): string;
}
interface NewChatTitleContext<Bot extends BotLike> extends Constructor<NewChatTitleContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, NewChatTitleContext<Bot>, NewChatTitleContextOptions<Bot>> {
}

interface PassportDataContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * Describes Telegram Passport data shared with the bot by the user.
 *
 * [Documentation](https://core.telegram.org/bots/api/#passportdata)
 */
declare class PassportDataContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: PassportDataContextOptions<Bot>);
    /** Telegram Passport data */
    get passportData(): PassportData;
}
interface PassportDataContext<Bot extends BotLike> extends Constructor<PassportDataContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, PassportDataContext<Bot>, PassportDataContextOptions<Bot>> {
}

interface PinnedMessageContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** Specified message was pinned. Note that the Message object in this field will not contain further *reply\_to\_message* fields even if it itself is a reply. */
declare class PinnedMessageContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: PinnedMessageContextOptions<Bot>);
    /** Pinned message */
    get eventMessage(): MessageContext<Bot>;
}
interface PinnedMessageContext<Bot extends BotLike> extends Constructor<PinnedMessageContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, PinnedMessageContext<Bot>, PinnedMessageContextOptions<Bot>> {
}

interface PollAnswerContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramPollAnswer;
    updateId: number;
}
/**
 * This object represents an answer of a user in a non-anonymous poll.
 *
 * [Documentation](https://core.telegram.org/bots/api/#pollanswer)
 */
declare class PollAnswerContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramPollAnswer;
    constructor(options: PollAnswerContextOptions<Bot>);
    /** Checks whether the current answer was non-anonymous and contains `user` field */
    isFromUser(): this is Require<this, "user">;
    /** Checks if current answer was answered anonymously and the `voterChat` is available */
    isFromChat(): this is Require<this, "voterChat">;
}
interface PollAnswerContext<Bot extends BotLike> extends Constructor<PollAnswerContext<Bot>>, PollAnswer, SendMixin<Bot>, ChatActionMixin<Bot>, CloneMixin<Bot, PollAnswerContext<Bot>, PollAnswerContextOptions<Bot>> {
}

interface PollContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramPoll;
    updateId: number;
}
/**
 * This object contains information about a poll.
 *
 * [Documentation](https://core.telegram.org/bots/api/#poll)
 */
declare class PollContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramPoll;
    constructor(options: PollContextOptions<Bot>);
    /** Returns `true` if current poll is a regular one */
    isRegular(): this is RequireValue<this, "type", PollType.Regular>;
    /** Returns `true` if current poll is a quiz */
    isQuiz(): this is RequireValue<this, "type", PollType.Quiz>;
    /** Checks if poll has `correctOptionId` property */
    hasCorrectOptionId(): this is Require<this, "correctOptionId">;
    /** Checks if poll has `explanation` property */
    hasExplanation(): this is Require<this, "explanation">;
    /** Checks if poll has `explanationEntities` property */
    hasExplanationEntities(): this is Require<this, "explanationEntities">;
    /** Checks if poll has `openPeriod` property */
    hasOpenPeriod(): this is Require<this, "openPeriod">;
    /** Checks if poll has `closeDate` property */
    hasCloseDate(): this is Require<this, "closeDate">;
}
interface PollContext<Bot extends BotLike> extends Constructor<PollContext<Bot>>, Poll, CloneMixin<Bot, PollContext<Bot>, PollContextOptions<Bot>> {
}

interface PreCheckoutQueryContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramPreCheckoutQuery;
    updateId: number;
}
/**
 * This object contains information about an incoming pre-checkout query.
 *
 * [Documentation](https://core.telegram.org/bots/api/#precheckoutquery)
 */
declare class PreCheckoutQueryContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramPreCheckoutQuery;
    constructor(options: PreCheckoutQueryContextOptions<Bot>);
    /** Checks if the query has `shippingOptionId` property */
    hasShippingOptionId(): this is Require<this, "shippingOptionId">;
    /** Checks if the query has `orderInfo` property */
    hasOrderInfo(): this is Require<this, "orderInfo">;
    /** Answers to the pending pre-checkout query */
    answerPreCheckoutQuery(params: Optional<TelegramParams.AnswerPreCheckoutQueryParams, "pre_checkout_query_id">): Promise<true>;
    /** Answers to the pending pre-checkout query. An alias for `answerPreCheckoutQuery` */
    answer(params: Optional<TelegramParams.AnswerPreCheckoutQueryParams, "pre_checkout_query_id">): Promise<true>;
}
interface PreCheckoutQueryContext<Bot extends BotLike> extends Constructor<PreCheckoutQueryContext<Bot>>, PreCheckoutQuery, SendMixin<Bot>, ChatActionMixin<Bot>, CloneMixin<Bot, PreCheckoutQueryContext<Bot>, PreCheckoutQueryContextOptions<Bot>> {
}

interface ProximityAlertTriggeredContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents the content of a service message, sent whenever a user in the chat triggers a proximity alert set by another user.
 *
 * [Documentation](https://core.telegram.org/bots/api/#proximityalerttriggered)
 */
declare class ProximityAlertTriggeredContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: ProximityAlertTriggeredContextOptions<Bot>);
    /**
     * Service message.
     * A user in the chat triggered another user's proximity alert
     * while sharing Live Location.
     */
    get proximityAlert(): ProximityAlertTriggered;
}
interface ProximityAlertTriggeredContext<Bot extends BotLike> extends Constructor<ProximityAlertTriggeredContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ProximityAlertTriggeredContext<Bot>, ProximityAlertTriggeredContextOptions<Bot>> {
}

interface RemovedChatBoostContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramChatBoostRemoved;
    updateId: number;
}
/** This object represents a boost removed from a chat. */
declare class RemovedChatBoostContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramChatBoostRemoved;
    constructor(options: RemovedChatBoostContextOptions<Bot>);
}
interface RemovedChatBoostContext<Bot extends BotLike> extends Constructor<RemovedChatBoostContext<Bot>>, ChatBoostRemoved, SendMixin<Bot>, CloneMixin<Bot, RemovedChatBoostContext<Bot>, RemovedChatBoostContextOptions<Bot>> {
}

interface ShippingQueryContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramShippingQuery;
    updateId: number;
}
/**
 * This object contains information about an incoming shipping query.
 *
 * [Documentation](https://core.telegram.org/bots/api/#shippingquery)
 */
declare class ShippingQueryContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramShippingQuery;
    constructor(options: ShippingQueryContextOptions<Bot>);
    /** Replies to shipping queries */
    answerShippingQuery<Ok extends boolean>(ok?: Ok, params?: Optional<TelegramParams.AnswerShippingQueryParams, "shipping_query_id" | "ok"> & Required<Pick<TelegramParams.AnswerShippingQueryParams, true extends Ok ? "shipping_options" : "error_message">>): Promise<true>;
    /** Replies to shipping queries. An alias for `answerShippingQuery` */
    answer<Ok extends boolean>(ok?: Ok, params?: Optional<TelegramParams.AnswerShippingQueryParams, "shipping_query_id" | "ok"> & Required<Pick<TelegramParams.AnswerShippingQueryParams, true extends Ok ? "shipping_options" : "error_message">>): Promise<true>;
}
interface ShippingQueryContext<Bot extends BotLike> extends Constructor<ShippingQueryContext<Bot>>, ShippingQuery, SendMixin<Bot>, ChatActionMixin<Bot>, CloneMixin<Bot, ShippingQueryContext<Bot>, ShippingQueryContextOptions<Bot>> {
}

interface SuccessfulPaymentContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object contains basic information about a successful payment.
 *
 * [Documentation](https://core.telegram.org/bots/api/#successfulpayment)
 */
declare class SuccessfulPaymentContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: SuccessfulPaymentContextOptions<Bot>);
    /** Received payment */
    get eventPayment(): SuccessfulPayment;
}
interface SuccessfulPaymentContext<Bot extends BotLike> extends Constructor<SuccessfulPaymentContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, SuccessfulPaymentContext<Bot>, SuccessfulPaymentContextOptions<Bot>> {
}

interface UsersSharedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object contains information about the users whose identifiers were shared with the bot using a `KeyboardButtonRequestUsers` button. */
declare class UsersSharedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    private event;
    constructor(options: UsersSharedContextOptions<Bot>);
    /** Identifier of the request */
    get requestId(): number;
    /** Identifier of the shared user. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the user and could be unable to use this identifier, unless the user is already known to the bot by some other means. */
    get users(): SharedUser[];
}
interface UsersSharedContext<Bot extends BotLike> extends Constructor<UsersSharedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, UsersSharedContext<Bot>, UsersSharedContextOptions<Bot>> {
}

interface VideoChatEndedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about a video chat ended in the chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#videochatended)
 */
declare class VideoChatEndedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: VideoChatEndedContextOptions<Bot>);
    /** Service message: video chat ended */
    get eventEnded(): VideoChatEnded;
}
interface VideoChatEndedContext<Bot extends BotLike> extends Constructor<VideoChatEndedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, VideoChatEndedContext<Bot>, VideoChatEndedContextOptions<Bot>> {
}

interface VideoChatParticipantsInvitedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about new members invited to a video chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#videochatparticipantsinvited)
 */
declare class VideoChatParticipantsInvitedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: VideoChatParticipantsInvitedContextOptions<Bot>);
    /** Service message: new participants invited to a video chat */
    get eventParticipantsInvited(): VideoChatParticipantsInvited;
}
interface VideoChatParticipantsInvitedContext<Bot extends BotLike> extends Constructor<VideoChatParticipantsInvitedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, VideoChatParticipantsInvitedContext<Bot>, VideoChatParticipantsInvitedContextOptions<Bot>> {
}

interface VideoChatScheduledContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about a video chat scheduled in the chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#videochatscheduled)
 */
declare class VideoChatScheduledContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: VideoChatScheduledContextOptions<Bot>);
    /** Service message: video chat scheduled */
    get eventScheduled(): VideoChatScheduled;
}
interface VideoChatScheduledContext<Bot extends BotLike> extends Constructor<VideoChatScheduledContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, VideoChatScheduledContext<Bot>, VideoChatScheduledContextOptions<Bot>> {
}

interface VideoChatStartedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about a video chat started in the chat.
 *
 * [Documentation](https://core.telegram.org/bots/api/#videochatstarted)
 */
declare class VideoChatStartedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: VideoChatStartedContextOptions<Bot>);
    /** Service message: video chat started */
    get eventStarted(): VideoChatStarted;
}
interface VideoChatStartedContext<Bot extends BotLike> extends Constructor<VideoChatStartedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, VideoChatStartedContext<Bot>, VideoChatStartedContextOptions<Bot>> {
}

interface WebAppDataContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * Describes data sent from a [Web App](https://core.telegram.org/bots/webapps) to the bot.
 *
 * [Documentation](https://core.telegram.org/bots/api/#webappdata)
 */
declare class WebAppDataContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: WebAppDataContextOptions<Bot>);
    /** The data. Be aware that a bad client can send arbitrary data in this field. */
    get data(): string;
    /**
     * Text of the `web_app` keyboard button, from which the Web App was opened.
     * Be aware that a bad client can send arbitrary data in this field.
     */
    get buttonText(): string;
}
interface WebAppDataContext<Bot extends BotLike> extends Constructor<WebAppDataContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, CloneMixin<Bot, WebAppDataContext<Bot>, WebAppDataContextOptions<Bot>> {
}

interface WriteAccessAllowedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object represents a service message about a user allowing a bot to write messages after adding it to the attachment menu, launching a Web App from a link, or accepting an explicit request from a Web App sent by the method [requestWriteAccess](https://core.telegram.org/bots/webapps#initializing-mini-apps).
 *
 * [Documentation](https://core.telegram.org/bots/api/#writeaccessallowed)
 */
declare class WriteAccessAllowedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: WriteAccessAllowedContextOptions<Bot>);
    /** Service message: user allows a bot to write messages after adding it to the attachment menu */
    get eventAllowance(): WriteAccessAllowed;
}
interface WriteAccessAllowedContext<Bot extends BotLike> extends Constructor<WriteAccessAllowedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, WriteAccessAllowedContext<Bot>, WriteAccessAllowedContextOptions<Bot>> {
}

interface BoostAddedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about a forum topic closed in the chat. Currently holds no information. */
declare class BoostAddedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    /** Create new BoostAddedContext */
    constructor(options: BoostAddedContextOptions<Bot>);
    /** Number of boosts added by the user */
    get boostCount(): number;
}
interface BoostAddedContext<Bot extends BotLike> extends Constructor<BoostAddedContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, BoostAddedContext<Bot>, BoostAddedContextOptions<Bot>> {
}

interface BusinessConnectionContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramBusinessConnection;
    updateId: number;
}
/** This object  Describes the connection of the bot with a business account. */
declare class BusinessConnectionContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramBusinessConnection;
    /** Create new BusinessConnectionContext */
    constructor(options: BusinessConnectionContextOptions<Bot>);
}
interface BusinessConnectionContext<Bot extends BotLike> extends Constructor<BusinessConnectionContext<Bot>>, BusinessConnection, CloneMixin<Bot, BusinessConnectionContext<Bot>, BusinessConnectionContextOptions<Bot>> {
}

interface BusinessMessagesDeletedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramBusinessMessagesDeleted;
    updateId: number;
}
/** This object represents a boost added to a chat or changed. */
declare class BusinessMessagesDeletedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramBusinessMessagesDeleted;
    /** Create new BusinessMessagesDeletedContext */
    constructor(options: BusinessMessagesDeletedContextOptions<Bot>);
}
interface BusinessMessagesDeletedContext<Bot extends BotLike> extends Constructor<BusinessMessagesDeletedContext<Bot>>, BusinessMessagesDeleted, CloneMixin<Bot, BusinessMessagesDeletedContext<Bot>, BusinessMessagesDeletedContextOptions<Bot>> {
}

interface ChatBackgroundSetContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/** This object represents a service message about chat background set. */
declare class ChatBackgroundSetContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: ChatBackgroundSetContextOptions<Bot>);
    /** Type of the background */
    get type(): BackgroundTypeChatTheme | BackgroundTypeFill | BackgroundTypePattern | BackgroundTypeWallpaper;
}
interface ChatBackgroundSetContext<Bot extends BotLike> extends Constructor<ChatBackgroundSetContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, ChatInviteControlMixin<Bot>, ChatControlMixin<Bot>, ChatSenderControlMixin<Bot>, ChatMemberControlMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, ChatBackgroundSetContext<Bot>, ChatBackgroundSetContextOptions<Bot>> {
}

/**
 * This object contains basic information about a refunded payment.
 *
 * [Documentation](https://core.telegram.org/bots/api/#refundedpayment)
 */
declare class RefundedPayment {
    payload: TelegramObjects.TelegramRefundedPayment;
    constructor(payload: TelegramObjects.TelegramRefundedPayment);
    get [Symbol.toStringTag](): string;
    /**
     * Three-letter ISO 4217 [currency](https://core.telegram.org/bots/payments#supported-currencies) code, or “XTR” for payments in [Telegram Stars](https://t.me/BotNews/90). Currently, always “XTR”
     */
    get currency(): TelegramObjects.TelegramCurrencies;
    /**
     * Total refunded price in the *smallest units* of the currency (integer, **not** float/double). For example, for a price of `US$ 1.45`, `total_amount = 145`. See the *exp* parameter in [currencies.json](https://core.telegram.org/bots/payments/currencies.json), it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
     */
    get totalAmount(): number;
    /**
     * Bot-specified invoice payload
     */
    get invoicePayload(): string;
    /**
     * Telegram payment identifier
     */
    get telegramPaymentChargeId(): string;
    /**
     * *Optional*. Provider payment identifier
     */
    get providerPaymentChargeId(): string | undefined;
}

interface RefundedPaymentContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramMessage;
    updateId: number;
}
/**
 * This object contains basic information about a successful payment.
 *
 * [Documentation](https://core.telegram.org/bots/api/#RefundedPayment)
 */
declare class RefundedPaymentContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramMessage;
    constructor(options: RefundedPaymentContextOptions<Bot>);
    /**
     * This object contains basic information about a refunded payment.
     *
     * [Documentation](https://core.telegram.org/bots/api/#refundedpayment)
     */
    get eventRefundedPayment(): RefundedPayment;
}
interface RefundedPaymentContext<Bot extends BotLike> extends Constructor<RefundedPaymentContext<Bot>>, Message, TargetMixin, SendMixin<Bot>, ChatActionMixin<Bot>, NodeMixin<Bot>, PinsMixin<Bot>, CloneMixin<Bot, RefundedPaymentContext<Bot>, RefundedPaymentContextOptions<Bot>> {
}

interface PaidMediaPurchasedContextOptions<Bot extends BotLike> {
    bot: Bot;
    update: TelegramObjects.TelegramUpdate;
    payload: TelegramObjects.TelegramPaidMediaPurchased;
    updateId: number;
}
/**
 * This object contains information about a paid media purchase.
 *
 * [Documentation](https://core.telegram.org/bots/api#paidmediapurchased)
 */
declare class PaidMediaPurchasedContext<Bot extends BotLike> extends Context<Bot> {
    /** The raw data that is used for this Context */
    payload: TelegramObjects.TelegramPaidMediaPurchased;
    constructor(options: PaidMediaPurchasedContextOptions<Bot>);
    get from(): User | undefined;
    /** Bot-specified paid media payload */
    get paidMediaPayload(): string;
}
interface PaidMediaPurchasedContext<Bot extends BotLike> extends Constructor<PaidMediaPurchasedContext<Bot>>, TargetMixin, SendMixin<Bot>, CloneMixin<Bot, PaidMediaPurchasedContext<Bot>, PaidMediaPurchasedContextOptions<Bot>> {
}

/** Helper for getters memoization */
declare function memoizeGetters<T>(cls: new (...args: any[]) => T, fields: (keyof T)[]): void;
/** Helper for construct mixins */
declare const applyMixins: (derivedCtor: any, baseCtors: any[]) => void;
/** Guard to check is it play object */
declare const isPlainObject: (object: object) => object is Record<string, any>;
/** Helper for filter objects */
declare const filterPayload: (payload: Record<string, any>) => Record<string, unknown>;
/** Guard to check is string can be parsed via {@link JSON.parse} */
declare const isParsable: (source: string) => boolean;
/** Array of SERVICE_MESSAGE_EVENTS */
declare const SERVICE_MESSAGE_EVENTS: MessageEventName[];
/** Array of EVENTS */
declare const EVENTS: [keyof Message, MessageEventName][];

/**
 * @module
 *
 * Contexts for GramIO framework
 */

/**
 * Mapping UpdateNames to their contexts
 *
 * @example
 * ```typescript
 * contextMappings["message"] is MessageContext
 * ```
 *
 *  */
declare const contextsMappings: {
    callback_query: typeof CallbackQueryContext;
    chat_join_request: typeof ChatJoinRequestContext;
    chat_member: typeof ChatMemberContext;
    my_chat_member: typeof ChatMemberContext;
    chosen_inline_result: typeof ChosenInlineResultContext;
    delete_chat_photo: typeof DeleteChatPhotoContext;
    group_chat_created: typeof GroupChatCreatedContext;
    inline_query: typeof InlineQueryContext;
    invoice: typeof InvoiceContext;
    left_chat_member: typeof LeftChatMemberContext;
    location: typeof LocationContext;
    message_auto_delete_timer_changed: typeof MessageAutoDeleteTimerChangedContext;
    message: typeof MessageContext;
    channel_post: typeof MessageContext;
    edited_message: typeof MessageContext;
    edited_channel_post: typeof MessageContext;
    business_message: typeof MessageContext;
    edited_business_message: typeof MessageContext;
    deleted_business_messages: typeof BusinessMessagesDeletedContext;
    business_connection: typeof BusinessConnectionContext;
    migrate_from_chat_id: typeof MigrateFromChatIdContext;
    migrate_to_chat_id: typeof MigrateToChatIdContext;
    new_chat_members: typeof NewChatMembersContext;
    new_chat_photo: typeof NewChatPhotoContext;
    new_chat_title: typeof NewChatTitleContext;
    passport_data: typeof PassportDataContext;
    pinned_message: typeof PinnedMessageContext;
    poll_answer: typeof PollAnswerContext;
    poll: typeof PollContext;
    pre_checkout_query: typeof PreCheckoutQueryContext;
    proximity_alert_triggered: typeof ProximityAlertTriggeredContext;
    write_access_allowed: typeof WriteAccessAllowedContext;
    boost_added: typeof BoostAddedContext;
    chat_background_set: typeof ChatBackgroundSetContext;
    forum_topic_created: typeof ForumTopicCreatedContext;
    forum_topic_edited: typeof ForumTopicEditedContext;
    forum_topic_closed: typeof ForumTopicClosedContext;
    forum_topic_reopened: typeof ForumTopicReopenedContext;
    general_forum_topic_hidden: typeof GeneralForumTopicHiddenContext;
    general_forum_topic_unhidden: typeof GeneralForumTopicUnhiddenContext;
    shipping_query: typeof ShippingQueryContext;
    successful_payment: typeof SuccessfulPaymentContext;
    refunded_payment: typeof RefundedPaymentContext;
    users_shared: typeof UsersSharedContext;
    chat_shared: typeof ChatSharedContext;
    video_chat_ended: typeof VideoChatEndedContext;
    video_chat_participants_invited: typeof VideoChatParticipantsInvitedContext;
    video_chat_scheduled: typeof VideoChatScheduledContext;
    video_chat_started: typeof VideoChatStartedContext;
    web_app_data: typeof WebAppDataContext;
    service_message: typeof MessageContext;
    purchased_paid_media: typeof PaidMediaPurchasedContext;
    message_reaction: typeof MessageReactionContext;
    message_reaction_count: typeof MessageReactionCountContext;
    chat_boost: typeof ChatBoostContext;
    removed_chat_boost: typeof RemovedChatBoostContext;
    giveaway_created: typeof GiveawayCreatedContext;
    giveaway_completed: typeof GiveawayCompletedContext;
    giveaway_winners: typeof GiveawayWinnersContext;
};

export { AnimationAttachment, Attachment, type AttachmentType, type AttachmentsMapping, AudioAttachment, BackgroundFillFreeformGradient, BackgroundFillGradient, BackgroundFillSolid, BackgroundTypeChatTheme, BackgroundTypeFill, BackgroundTypePattern, BackgroundTypeWallpaper, Birthdate, BoostAddedContext, BotCommand, BotDescription, type BotLike, BotShortDescription, BusinessConnection, BusinessConnectionContext, BusinessIntro, BusinessLocation, BusinessMessagesDeleted, BusinessMessagesDeletedContext, BusinessOpeningHours, BusinessOpeningHoursInterval, CallbackGame, CallbackQuery, CallbackQueryContext, Chat, ChatAdministratorRights, ChatBackground, ChatBackgroundSetContext, ChatBoost, ChatBoostAdded, ChatBoostContext, ChatBoostRemoved, ChatBoostSourceGiftCode, ChatBoostSourceGiveaway, ChatBoostSourcePremium, ChatBoostUpdated, ChatFullInfo, ChatInviteLink, ChatJoinRequest, ChatJoinRequestContext, ChatLocation, ChatMember, ChatMemberContext, ChatMemberUpdated, ChatPermissions, ChatPhoto, ChatShared, ChatSharedContext, ChatType, ChosenInlineResult, ChosenInlineResultContext, type Constructor, Contact, ContactAttachment, Context, type ContextType, type ContextsMapping, type CustomEventName, type DefaultAttachment, DeleteChatPhotoContext, Dice, DocumentAttachment, EVENTS, EncryptedCredentials, EncryptedPassportElement, EntityType, ExternalReplyInfo, File, FileAttachment, ForumTopicClosed, ForumTopicClosedContext, ForumTopicCreated, ForumTopicCreatedContext, ForumTopicEdited, ForumTopicEditedContext, ForumTopicReopened, ForumTopicReopenedContext, Game, GeneralForumTopicHidden, GeneralForumTopicHiddenContext, GeneralForumTopicUnhidden, GeneralForumTopicUnhiddenContext, type GetDerives, Giveaway, GiveawayCompleted, GiveawayCompletedContext, GiveawayCreated, GiveawayCreatedContext, GiveawayWinners, GiveawayWinnersContext, GroupChatCreatedContext, InaccessibleMessage, InlineKeyboardButton, InlineKeyboardMarkup, InlineQuery, InlineQueryContext, InlineQueryResultLocation, InputLocationMessageContent, InputPollOption, Invoice, InvoiceContext, type JoinUnion, LeftChatMemberContext, LinkPreviewOptions, Location, LocationAttachment, LocationContext, LoginUrl, MaskPosition, type MaybeArray, MenuButton, Message, MessageAutoDeleteTimerChanged, MessageAutoDeleteTimerChangedContext, MessageContext, MessageEntity, type MessageEventName, MessageId, MessageOriginChannel, MessageOriginChat, MessageOriginHiddenUser, MessageOriginUser, MessageReactionContext, MessageReactionCountContext, MessageReactionCountUpdated, MessageReactionUpdated, MigrateFromChatIdContext, MigrateToChatIdContext, NewChatMembersContext, NewChatPhotoContext, NewChatTitleContext, type Optional, OrderInfo, PaidMediaPurchasedContext, PassportData, PassportDataContext, PassportFile, PhotoAttachment, PhotoSize, PinnedMessageContext, Poll, PollAnswer, PollAnswerContext, PollAttachment, PollContext, PollOption, PollType, PreCheckoutQuery, PreCheckoutQueryContext, ProximityAlertTriggered, ProximityAlertTriggeredContext, ReactionCount, ReactionTypeCustomEmoji, ReactionTypeEmoji, ReactionTypePaid, RefundedPaymentContext, RemovedChatBoostContext, type Require, type RequireValue, SERVICE_MESSAGE_EVENTS, SentWebAppMessage, SharedUser, ShippingAddress, ShippingQuery, ShippingQueryContext, type SoftString, StickerAttachment, StickerSet, Story, StoryAttachment, SuccessfulPayment, SuccessfulPaymentContext, TextQuote, Update, type UpdateName, User, UserProfilePhotos, UsersShared, UsersSharedContext, Venue, VenueAttachment, VideoAttachment, VideoChatEnded, VideoChatEndedContext, VideoChatParticipantsInvited, VideoChatParticipantsInvitedContext, VideoChatScheduled, VideoChatScheduledContext, VideoChatStarted, VideoChatStartedContext, VideoNoteAttachment, VoiceAttachment, WebAppData, WebAppDataContext, WebAppInfo, WriteAccessAllowed, WriteAccessAllowedContext, applyMixins, backgroundFillMap, backgroundTypeMap, contextsMappings, filterPayload, isParsable, isPlainObject, memoizeGetters, type tSendAnimation, type tSendAudio, type tSendDocument, type tSendMethods, type tSendPhoto, type tSendSticker, type tSendVideo, type tSendVideoNote, type tSendVoice };
