/**
* This [object](https://core.telegram.org/bots/api/#available-types)
* represents an incoming update.
* At most **one** of the optional parameters can be present in any given update.
*
* @typedef {object} Update
* @property {number} update_id 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](https://core.telegram.org/bots/api/#setwebhook), 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.
* @property {Message} [message] *Optional*. New incoming message of any kind - text, photo, sticker, etc.
* @property {Message} [edited_message] *Optional*. New version of a message that is known to the bot and was edited
* @property {Message} [channel_post] *Optional*. New incoming channel post of any kind - text, photo, sticker, etc.
* @property {Message} [edited_channel_post] *Optional*. New version of a channel post that is known to the bot and
* was
* edited
* @property {InlineQuery} [inline_query] *Optional*. New incoming
* [inline](https://core.telegram.org/bots/api/#inline-mode) query
* @property {ChosenInlineResult} [chosen_inline_result] *Optional*. The result of an
* [inline](https://core.telegram.org/bots/api/#inline-mode) query that was chosen
* by a user and sent to their chat partner. Please see our documentation on the
* [feedback collecting](https://core.telegram.org/bots/inline#collecting-feedback)
* for details on how to enable these updates for your bot.
* @property {CallbackQuery} [callback_query] *Optional*. New incoming callback query
* @property {ShippingQuery} [shipping_query] *Optional*. New incoming shipping query. Only for invoices with flexible
* price
* @property {PreCheckoutQuery} [pre_checkout_query] *Optional*. New incoming pre-checkout query. Contains full
* information about checkout
* @property {Poll} [poll] *Optional*. New poll state. Bots receive only updates about stopped polls and
* polls, which are sent by the bot
* @property {PollAnswer} [poll_answer] *Optional*. A user changed their answer in a non-anonymous poll. Bots receive
* new votes only in polls that were sent by the bot itself.
* @property {ChatMemberUpdated} [my_chat_member] *Optional*. 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.
* @property {ChatMemberUpdated} [chat_member] *Optional*. 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.
* @property {ChatJoinRequest} [chat_join_request] *Optional*. 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.
* @see https://core.telegram.org/bots/api/#update
*/
/**
* Describes the current status of a webhook.
*
* @typedef {object} WebhookInfo
* @property {string} url Webhook URL, may be empty if webhook is not set up
* @property {boolean} has_custom_certificate *True*, if a custom certificate was provided for webhook certificate
* checks
* @property {number} pending_update_count Number of updates awaiting delivery
* @property {string} [ip_address] *Optional*. Currently used webhook IP address
* @property {number} [last_error_date] *Optional*. Unix time for the most recent error that happened when trying to
* deliver an update via webhook
* @property {string} [last_error_message] *Optional*. Error message in human-readable format for the most recent
* error
* that happened when trying to deliver an update via webhook
* @property {number} [last_synchronization_error_date] *Optional*. Unix time of the most recent error that happened
* when trying to synchronize available updates with Telegram datacenters
* @property {number} [max_connections] *Optional*. The maximum allowed number of simultaneous HTTPS connections to
* the
* webhook for update delivery
* @property {string[]} [allowed_updates] *Optional*. A list of update types the bot is subscribed to. Defaults to all
* update types except *chat\_member*
* @see https://core.telegram.org/bots/api/#webhookinfo
*/
/**
* This object represents a Telegram user or bot.
*
* @typedef {object} User
* @property {number} id Unique identifier for this user or bot. 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.
* @property {boolean} is_bot *True*, if this user is a bot
* @property {string} first_name User's or bot's first name
* @property {string} [last_name] *Optional*. User's or bot's last name
* @property {string} [username] *Optional*. User's or bot's username
* @property {string} [language_code] *Optional*. [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag)
* of the user's language
* @property {boolean} [is_premium] *Optional*. *True*, if this user is a Telegram Premium user
* @property {boolean} [added_to_attachment_menu] *Optional*. *True*, if this user added the bot to the attachment
* menu
* @property {boolean} [can_join_groups] *Optional*. *True*, if the bot can be invited to groups. Returned only in
* [getMe](https://core.telegram.org/bots/api/#getme).
* @property {boolean} [can_read_all_group_messages] *Optional*. *True*, if [privacy
* mode](https://core.telegram.org/bots/features#privacy-mode) is disabled for the
* bot. Returned only in [getMe](https://core.telegram.org/bots/api/#getme).
* @property {boolean} [supports_inline_queries] *Optional*. *True*, if the bot supports inline queries. Returned only
* in
* [getMe](https://core.telegram.org/bots/api/#getme).
* @see https://core.telegram.org/bots/api/#user
*/
/**
* This object represents a chat.
*
* @typedef {object} Chat
* @property {number} id 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.
* @property {'private'|'group'|'supergroup'|'channel'} type Type of chat, can be either “private”, “group”,
* “supergroup” or “channel”
* @property {string} [title] *Optional*. Title, for supergroups, channels and group chats
* @property {string} [username] *Optional*. Username, for private chats, supergroups and channels if available
* @property {string} [first_name] *Optional*. First name of the other party in a private chat
* @property {string} [last_name] *Optional*. Last name of the other party in a private chat
* @property {boolean} [is_forum] *Optional*. *True*, if the supergroup chat is a forum (has
* [topics](https://telegram.org/blog/topics-in-groups-collectible-usernames#topics-in-groups)
* enabled)
* @property {ChatPhoto} [photo] *Optional*. Chat photo. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string[]} [active_usernames] *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. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string} [emoji_status_custom_emoji_id] *Optional*. Custom emoji identifier of emoji status of the other
* party in a private chat in Unix time, if any. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {number} [emoji_status_expiration_date] *Optional*. Expiration date of the emoji status of the other party in a private
* chat, if any. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string} [bio] *Optional*. Bio of the other party in a private chat. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [has_private_forwards] *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. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [has_restricted_voice_and_video_messages] *Optional*. *True*, if the privacy settings of the
* other party restrict sending voice and video note messages in the private chat. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [join_to_send_messages] *Optional*. *True*, if users need to join the supergroup before they
* can send messages. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [join_by_request] *Optional*. *True*, if all users directly joining the supergroup need to be
* approved by supergroup administrators. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string} [description] *Optional*. Description, for groups, supergroups and channel chats. Returned
* only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string} [invite_link] *Optional*. Primary invite link, for groups, supergroups and channel chats.
* Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {Message} [pinned_message] *Optional*. The most recent pinned message (by sending date). Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {ChatPermissions} [permissions] *Optional*. Default chat member permissions, for groups and supergroups.
* Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {number} [slow_mode_delay] *Optional*. For supergroups, the minimum allowed delay between consecutive
* messages sent by each unpriviledged user; in seconds. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {number} [message_auto_delete_time] *Optional*. The time after which all messages sent to the chat will
* be
* automatically deleted; in seconds. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [has_aggressive_anti_spam_enabled] *Optional*. *True*, if aggressive anti-spam checks are
* enabled in the supergroup. The field is only available to chat administrators.
* Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [has_hidden_members] *Optional*. *True*, if non-administrators can only get the list of bots
* and administrators in the chat. Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [has_protected_content] *Optional*. *True*, if messages from the chat can't be forwarded to
* other chats. Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {string} [sticker_set_name] *Optional*. For supergroups, name of group sticker set. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {boolean} [can_set_sticker_set] *Optional*. *True*, if the bot can change the group sticker set. Returned
* only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {number} [linked_chat_id] *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. Returned only in
* [getChat](https://core.telegram.org/bots/api/#getchat).
* @property {ChatLocation} [location] *Optional*. For supergroups, the location to which the supergroup is connected.
* Returned only in [getChat](https://core.telegram.org/bots/api/#getchat).
* @see https://core.telegram.org/bots/api/#chat
*/
/**
* This object represents a message.
*
* @typedef {object} Message
* @property {number} message_id Unique message identifier inside this chat
* @property {number} [message_thread_id] *Optional*. Unique identifier of a message thread to which the message
* belongs; for supergroups only
* @property {User} [from] *Optional*. Sender of the message; empty for messages sent to channels. For
* backward compatibility, the field contains a fake sender user in non-channel
* chats, if the message was sent on behalf of a chat.
* @property {Chat} [sender_chat] *Optional*. Sender of the message, sent on behalf of a chat. For example, the
* channel itself for channel posts, the supergroup itself for messages from
* anonymous group administrators, the linked channel for messages automatically
* forwarded to the discussion group. For backward compatibility, the field *from*
* contains a fake sender user in non-channel chats, if the message was sent on
* behalf of a chat.
* @property {number} date Date the message was sent in Unix time
* @property {Chat} chat Conversation the message belongs to
* @property {User} [forward_from] *Optional*. For forwarded messages, sender of the original message
* @property {Chat} [forward_from_chat] *Optional*. For messages forwarded from channels or from anonymous
* administrators, information about the original sender chat
* @property {number} [forward_from_message_id] *Optional*. For messages forwarded from channels, identifier of the
* original message in the channel
* @property {string} [forward_signature] *Optional*. For forwarded messages that were originally sent in channels or
* by an anonymous chat administrator, signature of the message sender if present
* @property {string} [forward_sender_name] *Optional*. Sender's name for messages forwarded from users who disallow
* adding a link to their account in forwarded messages
* @property {number} [forward_date] *Optional*. For forwarded messages, date the original message was sent in Unix
* time
* @property {boolean} [is_topic_message] *Optional*. *True*, if the message is sent to a forum topic
* @property {boolean} [is_automatic_forward] *Optional*. *True*, if the message is a channel post that was
* automatically forwarded to the connected discussion group
* @property {Message} [reply_to_message] *Optional*. For replies, the original message. Note that the Message object
* in this field will not contain further *reply\_to\_message* fields even if it itself is a reply.
* @property {User} [via_bot] *Optional*. Bot through which the message was sent
* @property {number} [edit_date] *Optional*. Date the message was last edited in Unix time
* @property {boolean} [has_protected_content] *Optional*. *True*, if the message can't be forwarded
* @property {string} [media_group_id] *Optional*. The unique identifier of a media message group this message belongs
* to
* @property {string} [author_signature] *Optional*. Signature of the post author for messages in channels, or the
* custom title of an anonymous group administrator
* @property {string} [text] *Optional*. For text messages, the actual UTF-8 text of the message
* @property {MessageEntity[]} [entities] *Optional*. For text messages, special entities like usernames, URLs, bot
* commands, etc. that appear in the text
* @property {Animation} [animation] *Optional*. Message is an animation, information about the animation. For
* backward compatibility, when this field is set, the *document* field will also
* be set
* @property {Audio} [audio] *Optional*. Message is an audio file, information about the file
* @property {Document} [document] *Optional*. Message is a general file, information about the file
* @property {PhotoSize[]} [photo] *Optional*. Message is a photo, available sizes of the photo
* @property {Sticker} [sticker] *Optional*. Message is a sticker, information about the sticker
* @property {Story} [story] *Optional*. Message is a forwarded story
* @property {Video} [video] *Optional*. Message is a video, information about the video
* @property {VideoNote} [video_note] *Optional*. Message is a [video
* note](https://telegram.org/blog/video-messages-and-telescope), information about
* the video message
* @property {Voice} [voice] *Optional*. Message is a voice message, information about the file
* @property {string} [caption] *Optional*. Caption for the animation, audio, document, photo, video or voice
* @property {MessageEntity[]} [caption_entities] *Optional*. For messages with a caption, special entities like
* usernames, URLs, bot commands, etc. that appear in the caption
* @property {boolean} [has_media_spoiler] *Optional*. `True`, if the message media is covered by a spoiler animation
* @property {Contact} [contact] *Optional*. Message is a shared contact, information about the contact
* @property {Dice} [dice] *Optional*. Message is a dice with random value
* @property {Game} [game] *Optional*. Message is a game, information about the game. [More about games
* »](https://core.telegram.org/bots/api/#games)
* @property {Poll} [poll] *Optional*. Message is a native poll, information about the poll
* @property {Venue} [venue] *Optional*. Message is a venue, information about the venue. For backward
* compatibility, when this field is set, the *location* field will also be set
* @property {Location} [location] *Optional*. Message is a shared location, information about the location
* @property {User[]} [new_chat_members] *Optional*. New members that were added to the group or supergroup and
* information about them (the bot itself may be one of these members)
* @property {User} [left_chat_member] *Optional*. A member was removed from the group, information about them (this
* member may be the bot itself)
* @property {string} [new_chat_title] *Optional*. A chat title was changed to this value
* @property {PhotoSize[]} [new_chat_photo] *Optional*. A chat photo was change to this value
* @property {boolean} [delete_chat_photo] *Optional*. Service message: the chat photo was deleted
* @property {boolean} [group_chat_created] *Optional*. Service message: the group has been created
* @property {boolean} [supergroup_chat_created] *Optional*. 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 reply\_to\_message if someone replies to a very first message in a
* directly created supergroup.
* @property {boolean} [channel_chat_created] *Optional*. 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 reply\_to\_message if someone replies to a very first message in a channel.
* @property {MessageAutoDeleteTimerChanged} [message_auto_delete_timer_changed] *Optional*. Service message:
* auto-delete timer settings changed in the chat
* @property {number} [migrate_to_chat_id] *Optional*. 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.
* @property {number} [migrate_from_chat_id] *Optional*. The supergroup has been migrated from a group 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.
* @property {Message} [pinned_message] *Optional*. Specified message was pinned. Note that the Message object in this
* field will not contain further *reply\_to\_message* fields even if it is itself
* a reply.
* @property {Invoice} [invoice] *Optional*. 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)
* @property {SuccessfulPayment} [successful_payment] *Optional*. Message is a service message about a successful
* payment, information about the payment. [More about payments
* »](https://core.telegram.org/bots/api/#payments)
* @property {UserShared} [user_shared] *Optional*. Service message: a user was shared with the bot
* @property {ChatShared} [chat_shared] *Optional*. Service message: a chat was shared with the bot
* @property {string} [connected_website] *Optional*. The domain name of the website on which the user has logged in.
* [More about Telegram Login »](https://core.telegram.org/widgets/login)
* @property {PassportData} [passport_data] *Optional*. Telegram Passport data
* @property {ProximityAlertTriggered} [proximity_alert_triggered] *Optional*. Service message. A user in the chat
* triggered another user's proximity alert while sharing Live Location.
* @property {ForumTopicCreated} [forum_topic_created] *Optional*. Service message: forum topic created
* @property {ForumTopicClosed} [forum_topic_closed] *Optional*. Service message: forum topic closed
* @property {ForumTopicReopened} [forum_topic_reopened] *Optional*. Service message: forum topic reopened
* @property {WriteAccessAllowed} [write_access_allowed] *Optional*. Service message: the user allowed the bot to write messages after
* adding it to the attachment or side 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)
* @property {GeneralForumTopicUnhidden} [general_forum_topic_unhidden] *Optional*. Service message: the 'General'
* forum topic unhidden
* @property {GeneralForumTopicHidden} [general_forum_topic_hidden] *Optional*. Service message: the 'General' forum
* topic hidden
* @property {ForumTopicEdited} [forum_topic_edited] *Optional*. Service message: forum topic edited
* @property {VideoChatScheduled} [video_chat_scheduled] *Optional*. Service message: video chat scheduled
* @property {VideoChatStarted} [video_chat_started] *Optional*. Service message: video chat started
* @property {VideoChatEnded} [video_chat_ended] *Optional*. Service message: video chat ended
* @property {VideoChatParticipantsInvited} [video_chat_participants_invited] *Optional*. Service message: new
* participants invited to a video chat
* @property {WebAppData} [web_app_data] *Optional*. Service message: data sent by a Web App
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. Inline keyboard attached to the message. `login_url`
* buttons are represented as ordinary `url` buttons.
* @see https://core.telegram.org/bots/api/#message
*/
/**
* This object represents a unique message identifier.
*
* @typedef {object} MessageId
* @property {number} message_id Unique message identifier
* @see https://core.telegram.org/bots/api/#messageid
*/
/**
* This object represents one special entity in a text message. For example, hashtags, usernames, URLs,
* etc.
*
* @typedef {object} MessageEntity
* @property {
* 'mention'|'hashtag'|'cashtag'|'bot_command'|'url'|'email'|'phone_number'|'bold'|'italic'|'underline'|
* 'strikethrough'|'spoiler'|'code'|'pre'|'text_link'|'text_mention'|
* 'custom_emoji'
* } type
* Type of the entity. Currently, can be “mention” (`@username`), “hashtag”
* (`#hashtag`), “cashtag” (`$USD`), “bot\_command” (`/start@jobs_bot`), “url”
* (`https://telegram.org`), “email” (`[email protected]`), “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](https://telegram.org/blog/edit#new-mentions)), “custom\_emoji” (for
* inline custom emoji stickers)
* @property {number} offset Offset in [UTF-16 code
* units](https://core.telegram.org/api/entities#entity-length) to the start of the
* entity
* @property {number} length Length of the entity in [UTF-16 code
* units](https://core.telegram.org/api/entities#entity-length)
* @property {string} [url] *Optional*. For “text\_link” only, URL that will be opened after user taps on
* the text
* @property {User} [user] *Optional*. For “text\_mention” only, the mentioned user
* @property {string} [language] *Optional*. For “pre” only, the programming language of the entity text
* @property {string} [custom_emoji_id] *Optional*. For “custom\_emoji” only, unique identifier of the custom emoji.
* Use
* [getCustomEmojiStickers](https://core.telegram.org/bots/api/#getcustomemojistickers)
* to get full information about the sticker
* @see https://core.telegram.org/bots/api/#messageentity
*/
/**
* This object represents one size of a photo or a [file](https://core.telegram.org/bots/api/#document)
*
* / [sticker](https://core.telegram.org/bots/api/#sticker)
* thumbnail.
*
* @typedef {object} PhotoSize
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} width Photo width
* @property {number} height Photo height
* @property {number} [file_size] *Optional*. File size in bytes
* @see https://core.telegram.org/bots/api/#photosize
*/
/**
* This object represents an animation file (GIF or H.264/MPEG-4 AVC video without sound).
*
* @typedef {object} Animation
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} width Video width as defined by sender
* @property {number} height Video height as defined by sender
* @property {number} duration Duration of the video in seconds as defined by sender
* @property {PhotoSize} [thumbnail] *Optional*. Animation thumbnail as defined by sender
* @property {string} [file_name] *Optional*. Original animation filename as defined by sender
* @property {string} [mime_type] *Optional*. MIME type of the file as defined by sender
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @see https://core.telegram.org/bots/api/#animation
*/
/**
* This object represents an audio file to be treated as music by the Telegram clients.
*
* @typedef {object} Audio
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} duration Duration of the audio in seconds as defined by sender
* @property {string} [performer] *Optional*. Performer of the audio as defined by sender or by audio tags
* @property {string} [title] *Optional*. Title of the audio as defined by sender or by audio tags
* @property {string} [file_name] *Optional*. Original filename as defined by sender
* @property {string} [mime_type] *Optional*. MIME type of the file as defined by sender
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @property {PhotoSize} [thumbnail] *Optional*. Thumbnail of the album cover to which the music file belongs
* @see https://core.telegram.org/bots/api/#audio
*/
/**
* This object represents a general file (as opposed to
* [photos](https://core.telegram.org/bots/api/#photosize)
*, [voice
* messages](https://core.telegram.org/bots/api/#voice) and [audio
* files](https://core.telegram.org/bots/api/#audio)).
*
* @typedef {object} Document
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {PhotoSize} [thumbnail] *Optional*. Document thumbnail as defined by sender
* @property {string} [file_name] *Optional*. Original filename as defined by sender
* @property {string} [mime_type] *Optional*. MIME type of the file as defined by sender
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @see https://core.telegram.org/bots/api/#document
*/
/**
* This object represents a message about a forwarded story in the chat. Currently holds no
* information.
*
* @typedef {*} Story
* @see https://core.telegram.org/bots/api/#story
*/
/**
* This object represents a video file.
*
* @typedef {object} Video
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} width Video width as defined by sender
* @property {number} height Video height as defined by sender
* @property {number} duration Duration of the video in seconds as defined by sender
* @property {PhotoSize} [thumbnail] *Optional*. Video thumbnail
* @property {string} [file_name] *Optional*. Original filename as defined by sender
* @property {string} [mime_type] *Optional*. MIME type of the file as defined by sender
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @see https://core.telegram.org/bots/api/#video
*/
/**
* This object represents a [video message](https://telegram.org/blog/video-messages-and-telescope)
*
* (available in Telegram apps as of [v.4.0](https://telegram.org/blog/video-messages-and-telescope))
*.
*
* @typedef {object} VideoNote
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} length Video width and height (diameter of the video message) as defined by sender
* @property {number} duration Duration of the video in seconds as defined by sender
* @property {PhotoSize} [thumbnail] *Optional*. Video thumbnail
* @property {number} [file_size] *Optional*. File size in bytes
* @see https://core.telegram.org/bots/api/#videonote
*/
/**
* This object represents a voice note.
*
* @typedef {object} Voice
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} duration Duration of the audio in seconds as defined by sender
* @property {string} [mime_type] *Optional*. MIME type of the file as defined by sender
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @see https://core.telegram.org/bots/api/#voice
*/
/**
* This object represents a phone contact.
*
* @typedef {object} Contact
* @property {string} phone_number Contact's phone number
* @property {string} first_name Contact's first name
* @property {string} [last_name] *Optional*. Contact's last name
* @property {number} [user_id] *Optional*. Contact's user identifier in Telegram. 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.
* @property {string} [vcard] *Optional*. Additional data about the contact in the form of a
* [vCard](https://en.wikipedia.org/wiki/VCard)
* @see https://core.telegram.org/bots/api/#contact
*/
/**
* This object represents an animated emoji that displays a random value.
*
* @typedef {object} Dice
* @property {string} emoji Emoji on which the dice throw animation is based
* @property {number} value Value of the dice, 1-6 for “🎲”, “🎯” and “🎳” base emoji, 1-5 for “🏀” and “⚽”
* base emoji, 1-64 for “🎰” base emoji
* @see https://core.telegram.org/bots/api/#dice
*/
/**
* This object contains information about one answer option in a poll.
*
* @typedef {object} PollOption
* @property {string} text Option text, 1-100 characters
* @property {number} voter_count Number of users that voted for this option
* @see https://core.telegram.org/bots/api/#polloption
*/
/**
* This object represents an answer of a user in a non-anonymous poll.
*
* @typedef {object} PollAnswer
* @property {string} poll_id Unique poll identifier
* @property {Chat} [voter_chat] *Optional*. The chat that changed the answer to the poll, if the voter is
* anonymous
* @property {User} [user] *Optional*. The user that changed the answer to the poll, if the voter isn't
* anonymous
* @property {number[]} option_ids 0-based identifiers of chosen answer options. May be empty if the vote was retracted.
* @see https://core.telegram.org/bots/api/#pollanswer
*/
/**
* This object contains information about a poll.
*
* @typedef {object} Poll
* @property {string} id Unique poll identifier
* @property {string} question Poll question, 1-300 characters
* @property {PollOption[]} options List of poll options
* @property {number} total_voter_count Total number of users that voted in the poll
* @property {boolean} is_closed *True*, if the poll is closed
* @property {boolean} is_anonymous *True*, if the poll is anonymous
* @property {'regular'|'quiz'} type Poll type, currently can be “regular” or “quiz”
* @property {boolean} allows_multiple_answers *True*, if the poll allows multiple answers
* @property {number} [correct_option_id] *Optional*. 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.
* @property {string} [explanation] *Optional*. 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
* @property {MessageEntity[]} [explanation_entities] *Optional*. Special entities like usernames, URLs, bot commands,
* etc. that appear in the *explanation*
* @property {number} [open_period] *Optional*. Amount of time in seconds the poll will be active after creation
* @property {number} [close_date] *Optional*. Point in time (Unix timestamp) when the poll will be automatically
* closed
* @see https://core.telegram.org/bots/api/#poll
*/
/**
* This object represents a point on the map.
*
* @typedef {object} Location
* @property {number} longitude Longitude as defined by sender
* @property {number} latitude Latitude as defined by sender
* @property {number} [horizontal_accuracy] *Optional*. The radius of uncertainty for the location, measured in
* meters;
* 0-1500
* @property {number} [live_period] *Optional*. Time relative to the message sending date, during which the location
* can be updated; in seconds. For active live locations only.
* @property {number} [heading] *Optional*. The direction in which user is moving, in degrees; 1-360. For active
* live locations only.
* @property {number} [proximity_alert_radius] *Optional*. The maximum distance for proximity alerts about approaching
* another chat member, in meters. For sent live locations only.
* @see https://core.telegram.org/bots/api/#location
*/
/**
* This object represents a venue.
*
* @typedef {object} Venue
* @property {Location} location Venue location. Can't be a live location
* @property {string} title Name of the venue
* @property {string} address Address of the venue
* @property {string} [foursquare_id] *Optional*. Foursquare identifier of the venue
* @property {string} [foursquare_type] *Optional*. Foursquare type of the venue. (For example,
* “arts\_entertainment/default”, “arts\_entertainment/aquarium” or
* “food/icecream”.)
* @property {string} [google_place_id] *Optional*. Google Places identifier of the venue
* @property {string} [google_place_type] *Optional*. Google Places type of the venue. (See [supported
* types](https://developers.google.com/places/web-service/supported_types).)
* @see https://core.telegram.org/bots/api/#venue
*/
/**
* Describes data sent from a [Web App](https://core.telegram.org/bots/webapps)
* to the bot.
*
* @typedef {object} WebAppData
* @property {string} data The data. Be aware that a bad client can send arbitrary data in this field.
* @property {string} button_text 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.
* @see https://core.telegram.org/bots/api/#webappdata
*/
/**
* This object represents the content of a service message, sent whenever a user in the chat triggers a
* proximity alert set by another user.
*
* @typedef {object} ProximityAlertTriggered
* @property {User} traveler User that triggered the alert
* @property {User} watcher User that set the alert
* @property {number} distance The distance between the users
* @see https://core.telegram.org/bots/api/#proximityalerttriggered
*/
/**
* This object represents a service message about a change in auto-delete timer settings.
*
* @typedef {object} MessageAutoDeleteTimerChanged
* @property {number} message_auto_delete_time New auto-delete time for messages in the chat; in seconds
* @see https://core.telegram.org/bots/api/#messageautodeletetimerchanged
*/
/**
* This object represents a service message about a new forum topic created in the chat.
*
* @typedef {object} ForumTopicCreated
* @property {string} name Name of the topic
* @property {number} icon_color Color of the topic icon in RGB format
* @property {string} [icon_custom_emoji_id] *Optional*. Unique identifier of the custom emoji shown as the topic icon
* @see https://core.telegram.org/bots/api/#forumtopiccreated
*/
/**
* This object represents a service message about a forum topic closed in the chat. Currently holds no
* information.
*
* @typedef {*} ForumTopicClosed
* @see https://core.telegram.org/bots/api/#forumtopicclosed
*/
/**
* This object represents a service message about an edited forum topic.
*
* @typedef {object} ForumTopicEdited
* @property {string} [name] *Optional*. New name of the topic, if it was edited
* @property {string} [icon_custom_emoji_id] *Optional*. New identifier of the custom emoji shown as the topic icon, if
* it was edited; an empty string if the icon was removed
* @see https://core.telegram.org/bots/api/#forumtopicedited
*/
/**
* This object represents a service message about a forum topic reopened in the chat. Currently holds
* no information.
*
* @typedef {*} ForumTopicReopened
* @see https://core.telegram.org/bots/api/#forumtopicreopened
*/
/**
* This object represents a service message about General forum topic hidden in the chat. Currently
* holds no information.
*
* @typedef {*} GeneralForumTopicHidden
* @see https://core.telegram.org/bots/api/#generalforumtopichidden
*/
/**
* This object represents a service message about General forum topic unhidden in the chat. Currently
* holds no information.
*
* @typedef {*} GeneralForumTopicUnhidden
* @see https://core.telegram.org/bots/api/#generalforumtopicunhidden
*/
/**
* This object contains information about the user whose identifier was shared with the bot using a
* [KeyboardButtonRequestUser](https://core.telegram.org/bots/api/#keyboardbuttonrequestuser)
* button.
*
* @typedef {object} UserShared
* @property {number} request_id Identifier of the request
* @property {number} user_id 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.
* @see https://core.telegram.org/bots/api/#usershared
*/
/**
* This object contains information about the chat whose identifier was shared with the bot using a
* [KeyboardButtonRequestChat](https://core.telegram.org/bots/api/#keyboardbuttonrequestchat)
* button.
*
* @typedef {object} ChatShared
* @property {number} request_id Identifier of the request
* @property {number} chat_id 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.
* @see https://core.telegram.org/bots/api/#chatshared
*/
/**
* 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)
*
* @typedef {object} WriteAccessAllowed
* @property {boolean} [from_request] *Optional*. True, if the access was granted after the user accepted an explicit
* request from a Web App sent by the method
* [requestWriteAccess](https://core.telegram.org/bots/webapps#initializing-mini-apps)
* @property {string} [web_app_name] *Optional*. Name of the Web App, if the access was granted when the Web App was
* launched from a link
* @property {boolean} [from_attachment_menu] *Optional*. True, if the access was granted when the bot was added to the
* attachment or side menu
* @see https://core.telegram.org/bots/api/#writeaccessallowed
*/
/**
* This object represents a service message about a video chat scheduled in the chat.
*
* @typedef {object} VideoChatScheduled
* @property {number} start_date Point in time (Unix timestamp) when the video chat is supposed to be started by
* a chat administrator
* @see https://core.telegram.org/bots/api/#videochatscheduled
*/
/**
* This object represents a service message about a video chat started in the chat. Currently holds no
* information.
*
* @typedef {*} VideoChatStarted
* @see https://core.telegram.org/bots/api/#videochatstarted
*/
/**
* This object represents a service message about a video chat ended in the chat.
*
* @typedef {object} VideoChatEnded
* @property {number} duration Video chat duration in seconds
* @see https://core.telegram.org/bots/api/#videochatended
*/
/**
* This object represents a service message about new members invited to a video chat.
*
* @typedef {object} VideoChatParticipantsInvited
* @property {User[]} users New members that were invited to the video chat
* @see https://core.telegram.org/bots/api/#videochatparticipantsinvited
*/
/**
* This object represent a user's profile pictures.
*
* @typedef {object} UserProfilePhotos
* @property {number} total_count Total number of profile pictures the target user has
* @property {PhotoSize[][]} photos Requested profile pictures (in up to 4 sizes each)
* @see https://core.telegram.org/bots/api/#userprofilephotos
*/
/**
* 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](https://core.telegram.org/bots/api/#getfile)
*.
*
* The maximum file size to download is 20 MB
*
* @typedef {object} File
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} [file_size] *Optional*. File size in bytes. It can be bigger than 2^31 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 value.
* @property {string} [file_path] *Optional*. File path. Use
* `https://api.telegram.org/file/bot<token>/<file_path>` to get the file.
* @see https://core.telegram.org/bots/api/#file
*/
/**
* Describes a [Web App](https://core.telegram.org/bots/webapps)
*.
*
* @typedef {object} WebAppInfo
* @property {string} url An HTTPS URL of a Web App to be opened with additional data as specified in
* [Initializing WebApps](https://core.telegram.org/bots/webapps#initializing-mini-apps)
* @see https://core.telegram.org/bots/api/#webappinfo
*/
/**
* This object represents a [custom keyboard](https://core.telegram.org/bots/features#keyboards)
* with
* reply options (see [Introduction to bots](https://core.telegram.org/bots/features#keyboards)
* for
* details and examples).
*
* @typedef {object} ReplyKeyboardMarkup
* @property {KeyboardButton[][]} keyboard Array of button rows, each represented by an Array of
* [KeyboardButton](https://core.telegram.org/bots/api/#keyboardbutton) objects
* @property {boolean} [resize_keyboard] *Optional*. Requests clients to resize the keyboard vertically for optimal
* fit
* (e.g., make the keyboard smaller if there are just two rows of buttons).
* Defaults to *false*, in which case the custom keyboard is always of the same
* height as the app's standard keyboard.
* @property {boolean} [is_persistent] *Optional*. Requests clients to always show the keyboard when the regular
* keyboard is hidden. Defaults to *false*, in which case the custom keyboard can be hidden and opened with a
* keyboard icon.
* @property {boolean} [one_time_keyboard] *Optional*. Requests clients to hide the keyboard as soon as it's been
* used. The keyboard will still be available, but clients will automatically display the usual letter-keyboard in
* the chat - the user can press a special button in the input field to see the custom keyboard again. Defaults to
* *false*.
* @property {string} [input_field_placeholder] *Optional*. The placeholder to be shown in the input field when the
* keyboard is active; 1-64 characters
* @property {boolean} [selective] *Optional*. Use this parameter if you want to show the keyboard to specific
* users only. Targets: 1) users that are @mentioned in the *text* of the
* [Message](https://core.telegram.org/bots/api/#message) object; 2) if the bot's
* message is a reply (has *reply\_to\_message\_id*), sender of the original
* message.
*
* *Example:* A user requests to change the bot's language, bot replies to the
* request with a keyboard to select the new language. Other users in the group
* don't see the keyboard.
* @see https://core.telegram.org/bots/api/#replykeyboardmarkup
*/
/**
* This object represents one button of the reply keyboard. For simple text buttons, *String* can be
* used instead of this object to specify the button text. The optional fields *web\_app*,
* *request\_user*, *request\_chat*, *request\_contact*, *request\_location*, and *request\_poll* are
* mutually exclusive.
*
* @typedef {object} KeyboardButton
* @property {string} text Text of the button. If none of the optional fields are used, it will be sent as
* a message when the button is pressed
* @property {KeyboardButtonRequestUser} [request_user] *Optional.* If specified, pressing the button will open a list
* of suitable users. Tapping on any user will send their identifier to the bot in a
* “user\_shared” service message. Available in private chats only.
* @property {KeyboardButtonRequestChat} [request_chat] *Optional.* If specified, pressing the button will open a list
* of suitable chats. Tapping on a chat will send its identifier to the bot in a “chat\_shared” service message.
* Available in private chats only.
* @property {boolean} [request_contact] *Optional*. If *True*, the user's phone number will be sent as a contact when
* the button is pressed. Available in private chats only.
* @property {boolean} [request_location] *Optional*. If *True*, the user's current location will be sent when the
* button is pressed. Available in private chats only.
* @property {KeyboardButtonPollType} [request_poll] *Optional*. If specified, the user will be asked to create a poll
* and send it to the bot when the button is pressed. Available in private chats only.
* @property {WebAppInfo} [web_app] *Optional*. If specified, the described [Web
* App](https://core.telegram.org/bots/webapps) will be launched when the button is
* pressed. The Web App will be able to send a “web\_app\_data” service message.
* Available in private chats only.
* @see https://core.telegram.org/bots/api/#keyboardbutton
*/
/**
* This object defines the criteria used to request a suitable user. The identifier of the selected
* user will be shared with the bot when the corresponding button is pressed.
* [More about requesting users »](https://core.telegram.org/bots/features#chat-and-user-selection)
*
* @typedef {object} KeyboardButtonRequestUser
* @property {number} request_id Signed 32-bit identifier of the request, which will be received back in the
* [UserShared](https://core.telegram.org/bots/api/#usershared) object. Must be
* unique within the message
* @property {boolean} [user_is_bot] *Optional*. Pass *True* to request a bot, pass *False* to request a regular
* user. If not specified, no additional restrictions are applied.
* @property {boolean} [user_is_premium] *Optional*. Pass *True* to request a premium user, pass *False* to request a
* non-premium user. If not specified, no additional restrictions are applied.
* @see https://core.telegram.org/bots/api/#keyboardbuttonrequestuser
*/
/**
* This object defines the criteria used to request a suitable chat. The identifier of the selected
* chat will be shared with the bot when the corresponding button is pressed.
* [More about requesting chats »](https://core.telegram.org/bots/features#chat-and-user-selection)
*
* @typedef {object} KeyboardButtonRequestChat
* @property {number} request_id Signed 32-bit identifier of the request, which will be received back in the
* [ChatShared](https://core.telegram.org/bots/api/#chatshared) object. Must be
* unique within the message
* @property {boolean} chat_is_channel Pass *True* to request a channel chat, pass *False* to request a group or a
* supergroup chat.
* @property {boolean} [chat_is_forum] *Optional*. Pass *True* to request a forum supergroup, pass *False* to request a
* non-forum chat. If not specified, no additional restrictions are applied.
* @property {boolean} [chat_has_username] *Optional*. Pass *True* to request a supergroup or a channel with a
* username,
* pass *False* to request a chat without a username. If not specified, no
* additional restrictions are applied.
* @property {boolean} [chat_is_created] *Optional*. Pass *True* to request a chat owned by the user. Otherwise, no
* additional restrictions are applied.
* @property {ChatAdministratorRights} [user_administrator_rights] *Optional*. A JSON-serialized object listing the
* required administrator rights of the user in the chat. The rights must be a superset of
* *bot\_administrator\_rights*. If not specified, no additional restrictions are
* applied.
* @property {ChatAdministratorRights} [bot_administrator_rights] *Optional*. A JSON-serialized object listing the
* required administrator rights of the bot in the chat. The rights must be a subset of
* *user\_administrator\_rights*. If not specified, no additional restrictions are
* applied.
* @property {boolean} [bot_is_member] *Optional*. Pass *True* to request a chat with the bot as a member. Otherwise,
* no additional restrictions are applied.
* @see https://core.telegram.org/bots/api/#keyboardbuttonrequestchat
*/
/**
* This object represents type of a poll, which is allowed to be created and sent when the
* corresponding button is pressed.
*
* @typedef {object} KeyboardButtonPollType
* @property {string} [type] *Optional*. If *quiz* is passed, the user will be allowed to create only polls
* in the quiz mode. If *regular* is passed, only regular polls will be allowed.
* Otherwise, the user will be allowed to create a poll of any type.
* @see https://core.telegram.org/bots/api/#keyboardbuttonpolltype
*/
/**
* Upon receiving a message with this object, Telegram clients will remove the current custom keyboard
* and display the default letter-keyboard. By default, custom keyboards are displayed until a new
* keyboard is sent by a bot. An exception is made for one-time keyboards that are hidden immediately
* after the user presses a button (see
* [ReplyKeyboardMarkup](https://core.telegram.org/bots/api/#replykeyboardmarkup))
*.
*
* @typedef {object} ReplyKeyboardRemove
* @property {boolean} remove_keyboard Requests clients to remove the custom keyboard (user will not be able to summon
* this keyboard; if you want to hide the keyboard from sight but keep it
* accessible, use *one\_time\_keyboard* in
* [ReplyKeyboardMarkup](https://core.telegram.org/bots/api/#replykeyboardmarkup))
* @property {boolean} [selective] *Optional*. Use this parameter if you want to remove the keyboard for specific
* users only. Targets: 1) users that are @mentioned in the *text* of the
* [Message](https://core.telegram.org/bots/api/#message) object; 2) if the bot's
* message is a reply (has *reply\_to\_message\_id*), sender of the original
* message.
*
* *Example:* A user votes in a poll, bot returns confirmation message in reply to
* the vote and removes the keyboard for that user, while still showing the
* keyboard with poll options to users who haven't voted yet.
* @see https://core.telegram.org/bots/api/#replykeyboardremove
*/
/**
* This object represents an [inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) that appears right next to the
* message it belongs to.
*
* @typedef {object} InlineKeyboardMarkup
* @property {InlineKeyboardButton[][]} inline_keyboard Array of button rows, each represented by an Array of
* [InlineKeyboardButton](https://core.telegram.org/bots/api/#inlinekeyboardbutton)
* objects
* @see https://core.telegram.org/bots/api/#inlinekeyboardmarkup
*/
/**
* This object represents one button of an inline keyboard. You **must** use exactly one of the
* optional fields.
*
* @typedef {object} InlineKeyboardButton
* @property {string} text Label text on the button
* @property {string} [url] *Optional*. HTTP or tg:// URL to be opened when the button is pressed. Links
* `tg://user?id=<user_id>` can be used to mention a user by their ID without using
* a username, if this is allowed by their privacy settings.
* @property {string} [callback_data] *Optional*. Data to be sent in a [callback
* query](https://core.telegram.org/bots/api/#callbackquery) to the bot when button
* is pressed, 1-64 bytes
* @property {WebAppInfo} [web_app] *Optional*. Description of the [Web App](https://core.telegram.org/bots/webapps)
* 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](https://core.telegram.org/bots/api/#answerwebappquery).
* Available only in private chats between a user and the bot.
* @property {LoginUrl} [login_url] *Optional*. An HTTPS URL used to automatically authorize the user. Can be used
* as a replacement for the [Telegram Login
* Widget](https://core.telegram.org/widgets/login).
* @property {string} [switch_inline_query] *Optional*. 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.
* May be empty, in which case just the bot's username will be inserted.
* @property {string} [switch_inline_query_current_chat] *Optional*. If set, pressing the button will insert the bot's
* username and the specified inline query in the current chat's input field. May 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.
* @property {CallbackGame} [callback_game] *Optional*. 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.
* @property {SwitchInlineQueryChosenChat} [switch_inline_query_chosen_chat] *Optional*. If set, pressing the button
* will prompt the user to select one of their chats of the specified type, open that chat and insert the bot's
* username and the specified inline query in the input field
* @property {boolean} [pay] *Optional*. Specify *True*, to send a [Pay
* button](https://core.telegram.org/bots/api/#payments).
*
* **NOTE:** This type of button **must** always be the first button in the first
* row and can only be used in invoice messages.
* @see https://core.telegram.org/bots/api/#inlinekeyboardbutton
*/
/**
* This object represents a parameter of the inline keyboard button used to automatically authorize a
* user. Serves as a great replacement for the [Telegram Login
* Widget](https://core.telegram.org/widgets/login) when the user is coming from Telegram. All the user
* needs to do is tap/click a button and confirm that they want to log in:
*
* Telegram apps support these buttons as of [version
* 5.7](https://telegram.org/blog/privacy-discussions-web-bots#meet-seamless-web-bots).
* Sample bot: [@discussbot](https://t.me/discussbot)
*
*
* @typedef {object} LoginUrl
* @property {string} url An HTTPS URL to be opened with user authorization data added to the query string
* when the button is pressed. If the user refuses to provide 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](https://core.telegram.org/widgets/login#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](https://core.telegram.org/widgets/login#checking-authorization).
* @property {string} [forward_text] *Optional*. New text of the button in forwarded messages.
* @property {string} [bot_username] *Optional*. Username of a bot, which will be used for user authorization. See
* [Setting up a bot](https://core.telegram.org/widgets/login#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](https://core.telegram.org/widgets/login#linking-your-domain-to-the-bot) for
* more details.
* @property {boolean} [request_write_access] *Optional*. Pass *True* to request the permission for your bot to send
* messages to the user.
* @see https://core.telegram.org/bots/api/#loginurl
*/
/**
* This object represents an incoming callback query from a callback button in an [inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards). 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](https://core.telegram.org/bots/api/#inline-mode)), the field *inline\_message\_id* will be
* present. Exactly one of the fields *data* or *game\_short\_name* will be present.
*
* @typedef {object} CallbackQuery
* @property {string} id Unique identifier for this query
* @property {User} from Sender
* @property {Message} [message] *Optional*. 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
* @property {string} [inline_message_id] *Optional*. Identifier of the message sent via the bot in inline mode, that
* originated the query.
* @property {string} chat_instance Global identifier, uniquely corresponding to the chat to which the message with
* the callback button was sent. Useful for high scores in
* [games](https://core.telegram.org/bots/api/#games).
* @property {string} [data] *Optional*. Data associated with the callback button. Be aware that the message
* originated the query can contain no callback buttons with this data.
* @property {string} [game_short_name] *Optional*. Short name of a [Game](https://core.telegram.org/bots/api/#games)
* to be returned, serves as the unique identifier for the game
* @see https://core.telegram.org/bots/api/#callbackquery
*/
/**
* Upon receiving a message with this object, Telegram clients will display a reply interface to the
* user (act as if the user has selected the bot's message and tapped 'Reply'). This can be extremely
* useful if you want to create user-friendly step-by-step interfaces without having to sacrifice
* [privacy mode](https://core.telegram.org/bots/features#privacy-mode)
*.
*
* @typedef {object} ForceReply
* @property {boolean} force_reply Shows reply interface to the user, as if they manually selected the bot's
* message and tapped 'Reply'
* @property {string} [input_field_placeholder] *Optional*. The placeholder to be shown in the input field when the
* reply is active; 1-64 characters
* @property {boolean} [selective] *Optional*. Use this parameter if you want to force reply from specific users
* only. Targets: 1) users that are @mentioned in the *text* of the
* [Message](https://core.telegram.org/bots/api/#message) object; 2) if the bot's
* message is a reply (has *reply\_to\_message\_id*), sender of the original
* message.
* @see https://core.telegram.org/bots/api/#forcereply
*/
/**
* This object represents a chat photo.
*
* @typedef {object} ChatPhoto
* @property {string} small_file_id 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.
* @property {string} small_file_unique_id 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.
* @property {string} big_file_id 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.
* @property {string} big_file_unique_id 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.
* @see https://core.telegram.org/bots/api/#chatphoto
*/
/**
* Represents an invite link for a chat.
*
* @typedef {object} ChatInviteLink
* @property {string} invite_link The invite link. If the link was created by another chat administrator, then the
* second part of the link will be replaced with “…”.
* @property {User} creator Creator of the link
* @property {boolean} creates_join_request *True*, if users joining the chat via the link need to be approved by chat
* administrators
* @property {boolean} is_primary *True*, if the link is primary
* @property {boolean} is_revoked *True*, if the link is revoked
* @property {string} [name] *Optional*. Invite link name
* @property {number} [expire_date] *Optional*. Point in time (Unix timestamp) when the link will expire or has been
* expired
* @property {number} [member_limit] *Optional*. The maximum number of users that can be members of the chat
* simultaneously after joining the chat via this invite link; 1-99999
* @property {number} [pending_join_request_count] *Optional*. Number of pending join requests created using this link
* @see https://core.telegram.org/bots/api/#chatinvitelink
*/
/**
* Represents the rights of an administrator in a chat.
*
* @typedef {object} ChatAdministratorRights
* @property {boolean} is_anonymous *True*, if the user's presence in the chat is hidden
* @property {boolean} can_manage_chat *True*, if the administrator can access the chat event log, boost list in
* channels, see channel members, report spam messages, see anonymous
* administrators in supergroups and ignore slow mode. Implied by any other
* administrator privilege
* @property {boolean} can_delete_messages *True*, if the administrator can delete messages of other users
* @property {boolean} can_manage_video_chats *True*, if the administrator can manage video chats
* @property {boolean} can_restrict_members *True*, if the administrator can restrict, ban or unban chat members, or access
* supergroup statistics
* @property {boolean} can_promote_members *True*, if the administrator can add new administrators with a subset of
* their own privileges or demote administrators that they have promoted, directly or indirectly (promoted by
* administrators that were appointed by the user)
* @property {boolean} can_change_info *True*, if the user is allowed to change the chat title, photo and other
* settings
* @property {boolean} can_invite_users *True*, if the user is allowed to invite new users to the chat
* @property {boolean} [can_post_messages] *Optional*. *True*, if the administrator can post messages in the channel, or
* access channel statistics; channels only
* @property {boolean} [can_edit_messages] *Optional*. *True*, if the administrator can edit messages of other users
* and can pin messages; channels only
* @property {boolean} [can_pin_messages] *Optional*. *True*, if the user is allowed to pin messages; groups and
* supergroups only
* @property {boolean} [can_post_stories] *Optional*. *True*, if the administrator can post stories in the channel;
* channels only
* @property {boolean} [can_edit_stories] *Optional*. *True*, if the administrator can edit stories posted by other users;
* channels only
* @property {boolean} [can_delete_stories] *Optional*. *True*, if the administrator can delete stories posted by other
* users; channels only
* @property {boolean} [can_manage_topics] *Optional*. *True*, if the user is allowed to create, rename, close, and
* reopen forum topics; supergroups only
* @see https://core.telegram.org/bots/api/#chatadministratorrights
*/
/**
* This object contains information about one member of a chat. Currently, the following 6 types of
* chat members are supported:
*
* [ChatMemberOwner](https://core.telegram.org/bots/api/#chatmemberowner)
*
* [ChatMemberAdministrator](https://core.telegram.org/bots/api/#chatmemberadministrator)
*
* [ChatMemberMember](https://core.telegram.org/bots/api/#chatmembermember)
*
* [ChatMemberRestricted](https://core.telegram.org/bots/api/#chatmemberrestricted)
*
* [ChatMemberLeft](https://core.telegram.org/bots/api/#chatmemberleft)
*
* [ChatMemberBanned](https://core.telegram.org/bots/api/#chatmemberbanned)
*
*
* @typedef {
* ChatMemberOwner|ChatMemberAdministrator|ChatMemberMember|ChatMemberRestricted|ChatMemberLeft|
* ChatMemberBanned
* } ChatMember
* @see https://core.telegram.org/bots/api/#chatmember
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that owns the chat and
* has all administrator privileges.
*
* @typedef {object} ChatMemberOwner
* @property {'creator'} status The member's status in the chat, always “creator”
* @property {User} user Information about the user
* @property {boolean} is_anonymous *True*, if the user's presence in the chat is hidden
* @property {string} [custom_title] *Optional*. Custom title for this user
* @see https://core.telegram.org/bots/api/#chatmemberowner
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that has some additional
* privileges.
*
* @typedef {object} ChatMemberAdministrator
* @property {'administrator'} status The member's status in the chat, always “administrator”
* @property {User} user Information about the user
* @property {boolean} can_be_edited *True*, if the bot is allowed to edit administrator privileges of that user
* @property {boolean} is_anonymous *True*, if the user's presence in the chat is hidden
* @property {boolean} can_manage_chat *True*, if the administrator can access the chat event log, boost list in
* channels, see channel members, report spam messages, see anonymous
* administrators in supergroups and ignore slow mode. Implied by any other
* administrator privilege
* @property {boolean} can_delete_messages *True*, if the administrator can delete messages of other users
* @property {boolean} can_manage_video_chats *True*, if the administrator can manage video chats
* @property {boolean} can_restrict_members *True*, if the administrator can restrict, ban or unban chat members, or access
* supergroup statistics
* @property {boolean} can_promote_members *True*, if the administrator can add new administrators with a subset of
* their own privileges or demote administrators that they have promoted, directly or indirectly (promoted by
* administrators that were appointed by the user)
* @property {boolean} can_change_info *True*, if the user is allowed to change the chat title, photo and other
* settings
* @property {boolean} can_invite_users *True*, if the user is allowed to invite new users to the chat
* @property {boolean} [can_post_messages] *Optional*. *True*, if the administrator can post messages in the channel, or
* access channel statistics; channels only
* @property {boolean} [can_edit_messages] *Optional*. *True*, if the administrator can edit messages of other users
* and can pin messages; channels only
* @property {boolean} [can_pin_messages] *Optional*. *True*, if the user is allowed to pin messages; groups and
* supergroups only
* @property {boolean} [can_post_stories] *Optional*. *True*, if the administrator can post stories in the channel;
* channels only
* @property {boolean} [can_edit_stories] *Optional*. *True*, if the administrator can edit stories posted by other users;
* channels only
* @property {boolean} [can_delete_stories] *Optional*. *True*, if the administrator can delete stories posted by other
* users; channels only
* @property {boolean} [can_manage_topics] *Optional*. *True*, if the user is allowed to create, rename, close, and
* reopen forum topics; supergroups only
* @property {string} [custom_title] *Optional*. Custom title for this user
* @see https://core.telegram.org/bots/api/#chatmemberadministrator
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that has no additional
* privileges or restrictions.
*
* @typedef {object} ChatMemberMember
* @property {'member'} status The member's status in the chat, always “member”
* @property {User} user Information about the user
* @see https://core.telegram.org/bots/api/#chatmembermember
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that is under certain
* restrictions in the chat. Supergroups only.
*
* @typedef {object} ChatMemberRestricted
* @property {'restricted'} status The member's status in the chat, always “restricted”
* @property {User} user Information about the user
* @property {boolean} is_member *True*, if the user is a member of the chat at the moment of the request
* @property {boolean} can_send_messages *True*, if the user is allowed to send text messages, contacts, invoices,
* locations and venues
* @property {boolean} can_send_audios *True*, if the user is allowed to send audios
* @property {boolean} can_send_documents *True*, if the user is allowed to send documents
* @property {boolean} can_send_photos *True*, if the user is allowed to send photos
* @property {boolean} can_send_videos *True*, if the user is allowed to send videos
* @property {boolean} can_send_video_notes *True*, if the user is allowed to send video notes
* @property {boolean} can_send_voice_notes *True*, if the user is allowed to send voice notes
* @property {boolean} can_send_polls *True*, if the user is allowed to send polls
* @property {boolean} can_send_other_messages *True*, if the user is allowed to send animations, games, stickers and
* use inline bots
* @property {boolean} can_add_web_page_previews *True*, if the user is allowed to add web page previews to their
* messages
* @property {boolean} can_change_info *True*, if the user is allowed to change the chat title, photo and other
* settings
* @property {boolean} can_invite_users *True*, if the user is allowed to invite new users to the chat
* @property {boolean} can_pin_messages *True*, if the user is allowed to pin messages
* @property {boolean} can_manage_topics *True*, if the user is allowed to create forum topics
* @property {boolean} can_send_media_messages *True*, if the user is allowed to send audios, documents, photos,
* videos, video notes and voice notes
* @property {number} until_date Date when restrictions will be lifted for this user; Unix time. If 0, then the
* user is restricted forever
* @see https://core.telegram.org/bots/api/#chatmemberrestricted
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that isn't currently a
* member of the chat, but may join it themselves.
*
* @typedef {object} ChatMemberLeft
* @property {'left'} status The member's status in the chat, always “left”
* @property {User} user Information about the user
* @see https://core.telegram.org/bots/api/#chatmemberleft
*/
/**
* Represents a [chat member](https://core.telegram.org/bots/api/#chatmember)
* that was banned in the
* chat and can't return to the chat or view chat messages.
*
* @typedef {object} ChatMemberBanned
* @property {'kicked'} status The member's status in the chat, always “kicked”
* @property {User} user Information about the user
* @property {number} until_date Date when restrictions will be lifted for this user; Unix time. If 0, then the
* user is banned forever
* @see https://core.telegram.org/bots/api/#chatmemberbanned
*/
/**
* This object represents changes in the status of a chat member.
*
* @typedef {object} ChatMemberUpdated
* @property {Chat} chat Chat the user belongs to
* @property {User} from Performer of the action, which resulted in the change
* @property {number} date Date the change was done in Unix time
* @property {ChatMember} old_chat_member Previous information about the chat member
* @property {ChatMember} new_chat_member New information about the chat member
* @property {ChatInviteLink} [invite_link] *Optional*. Chat invite link, which was used by the user to join the chat;
* for joining by invite link events only.
* @property {boolean} [via_chat_folder_invite_link] *Optional*. True, if the user joined the chat via a chat folder invite link
* @see https://core.telegram.org/bots/api/#chatmemberupdated
*/
/**
* Represents a join request sent to a chat.
*
* @typedef {object} ChatJoinRequest
* @property {Chat} chat Chat to which the request was sent
* @property {User} from User that sent the join request
* @property {number} user_chat_id 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 5 minutes to send messages
* until the join request is processed, assuming no other administrator contacted the user.
* @property {number} date Date the request was sent in Unix time
* @property {string} [bio] *Optional*. Bio of the user.
* @property {ChatInviteLink} [invite_link] *Optional*. Chat invite link that was used by the user to send the join
* request
* @see https://core.telegram.org/bots/api/#chatjoinrequest
*/
/**
* Describes actions that a non-administrator user is allowed to take in a chat.
*
* @typedef {object} ChatPermissions
* @property {boolean} [can_send_messages] *Optional*. *True*, if the user is allowed to send text messages, contacts,
* invoices, locations and venues
* @property {boolean} [can_send_media_messages] *Optional*. *True*, if the user is allowed to send audios, documents,
* photos, videos, video notes and voice notes, implies can\_send\_messages
* @property {boolean} [can_send_audios] *Optional*. *True*, if the user is allowed to send audios
* @property {boolean} [can_send_documents] *Optional*. *True*, if the user is allowed to send documents
* @property {boolean} [can_send_photos] *Optional*. *True*, if the user is allowed to send photos
* @property {boolean} [can_send_videos] *Optional*. *True*, if the user is allowed to send videos
* @property {boolean} [can_send_video_notes] *Optional*. *True*, if the user is allowed to send video notes
* @property {boolean} [can_send_voice_notes] *Optional*. *True*, if the user is allowed to send voice notes
* @property {boolean} [can_send_polls] *Optional*. *True*, if the user is allowed to send polls
* @property {boolean} [can_send_other_messages] *Optional*. *True*, if the user is allowed to send animations,
* games, stickers and use inline bots
* @property {boolean} [can_add_web_page_previews] *Optional*. *True*, if the user is allowed to add web page previews
* to their messages
* @property {boolean} [can_change_info] *Optional*. *True*, if the user is allowed to change the chat title, photo
* and
* other settings. Ignored in public supergroups
* @property {boolean} [can_invite_users] *Optional*. *True*, if the user is allowed to invite new users to the chat
* @property {boolean} [can_pin_messages] *Optional*. *True*, if the user is allowed to pin messages. Ignored in
* public
* supergroups
* @property {boolean} [can_manage_topics] *Optional*. *True*, if the user is allowed to create forum topics. If
* omitted defaults to the value of can\_pin\_messages
* @see https://core.telegram.org/bots/api/#chatpermissions
*/
/**
* Represents a location to which a chat is connected.
*
* @typedef {object} ChatLocation
* @property {Location} location The location to which the supergroup is connected. Can't be a live location.
* @property {string} address Location address; 1-64 characters, as defined by the chat owner
* @see https://core.telegram.org/bots/api/#chatlocation
*/
/**
* This object represents a forum topic.
*
* @typedef {object} ForumTopic
* @property {number} message_thread_id Unique identifier of the forum topic
* @property {string} name Name of the topic
* @property {number} icon_color Color of the topic icon in RGB format
* @property {string} [icon_custom_emoji_id] *Optional*. Unique identifier of the custom emoji shown as the topic icon
* @see https://core.telegram.org/bots/api/#forumtopic
*/
/**
* This object represents a bot command.
*
* @typedef {object} BotCommand
* @property {string} command Text of the command; 1-32 characters. Can contain only lowercase English
* letters, digits and underscores.
* @property {string} description Description of the command; 1-256 characters.
* @see https://core.telegram.org/bots/api/#botcommand
*/
/**
* This object represents the scope to which bot commands are applied. Currently, the following 7
* scopes are supported:
*
* [BotCommandScopeDefault](https://core.telegram.org/bots/api/#botcommandscopedefault)
*
* [BotCommandScopeAllPrivateChats](https://core.telegram.org/bots/api/#botcommandscopeallprivatechats)
*
* [BotCommandScopeAllGroupChats](https://core.telegram.org/bots/api/#botcommandscopeallgroupchats)
*
* [BotCommandScopeAllChatAdministrators](https://core.telegram.org/bots/api/#botcommandscopeallchatadministrators)
*
* [BotCommandScopeChat](https://core.telegram.org/bots/api/#botcommandscopechat)
*
* [BotCommandScopeChatAdministrators](https://core.telegram.org/bots/api/#botcommandscopechatadministrators)
*
* [BotCommandScopeChatMember](https://core.telegram.org/bots/api/#botcommandscopechatmember)
*
*
* @typedef {
* BotCommandScopeDefault|BotCommandScopeAllPrivateChats|BotCommandScopeAllGroupChats|
* BotCommandScopeAllChatAdministrators|BotCommandScopeChat|BotCommandScopeChatAdministrators|
* BotCommandScopeChatMember
* } BotCommandScope
* @see https://core.telegram.org/bots/api/#botcommandscope
*/
/**
* Represents the default [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands.
* Default commands are used if no commands with a [narrower
* scope](https://core.telegram.org/bots/api/#determining-list-of-commands) are specified for the user.
*
* @typedef {object} BotCommandScopeDefault
* @property {'default'} type Scope type, must be *default*
* @see https://core.telegram.org/bots/api/#botcommandscopedefault
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering all private chats.
*
* @typedef {object} BotCommandScopeAllPrivateChats
* @property {'all_private_chats'} type Scope type, must be *all\_private\_chats*
* @see https://core.telegram.org/bots/api/#botcommandscopeallprivatechats
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering all group and supergroup chats.
*
* @typedef {object} BotCommandScopeAllGroupChats
* @property {'all_group_chats'} type Scope type, must be *all\_group\_chats*
* @see https://core.telegram.org/bots/api/#botcommandscopeallgroupchats
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering all group and supergroup chat administrators.
*
* @typedef {object} BotCommandScopeAllChatAdministrators
* @property {'all_chat_administrators'} type Scope type, must be *all\_chat\_administrators*
* @see https://core.telegram.org/bots/api/#botcommandscopeallchatadministrators
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering a specific chat.
*
* @typedef {object} BotCommandScopeChat
* @property {'chat'} type Scope type, must be *chat*
* @property {number|string} chat_id Unique identifier for the target chat or username of the target supergroup (in
* the format `@supergroupusername`)
* @see https://core.telegram.org/bots/api/#botcommandscopechat
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering all administrators of a specific group or supergroup chat.
*
* @typedef {object} BotCommandScopeChatAdministrators
* @property {'chat_administrators'} type Scope type, must be *chat\_administrators*
* @property {number|string} chat_id Unique identifier for the target chat or username of the target supergroup (in
* the format `@supergroupusername`)
* @see https://core.telegram.org/bots/api/#botcommandscopechatadministrators
*/
/**
* Represents the [scope](https://core.telegram.org/bots/api/#botcommandscope)
* of bot commands,
* covering a specific member of a group or supergroup chat.
*
* @typedef {object} BotCommandScopeChatMember
* @property {'chat_member'} type Scope type, must be *chat\_member*
* @property {number|string} chat_id Unique identifier for the target chat or username of the target supergroup (in
* the format `@supergroupusername`)
* @property {number} user_id Unique identifier of the target user
* @see https://core.telegram.org/bots/api/#botcommandscopechatmember
*/
/**
* This object represents the bot's description.
*
* @typedef {object} BotDescription
* @property {string} description The bot's description
* @see https://core.telegram.org/bots/api/#botdescription
*/
/**
* This object represents the bot's short description.
*
* @typedef {object} BotShortDescription
* @property {string} short_description The bot's short description
* @see https://core.telegram.org/bots/api/#botshortdescription
*/
/**
* This object describes the bot's menu button in a private chat. It should be one of
*
* [MenuButtonCommands](https://core.telegram.org/bots/api/#menubuttoncommands)
*
* [MenuButtonWebApp](https://core.telegram.org/bots/api/#menubuttonwebapp)
*
* [MenuButtonDefault](https://core.telegram.org/bots/api/#menubuttondefault)
*
*
* @typedef {MenuButtonCommands|MenuButtonWebApp|MenuButtonDefault} MenuButton
* @see https://core.telegram.org/bots/api/#menubutton
*/
/**
* Represents a menu button, which opens the bot's list of commands.
*
* @typedef {object} MenuButtonCommands
* @property {'commands'} type Type of the button, must be *commands*
* @see https://core.telegram.org/bots/api/#menubuttoncommands
*/
/**
* Represents a menu button, which launches a [Web App](https://core.telegram.org/bots/webapps)
*.
*
* @typedef {object} MenuButtonWebApp
* @property {'web_app'} type Type of the button, must be *web\_app*
* @property {string} text Text on the button
* @property {WebAppInfo} web_app 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](https://core.telegram.org/bots/api/#answerwebappquery).
* @see https://core.telegram.org/bots/api/#menubuttonwebapp
*/
/**
* Describes that no specific value for the menu button was set.
*
* @typedef {object} MenuButtonDefault
* @property {'default'} type Type of the button, must be *default*
* @see https://core.telegram.org/bots/api/#menubuttondefault
*/
/**
* Describes why a request was unsuccessful.
*
* @typedef {object} ResponseParameters
* @property {number} [migrate_to_chat_id] *Optional*. 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.
* @property {number} [retry_after] *Optional*. In case of exceeding flood control, the number of seconds left to
* wait before the request can be repeated
* @see https://core.telegram.org/bots/api/#responseparameters
*/
/**
* This object represents the content of a media message to be sent. It should be one of
*
* [InputMediaAnimation](https://core.telegram.org/bots/api/#inputmediaanimation)
*
* [InputMediaDocument](https://core.telegram.org/bots/api/#inputmediadocument)
*
* [InputMediaAudio](https://core.telegram.org/bots/api/#inputmediaaudio)
*
* [InputMediaPhoto](https://core.telegram.org/bots/api/#inputmediaphoto)
*
* [InputMediaVideo](https://core.telegram.org/bots/api/#inputmediavideo)
*
*
* @typedef {InputMediaAnimation|InputMediaDocument|InputMediaAudio|InputMediaPhoto|InputMediaVideo} InputMedia
* @see https://core.telegram.org/bots/api/#inputmedia
*/
/**
* Represents a photo to be sent.
*
* @typedef {object} InputMediaPhoto
* @property {'photo'} type Type of the result, must be *photo*
* @property {string} media File to send. Pass a file\_id to send a file that exists on the Telegram servers
* (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or
* pass “attach://\<file\_attach\_name\>” to upload a new one using
* multipart/form-data under \<file\_attach\_name\> name. [More information on
* Sending Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {string} [caption] *Optional*. Caption of the photo to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the photo caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {boolean} [has_spoiler] *Optional*. Pass `True` if the photo needs to be covered with a spoiler animation
* @see https://core.telegram.org/bots/api/#inputmediaphoto
*/
/**
* Represents a video to be sent.
*
* @typedef {object} InputMediaVideo
* @property {'video'} type Type of the result, must be *video*
* @property {string} media File to send. Pass a file\_id to send a file that exists on the Telegram servers
* (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or
* pass “attach://\<file\_attach\_name\>” to upload a new one using
* multipart/form-data under \<file\_attach\_name\> name. [More information on
* Sending Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {InputFile|FileId} [thumbnail] *Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation
* for the file is supported server-side. The thumbnail should be in JPEG format
* and less than 200 kB in size. A thumbnail's width and height should not exceed
* 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails
* can't be reused and can be only uploaded as a new file, so you can pass
* “attach://\<file\_attach\_name\>” if the thumbnail was uploaded using
* multipart/form-data under \<file\_attach\_name\>. [More information on Sending
* Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {string} [caption] *Optional*. Caption of the video to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the video caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {number} [width] *Optional*. Video width
* @property {number} [height] *Optional*. Video height
* @property {number} [duration] *Optional*. Video duration in seconds
* @property {boolean} [supports_streaming] *Optional*. Pass *True* if the uploaded video is suitable for streaming
* @property {boolean} [has_spoiler] *Optional*. Pass `True` if the video needs to be covered with a spoiler animation
* @see https://core.telegram.org/bots/api/#inputmediavideo
*/
/**
* Represents an animation file (GIF or H.264/MPEG-4 AVC video without sound) to be sent.
*
* @typedef {object} InputMediaAnimation
* @property {'animation'} type Type of the result, must be *animation*
* @property {string} media File to send. Pass a file\_id to send a file that exists on the Telegram servers
* (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or
* pass “attach://\<file\_attach\_name\>” to upload a new one using
* multipart/form-data under \<file\_attach\_name\> name. [More information on
* Sending Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {InputFile|FileId} [thumbnail] *Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation
* for the file is supported server-side. The thumbnail should be in JPEG format
* and less than 200 kB in size. A thumbnail's width and height should not exceed
* 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails
* can't be reused and can be only uploaded as a new file, so you can pass
* “attach://\<file\_attach\_name\>” if the thumbnail was uploaded using
* multipart/form-data under \<file\_attach\_name\>. [More information on Sending
* Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {string} [caption] *Optional*. Caption of the animation to be sent, 0-1024 characters after
* entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the animation caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {number} [width] *Optional*. Animation width
* @property {number} [height] *Optional*. Animation height
* @property {number} [duration] *Optional*. Animation duration in seconds
* @property {boolean} [has_spoiler] *Optional*. Pass `True` if the animation needs to be covered with a spoiler
* animation
* @see https://core.telegram.org/bots/api/#inputmediaanimation
*/
/**
* Represents an audio file to be treated as music to be sent.
*
* @typedef {object} InputMediaAudio
* @property {'audio'} type Type of the result, must be *audio*
* @property {string} media File to send. Pass a file\_id to send a file that exists on the Telegram servers
* (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or
* pass “attach://\<file\_attach\_name\>” to upload a new one using
* multipart/form-data under \<file\_attach\_name\> name. [More information on
* Sending Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {InputFile|FileId} [thumbnail] *Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation
* for the file is supported server-side. The thumbnail should be in JPEG format
* and less than 200 kB in size. A thumbnail's width and height should not exceed
* 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails
* can't be reused and can be only uploaded as a new file, so you can pass
* “attach://\<file\_attach\_name\>” if the thumbnail was uploaded using
* multipart/form-data under \<file\_attach\_name\>. [More information on Sending
* Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {string} [caption] *Optional*. Caption of the audio to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the audio caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {number} [duration] *Optional*. Duration of the audio in seconds
* @property {string} [performer] *Optional*. Performer of the audio
* @property {string} [title] *Optional*. Title of the audio
* @see https://core.telegram.org/bots/api/#inputmediaaudio
*/
/**
* Represents a general file to be sent.
*
* @typedef {object} InputMediaDocument
* @property {'document'} type Type of the result, must be *document*
* @property {string} media File to send. Pass a file\_id to send a file that exists on the Telegram servers
* (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or
* pass “attach://\<file\_attach\_name\>” to upload a new one using
* multipart/form-data under \<file\_attach\_name\> name. [More information on
* Sending Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {InputFile|FileId} [thumbnail] *Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation
* for the file is supported server-side. The thumbnail should be in JPEG format
* and less than 200 kB in size. A thumbnail's width and height should not exceed
* 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails
* can't be reused and can be only uploaded as a new file, so you can pass
* “attach://\<file\_attach\_name\>” if the thumbnail was uploaded using
* multipart/form-data under \<file\_attach\_name\>. [More information on Sending
* Files »](https://core.telegram.org/bots/api/#sending-files)
* @property {string} [caption] *Optional*. Caption of the document to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the document caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {boolean} [disable_content_type_detection] *Optional*. Disables automatic server-side content type
* detection for files uploaded using multipart/form-data. Always *True*, if the document is sent as part of an
* album.
* @see https://core.telegram.org/bots/api/#inputmediadocument
*/
/**
* This object represents the contents of a file to be uploaded. Must be posted using
* multipart/form-data in the usual way that files are uploaded via the browser.
*
* @typedef {Buffer|ReadableStream|string} InputFile
* @see https://core.telegram.org/bots/api/#inputfile
*/
/**
* This object represents a sticker.
*
* @typedef {object} Sticker
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {'regular'|'mask'|'custom_emoji'} type 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*.
* @property {number} width Sticker width
* @property {number} height Sticker height
* @property {boolean} is_animated *True*, if the sticker is
* [animated](https://telegram.org/blog/animated-stickers)
* @property {boolean} is_video *True*, if the sticker is a [video
* sticker](https://telegram.org/blog/video-stickers-better-reactions)
* @property {PhotoSize} [thumbnail] *Optional*. Sticker thumbnail in the .WEBP or .JPG format
* @property {string} [emoji] *Optional*. Emoji associated with the sticker
* @property {string} [set_name] *Optional*. Name of the sticker set to which the sticker belongs
* @property {File} [premium_animation] *Optional*. For premium regular stickers, premium animation for the sticker
* @property {MaskPosition} [mask_position] *Optional*. For mask stickers, the position where the mask should be
* placed
* @property {string} [custom_emoji_id] *Optional*. For custom emoji stickers, unique identifier of the custom emoji
* @property {number} [file_size] *Optional*. File size in bytes
* @property {true} [needs_repainting] *Optional*. *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
* @see https://core.telegram.org/bots/api/#sticker
*/
/**
* This object represents a sticker set.
*
* @typedef {object} StickerSet
* @property {string} name Sticker set name
* @property {string} title Sticker set title
* @property {'regular'|'mask'|'custom_emoji'} sticker_type Type of stickers in the set, currently one of “regular”,
* “mask”, “custom\_emoji”
* @property {boolean} is_animated *True*, if the sticker set contains [animated
* stickers](https://telegram.org/blog/animated-stickers)
* @property {boolean} is_video *True*, if the sticker set contains [video
* stickers](https://telegram.org/blog/video-stickers-better-reactions)
* @property {Sticker[]} stickers List of all set stickers
* @property {PhotoSize} [thumbnail] *Optional*. Sticker set thumbnail in the .WEBP, .TGS, or .WEBM format
* @see https://core.telegram.org/bots/api/#stickerset
*/
/**
* This object describes the position on faces where a mask should be placed by default.
*
* @typedef {object} MaskPosition
* @property {'forehead'|'eyes'|'mouth'|'chin'} point The part of the face relative to which the mask should be
* placed. One of
* “forehead”, “eyes”, “mouth”, or “chin”.
* @property {number} x_shift 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.
* @property {number} y_shift 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.
* @property {number} scale Mask scaling coefficient. For example, 2.0 means double size.
* @see https://core.telegram.org/bots/api/#maskposition
*/
/**
* This object describes a sticker to be added to a sticker set.
*
* @typedef {object} InputSticker
* @property {InputFile} sticker The added sticker. Pass a *file\_id* as a String to send a file that already
* exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get
* a file from the Internet, upload a new one using multipart/form-data, or pass
* “attach://\<file\_attach\_name\>” to upload a new one using multipart/form-data
* under \<file\_attach\_name\> name. Animated and video stickers can't be uploaded
* via HTTP URL. [More information on Sending Files
* »](https://core.telegram.org/bots/api/#sending-files)
* @property {string[]} emoji_list List of 1-20 emoji associated with the sticker
* @property {MaskPosition} [mask_position] *Optional*. Position where the mask should be placed on faces. For “mask”
* stickers only.
* @property {string[]} [keywords] *Optional*. List of 0-20 search keywords for the sticker with total length of up
* to 64 characters. For “regular” and “custom\_emoji” stickers only.
* @see https://core.telegram.org/bots/api/#inputsticker
*/
/**
* This object represents an incoming inline query. When the user sends an empty query, your bot could
* return some default or trending results.
*
* @typedef {object} InlineQuery
* @property {string} id Unique identifier for this query
* @property {User} from Sender
* @property {string} query Text of the query (up to 256 characters)
* @property {string} offset Offset of the results to be returned, can be controlled by the bot
* @property {'sender'|'private'|'group'|'supergroup'|'channel'} [chat_type] *Optional*. Type of the chat from which
* the inline query was sent. Can be either
* “sender” for a private chat with the inline query sender, “private”, “group”,
* “supergroup”, or “channel”. The chat type should be always known for requests
* sent from official clients and most third-party clients, unless the request was
* sent from a secret chat
* @property {Location} [location] *Optional*. Sender location, only for bots that request user location
* @see https://core.telegram.org/bots/api/#inlinequery
*/
/**
* This object represents one result of an inline query. Telegram clients currently support results of
* the following 20 types:
*
* [InlineQueryResultCachedAudio](https://core.telegram.org/bots/api/#inlinequeryresultcachedaudio)
*
* [InlineQueryResultCachedDocument](https://core.telegram.org/bots/api/#inlinequeryresultcacheddocument)
*
* [InlineQueryResultCachedGif](https://core.telegram.org/bots/api/#inlinequeryresultcachedgif)
*
* [InlineQueryResultCachedMpeg4Gif](https://core.telegram.org/bots/api/#inlinequeryresultcachedmpeg4gif)
*
* [InlineQueryResultCachedPhoto](https://core.telegram.org/bots/api/#inlinequeryresultcachedphoto)
*
* [InlineQueryResultCachedSticker](https://core.telegram.org/bots/api/#inlinequeryresultcachedsticker)
*
* [InlineQueryResultCachedVideo](https://core.telegram.org/bots/api/#inlinequeryresultcachedvideo)
*
* [InlineQueryResultCachedVoice](https://core.telegram.org/bots/api/#inlinequeryresultcachedvoice)
*
* [InlineQueryResultArticle](https://core.telegram.org/bots/api/#inlinequeryresultarticle)
*
* [InlineQueryResultAudio](https://core.telegram.org/bots/api/#inlinequeryresultaudio)
*
* [InlineQueryResultContact](https://core.telegram.org/bots/api/#inlinequeryresultcontact)
*
* [InlineQueryResultGame](https://core.telegram.org/bots/api/#inlinequeryresultgame)
*
* [InlineQueryResultDocument](https://core.telegram.org/bots/api/#inlinequeryresultdocument)
*
* [InlineQueryResultGif](https://core.telegram.org/bots/api/#inlinequeryresultgif)
*
* [InlineQueryResultLocation](https://core.telegram.org/bots/api/#inlinequeryresultlocation)
*
* [InlineQueryResultMpeg4Gif](https://core.telegram.org/bots/api/#inlinequeryresultmpeg4gif)
*
* [InlineQueryResultPhoto](https://core.telegram.org/bots/api/#inlinequeryresultphoto)
*
* [InlineQueryResultVenue](https://core.telegram.org/bots/api/#inlinequeryresultvenue)
*
* [InlineQueryResultVideo](https://core.telegram.org/bots/api/#inlinequeryresultvideo)
*
* [InlineQueryResultVoice](https://core.telegram.org/bots/api/#inlinequeryresultvoice)
*
* @typedef {
* InlineQueryResultCachedAudio|InlineQueryResultCachedDocument|InlineQueryResultCachedGif|
* InlineQueryResultCachedMpeg4Gif|InlineQueryResultCachedPhoto|InlineQueryResultCachedSticker|
* InlineQueryResultCachedVideo|InlineQueryResultCachedVoice|InlineQueryResultArticle|InlineQueryResultAudio|
* InlineQueryResultContact|InlineQueryResultGame|InlineQueryResultDocument|InlineQueryResultGif|
* InlineQueryResultLocation|InlineQueryResultMpeg4Gif|InlineQueryResultPhoto|InlineQueryResultVenue|
* InlineQueryResultVideo|
* InlineQueryResultVoice
* } InlineQueryResult
* @see https://core.telegram.org/bots/api/#inlinequeryresult
*/
/**
* Represents a link to an article or web page.
*
* @typedef {object} InlineQueryResultArticle
* @property {'article'} type Type of the result, must be *article*
* @property {string} id Unique identifier for this result, 1-64 Bytes
* @property {string} title Title of the result
* @property {InputMessageContent} input_message_content Content of the message to be sent
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {string} [url] *Optional*. URL of the result
* @property {boolean} [hide_url] *Optional*. Pass *True* if you don't want the URL to be shown in the message
* @property {string} [description] *Optional*. Short description of the result
* @property {string} [thumbnail_url] *Optional*. Url of the thumbnail for the result
* @property {number} [thumbnail_width] *Optional*. Thumbnail width
* @property {number} [thumbnail_height] *Optional*. Thumbnail height
* @see https://core.telegram.org/bots/api/#inlinequeryresultarticle
*/
/**
* Represents a link to a photo. By default, this photo will be sent by the user with optional caption.
* Alternatively, you can use *input\_message\_content* to send a message with the specified content
* instead of the photo.
*
* @typedef {object} InlineQueryResultPhoto
* @property {'photo'} type Type of the result, must be *photo*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} photo_url A valid URL of the photo. Photo must be in **JPEG** format. Photo size must not
* exceed 5MB
* @property {string} thumbnail_url URL of the thumbnail for the photo
* @property {number} [photo_width] *Optional*. Width of the photo
* @property {number} [photo_height] *Optional*. Height of the photo
* @property {string} [title] *Optional*. Title for the result
* @property {string} [description] *Optional*. Short description of the result
* @property {string} [caption] *Optional*. Caption of the photo to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the photo caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the photo
* @see https://core.telegram.org/bots/api/#inlinequeryresultphoto
*/
/**
* Represents a link to an animated GIF file. By default, this animated GIF file will be sent by the
* user with optional caption. Alternatively, you can use *input\_message\_content* to send a message
* with the specified content instead of the animation.
*
* @typedef {object} InlineQueryResultGif
* @property {'gif'} type Type of the result, must be *gif*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} gif_url A valid URL for the GIF file. File size must not exceed 1MB
* @property {number} [gif_width] *Optional*. Width of the GIF
* @property {number} [gif_height] *Optional*. Height of the GIF
* @property {number} [gif_duration] *Optional*. Duration of the GIF in seconds
* @property {string} thumbnail_url URL of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result
* @property {'image/jpeg'|'image/gif'|'video/mp4'} [thumbnail_mime_type=image/jpeg] *Optional*. MIME type of the
* thumbnail, must be one of “image/jpeg”,
* “image/gif”, or “video/mp4”. Defaults to “image/jpeg”
* @property {string} [title] *Optional*. Title for the result
* @property {string} [caption] *Optional*. Caption of the GIF file to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the GIF animation
* @see https://core.telegram.org/bots/api/#inlinequeryresultgif
*/
/**
* Represents a link to a video animation (H.264/MPEG-4 AVC video without sound). By default, this
* animated MPEG-4 file will be sent by the user with optional caption. Alternatively, you can use
* *input\_message\_content* to send a message with the specified content instead of the animation.
*
* @typedef {object} InlineQueryResultMpeg4Gif
* @property {'mpeg4_gif'} type Type of the result, must be *mpeg4\_gif*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} mpeg4_url A valid URL for the MPEG4 file. File size must not exceed 1MB
* @property {number} [mpeg4_width] *Optional*. Video width
* @property {number} [mpeg4_height] *Optional*. Video height
* @property {number} [mpeg4_duration] *Optional*. Video duration in seconds
* @property {string} thumbnail_url URL of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result
* @property {'image/jpeg'|'image/gif'|'video/mp4'} [thumbnail_mime_type=image/jpeg] *Optional*. MIME type of the
* thumbnail, must be one of “image/jpeg”,
* “image/gif”, or “video/mp4”. Defaults to “image/jpeg”
* @property {string} [title] *Optional*. Title for the result
* @property {string} [caption] *Optional*. Caption of the MPEG-4 file to be sent, 0-1024 characters after
* entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the video animation
* @see https://core.telegram.org/bots/api/#inlinequeryresultmpeg4gif
*/
/**
* Represents a link to a page containing an embedded video player or a video file. By default, this
* video file will be sent by the user with an optional caption. Alternatively, you can use
* *input\_message\_content* to send a message with the specified content instead of the video.
*
* If an InlineQueryResultVideo message contains an embedded video (e.g., YouTube), you **must**
* replace its content using *input\_message\_content*.
*
* @typedef {object} InlineQueryResultVideo
* @property {'video'} type Type of the result, must be *video*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} video_url A valid URL for the embedded video player or video file
* @property {'text/html'|'video/mp4'} mime_type MIME type of the content of the video URL, “text/html” or “video/mp4”
* @property {string} thumbnail_url URL of the thumbnail (JPEG only) for the video
* @property {string} title Title for the result
* @property {string} [caption] *Optional*. Caption of the video to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the video caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {number} [video_width] *Optional*. Video width
* @property {number} [video_height] *Optional*. Video height
* @property {number} [video_duration] *Optional*. Video duration in seconds
* @property {string} [description] *Optional*. Short description of the result
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the video. This field is **required** if InlineQueryResultVideo is used to send an HTML-page as a result (e.g., a
* YouTube video).
* @see https://core.telegram.org/bots/api/#inlinequeryresultvideo
*/
/**
* Represents a link to an MP3 audio file. By default, this audio file will be sent by the user.
* Alternatively, you can use *input\_message\_content* to send a message with the specified content
* instead of the audio.
*
* @typedef {object} InlineQueryResultAudio
* @property {'audio'} type Type of the result, must be *audio*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} audio_url A valid URL for the audio file
* @property {string} title Title
* @property {string} [caption] *Optional*. Caption, 0-1024 characters after entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the audio caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {string} [performer] *Optional*. Performer
* @property {number} [audio_duration] *Optional*. Audio duration in seconds
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the audio
* @see https://core.telegram.org/bots/api/#inlinequeryresultaudio
*/
/**
* Represents a link to a voice recording in an .OGG container encoded with OPUS. By default, this
* voice recording will be sent by the user. Alternatively, you can use *input\_message\_content* to
* send a message with the specified content instead of the the voice message.
*
* @typedef {object} InlineQueryResultVoice
* @property {'voice'} type Type of the result, must be *voice*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} voice_url A valid URL for the voice recording
* @property {string} title Recording title
* @property {string} [caption] *Optional*. Caption, 0-1024 characters after entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the voice message caption. See
* [formatting options](https://core.telegram.org/bots/api/#formatting-options) for
* more details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {number} [voice_duration] *Optional*. Recording duration in seconds
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the voice recording
* @see https://core.telegram.org/bots/api/#inlinequeryresultvoice
*/
/**
* Represents a link to a file. By default, this file will be sent by the user with an optional
* caption. Alternatively, you can use *input\_message\_content* to send a message with the specified
* content instead of the file. Currently, only **.PDF** and **.ZIP** files can be sent using this
* method.
*
* @typedef {object} InlineQueryResultDocument
* @property {'document'} type Type of the result, must be *document*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} title Title for the result
* @property {string} [caption] *Optional*. Caption of the document to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the document caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {string} document_url A valid URL for the file
* @property {'application/pdf'|'application/zip'} mime_type MIME type of the content of the file, either
* “application/pdf” or
* “application/zip”
* @property {string} [description] *Optional*. Short description of the result
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. Inline keyboard attached to the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the file
* @property {string} [thumbnail_url] *Optional*. URL of the thumbnail (JPEG only) for the file
* @property {number} [thumbnail_width] *Optional*. Thumbnail width
* @property {number} [thumbnail_height] *Optional*. Thumbnail height
* @see https://core.telegram.org/bots/api/#inlinequeryresultdocument
*/
/**
* 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.
*
* @typedef {object} InlineQueryResultLocation
* @property {'location'} type Type of the result, must be *location*
* @property {string} id Unique identifier for this result, 1-64 Bytes
* @property {number} latitude Location latitude in degrees
* @property {number} longitude Location longitude in degrees
* @property {string} title Location title
* @property {number} [horizontal_accuracy] *Optional*. The radius of uncertainty for the location, measured in
* meters;
* 0-1500
* @property {number} [live_period] *Optional*. Period in seconds for which the location can be updated, should be
* between 60 and 86400.
* @property {number} [heading] *Optional*. For live locations, a direction in which the user is moving, in
* degrees. Must be between 1 and 360 if specified.
* @property {number} [proximity_alert_radius] *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.
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the location
* @property {string} [thumbnail_url] *Optional*. Url of the thumbnail for the result
* @property {number} [thumbnail_width] *Optional*. Thumbnail width
* @property {number} [thumbnail_height] *Optional*. Thumbnail height
* @see https://core.telegram.org/bots/api/#inlinequeryresultlocation
*/
/**
* Represents a venue. By default, the venue will be sent by the user. Alternatively, you can use
* *input\_message\_content* to send a message with the specified content instead of the venue.
*
* @typedef {object} InlineQueryResultVenue
* @property {'venue'} type Type of the result, must be *venue*
* @property {string} id Unique identifier for this result, 1-64 Bytes
* @property {number} latitude Latitude of the venue location in degrees
* @property {number} longitude Longitude of the venue location in degrees
* @property {string} title Title of the venue
* @property {string} address Address of the venue
* @property {string} [foursquare_id] *Optional*. Foursquare identifier of the venue if known
* @property {string} [foursquare_type] *Optional*. Foursquare type of the venue, if known. (For example,
* “arts\_entertainment/default”, “arts\_entertainment/aquarium” or
* “food/icecream”.)
* @property {string} [google_place_id] *Optional*. Google Places identifier of the venue
* @property {string} [google_place_type] *Optional*. Google Places type of the venue. (See [supported
* types](https://developers.google.com/places/web-service/supported_types).)
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the venue
* @property {string} [thumbnail_url] *Optional*. Url of the thumbnail for the result
* @property {number} [thumbnail_width] *Optional*. Thumbnail width
* @property {number} [thumbnail_height] *Optional*. Thumbnail height
* @see https://core.telegram.org/bots/api/#inlinequeryresultvenue
*/
/**
* Represents a contact with a phone number. By default, this contact will be sent by the user.
* Alternatively, you can use *input\_message\_content* to send a message with the specified content
* instead of the contact.
*
* @typedef {object} InlineQueryResultContact
* @property {'contact'} type Type of the result, must be *contact*
* @property {string} id Unique identifier for this result, 1-64 Bytes
* @property {string} phone_number Contact's phone number
* @property {string} first_name Contact's first name
* @property {string} [last_name] *Optional*. Contact's last name
* @property {string} [vcard] *Optional*. Additional data about the contact in the form of a
* [vCard](https://en.wikipedia.org/wiki/VCard), 0-2048 bytes
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the contact
* @property {string} [thumbnail_url] *Optional*. Url of the thumbnail for the result
* @property {number} [thumbnail_width] *Optional*. Thumbnail width
* @property {number} [thumbnail_height] *Optional*. Thumbnail height
* @see https://core.telegram.org/bots/api/#inlinequeryresultcontact
*/
/**
* Represents a [Game](https://core.telegram.org/bots/api/#games)
*.
*
* @typedef {object} InlineQueryResultGame
* @property {'game'} type Type of the result, must be *game*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} game_short_name Short name of the game
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @see https://core.telegram.org/bots/api/#inlinequeryresultgame
*/
/**
* Represents a link to a photo stored on the Telegram servers. By default, this photo will be sent by
* the user with an optional caption. Alternatively, you can use *input\_message\_content* to send a
* message with the specified content instead of the photo.
*
* @typedef {object} InlineQueryResultCachedPhoto
* @property {'photo'} type Type of the result, must be *photo*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} photo_file_id A valid file identifier of the photo
* @property {string} [title] *Optional*. Title for the result
* @property {string} [description] *Optional*. Short description of the result
* @property {string} [caption] *Optional*. Caption of the photo to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the photo caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the photo
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedphoto
*/
/**
* Represents a link to an animated GIF file stored on the Telegram servers. By default, this animated
* GIF file will be sent by the user with an optional caption. Alternatively, you can use
* *input\_message\_content* to send a message with specified content instead of the animation.
*
* @typedef {object} InlineQueryResultCachedGif
* @property {'gif'} type Type of the result, must be *gif*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} gif_file_id A valid file identifier for the GIF file
* @property {string} [title] *Optional*. Title for the result
* @property {string} [caption] *Optional*. Caption of the GIF file to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the GIF animation
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedgif
*/
/**
* Represents a link to a video animation (H.264/MPEG-4 AVC video without sound) stored on the Telegram
* servers. By default, this animated MPEG-4 file will be sent by the user with an optional caption.
* Alternatively, you can use *input\_message\_content* to send a message with the specified content
* instead of the animation.
*
* @typedef {object} InlineQueryResultCachedMpeg4Gif
* @property {'mpeg4_gif'} type Type of the result, must be *mpeg4\_gif*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} mpeg4_file_id A valid file identifier for the MPEG4 file
* @property {string} [title] *Optional*. Title for the result
* @property {string} [caption] *Optional*. Caption of the MPEG-4 file to be sent, 0-1024 characters after
* entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the video animation
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedmpeg4gif
*/
/**
* Represents a link to a sticker stored on the Telegram servers. By default, this sticker will be sent
* by the user. Alternatively, you can use *input\_message\_content* to send a message with the
* specified content instead of the sticker.
*
* @typedef {object} InlineQueryResultCachedSticker
* @property {'sticker'} type Type of the result, must be *sticker*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} sticker_file_id A valid file identifier of the sticker
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the sticker
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedsticker
*/
/**
* Represents a link to a file stored on the Telegram servers. By default, this file will be sent by
* the user with an optional caption. Alternatively, you can use *input\_message\_content* to send a
* message with the specified content instead of the file.
*
* @typedef {object} InlineQueryResultCachedDocument
* @property {'document'} type Type of the result, must be *document*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} title Title for the result
* @property {string} document_file_id A valid file identifier for the file
* @property {string} [description] *Optional*. Short description of the result
* @property {string} [caption] *Optional*. Caption of the document to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the document caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the file
* @see https://core.telegram.org/bots/api/#inlinequeryresultcacheddocument
*/
/**
* Represents a link to a video file stored on the Telegram servers. By default, this video file will
* be sent by the user with an optional caption. Alternatively, you can use *input\_message\_content*
* to send a message with the specified content instead of the video.
*
* @typedef {object} InlineQueryResultCachedVideo
* @property {'video'} type Type of the result, must be *video*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} video_file_id A valid file identifier for the video file
* @property {string} title Title for the result
* @property {string} [description] *Optional*. Short description of the result
* @property {string} [caption] *Optional*. Caption of the video to be sent, 0-1024 characters after entities
* parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the video caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the video
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedvideo
*/
/**
* Represents a link to a voice message stored on the Telegram servers. By default, this voice message
* will be sent by the user. Alternatively, you can use *input\_message\_content* to send a message
* with the specified content instead of the voice message.
*
* @typedef {object} InlineQueryResultCachedVoice
* @property {'voice'} type Type of the result, must be *voice*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} voice_file_id A valid file identifier for the voice message
* @property {string} title Voice message title
* @property {string} [caption] *Optional*. Caption, 0-1024 characters after entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the voice message caption. See
* [formatting options](https://core.telegram.org/bots/api/#formatting-options) for
* more details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the voice message
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedvoice
*/
/**
* Represents a link to an MP3 audio file stored on the Telegram servers. By default, this audio file
* will be sent by the user. Alternatively, you can use *input\_message\_content* to send a message
* with the specified content instead of the audio.
*
* @typedef {object} InlineQueryResultCachedAudio
* @property {'audio'} type Type of the result, must be *audio*
* @property {string} id Unique identifier for this result, 1-64 bytes
* @property {string} audio_file_id A valid file identifier for the audio file
* @property {string} [caption] *Optional*. Caption, 0-1024 characters after entities parsing
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the audio caption. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [caption_entities] *Optional*. List of special entities that appear in the caption,
* which can be specified instead of *parse\_mode*
* @property {InlineKeyboardMarkup} [reply_markup] *Optional*. [Inline
* keyboard](https://core.telegram.org/bots/features#inline-keyboards) attached to
* the message
* @property {InputMessageContent} [input_message_content] *Optional*. Content of the message to be sent instead of
* the audio
* @see https://core.telegram.org/bots/api/#inlinequeryresultcachedaudio
*/
/**
* This object represents the content of a message to be sent as a result of an inline query. Telegram
* clients currently support the following 5 types:
*
* [InputTextMessageContent](https://core.telegram.org/bots/api/#inputtextmessagecontent)
*
* [InputLocationMessageContent](https://core.telegram.org/bots/api/#inputlocationmessagecontent)
*
* [InputVenueMessageContent](https://core.telegram.org/bots/api/#inputvenuemessagecontent)
*
* [InputContactMessageContent](https://core.telegram.org/bots/api/#inputcontactmessagecontent)
*
* [InputInvoiceMessageContent](https://core.telegram.org/bots/api/#inputinvoicemessagecontent)
*
* @typedef {
* InputTextMessageContent|InputLocationMessageContent|InputVenueMessageContent|InputContactMessageContent|
* InputInvoiceMessageContent
* } InputMessageContent
* @see https://core.telegram.org/bots/api/#inputmessagecontent
*/
/**
* Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent)
* of a text message
* to be sent as the result of an inline query.
*
* @typedef {object} InputTextMessageContent
* @property {string} message_text Text of the message to be sent, 1-4096 characters
* @property {ParseMode} [parse_mode] *Optional*. Mode for parsing entities in the message text. See [formatting
* options](https://core.telegram.org/bots/api/#formatting-options) for more
* details.
* @property {MessageEntity[]} [entities] *Optional*. List of special entities that appear in message text, which can
* be specified instead of *parse\_mode*
* @property {boolean} [disable_web_page_preview] *Optional*. Disables link previews for links in the sent message
* @see https://core.telegram.org/bots/api/#inputtextmessagecontent
*/
/**
* Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent)
* of a location
* message to be sent as the result of an inline query.
*
* @typedef {object} InputLocationMessageContent
* @property {number} latitude Latitude of the location in degrees
* @property {number} longitude Longitude of the location in degrees
* @property {number} [horizontal_accuracy] *Optional*. The radius of uncertainty for the location, measured in
* meters;
* 0-1500
* @property {number} [live_period] *Optional*. Period in seconds for which the location can be updated, should be
* between 60 and 86400.
* @property {number} [heading] *Optional*. For live locations, a direction in which the user is moving, in
* degrees. Must be between 1 and 360 if specified.
* @property {number} [proximity_alert_radius] *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.
* @see https://core.telegram.org/bots/api/#inputlocationmessagecontent
*/
/**
* Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent)
* of a venue message
* to be sent as the result of an inline query.
*
* @typedef {object} InputVenueMessageContent
* @property {number} latitude Latitude of the venue in degrees
* @property {number} longitude Longitude of the venue in degrees
* @property {string} title Name of the venue
* @property {string} address Address of the venue
* @property {string} [foursquare_id] *Optional*. Foursquare identifier of the venue, if known
* @property {string} [foursquare_type] *Optional*. Foursquare type of the venue, if known. (For example,
* “arts\_entertainment/default”, “arts\_entertainment/aquarium” or
* “food/icecream”.)
* @property {string} [google_place_id] *Optional*. Google Places identifier of the venue
* @property {string} [google_place_type] *Optional*. Google Places type of the venue. (See [supported
* types](https://developers.google.com/places/web-service/supported_types).)
* @see https://core.telegram.org/bots/api/#inputvenuemessagecontent
*/
/**
* Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent)
* of a contact
* message to be sent as the result of an inline query.
*
* @typedef {object} InputContactMessageContent
* @property {string} phone_number Contact's phone number
* @property {string} first_name Contact's first name
* @property {string} [last_name] *Optional*. Contact's last name
* @property {string} [vcard] *Optional*. Additional data about the contact in the form of a
* [vCard](https://en.wikipedia.org/wiki/VCard), 0-2048 bytes
* @see https://core.telegram.org/bots/api/#inputcontactmessagecontent
*/
/**
* Represents the [content](https://core.telegram.org/bots/api/#inputmessagecontent)
* of an invoice
* message to be sent as the result of an inline query.
*
* @typedef {object} InputInvoiceMessageContent
* @property {string} title Product name, 1-32 characters
* @property {string} description Product description, 1-255 characters
* @property {string} payload Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the
* user, use for your internal processes.
* @property {string} provider_token Payment provider token, obtained via [@BotFather](https://t.me/botfather)
* @property {string} currency Three-letter ISO 4217 currency code, see [more on
* currencies](https://core.telegram.org/bots/payments#supported-currencies)
* @property {LabeledPrice[]} prices Price breakdown, a JSON-serialized list of components (e.g. product price, tax,
* discount, delivery cost, delivery tax, bonus, etc.)
* @property {number} [max_tip_amount] *Optional*. The maximum accepted amount for tips in the *smallest units* of the
* currency (integer, **not** float/double). For example, for a maximum tip of `US$
* 1.45` pass `max_tip_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). Defaults to 0
* @property {number[]} [suggested_tip_amounts] *Optional*. A JSON-serialized array of suggested amounts of tip in the
* *smallest units* of the currency (integer, **not** float/double). At most 4 suggested tip amounts can be
* specified. The suggested tip amounts must be positive, passed in a strictly increased order and must not exceed
* *max\_tip\_amount*.
* @property {string} [provider_data] *Optional*. A JSON-serialized object for data about the invoice, which will be
* shared with the payment provider. A detailed description of the required fields
* should be provided by the payment provider.
* @property {string} [photo_url] *Optional*. URL of the product photo for the invoice. Can be a photo of the
* goods or a marketing image for a service.
* @property {number} [photo_size] *Optional*. Photo size in bytes
* @property {number} [photo_width] *Optional*. Photo width
* @property {number} [photo_height] *Optional*. Photo height
* @property {boolean} [need_name] *Optional*. Pass *True* if you require the user's full name to complete the
* order
* @property {boolean} [need_phone_number] *Optional*. Pass *True* if you require the user's phone number to complete
* the order
* @property {boolean} [need_email] *Optional*. Pass *True* if you require the user's email address to complete the
* order
* @property {boolean} [need_shipping_address] *Optional*. Pass *True* if you require the user's shipping address to
* complete the order
* @property {boolean} [send_phone_number_to_provider] *Optional*. Pass *True* if the user's phone number should be
* sent to provider
* @property {boolean} [send_email_to_provider] *Optional*. Pass *True* if the user's email address should be sent to
* provider
* @property {boolean} [is_flexible] *Optional*. Pass *True* if the final price depends on the shipping method
* @see https://core.telegram.org/bots/api/#inputinvoicemessagecontent
*/
/**
* Represents a [result](https://core.telegram.org/bots/api/#inlinequeryresult)
* of an inline query that
* was chosen by the user and sent to their chat partner.
*
* @typedef {object} ChosenInlineResult
* @property {string} result_id The unique identifier for the result that was chosen
* @property {User} from The user that chose the result
* @property {Location} [location] *Optional*. Sender location, only for bots that require user location
* @property {string} [inline_message_id] *Optional*. Identifier of the sent inline message. Available only if there
* is an
* [inline keyboard](https://core.telegram.org/bots/api/#inlinekeyboardmarkup)
* attached to the message. Will be also received in [callback
* queries](https://core.telegram.org/bots/api/#callbackquery) and can be used to
* [edit](https://core.telegram.org/bots/api/#updating-messages) the message.
* @property {string} query The query that was used to obtain the result
* @see https://core.telegram.org/bots/api/#choseninlineresult
*/
/**
* Describes an inline message sent by a [Web App](https://core.telegram.org/bots/webapps)
* on behalf of
* a user.
*
* @typedef {object} SentWebAppMessage
* @property {string} [inline_message_id] *Optional*. Identifier of the sent inline message. Available only if there
* is an
* [inline keyboard](https://core.telegram.org/bots/api/#inlinekeyboardmarkup)
* attached to the message.
* @see https://core.telegram.org/bots/api/#sentwebappmessage
*/
/**
* This object represents a portion of the price for goods or services.
*
* @typedef {object} LabeledPrice
* @property {string} label Portion label
* @property {number} amount Price of the product in the *smallest units* of the
* [currency](https://core.telegram.org/bots/payments#supported-currencies)
* (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).
* @see https://core.telegram.org/bots/api/#labeledprice
*/
/**
* This object contains basic information about an invoice.
*
* @typedef {object} Invoice
* @property {string} title Product name
* @property {string} description Product description
* @property {string} start_parameter Unique bot deep-linking parameter that can be used to generate this invoice
* @property {string} currency Three-letter ISO 4217
* [currency](https://core.telegram.org/bots/payments#supported-currencies) code
* @property {number} total_amount 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).
* @see https://core.telegram.org/bots/api/#invoice
*/
/**
* This object represents a shipping address.
*
* @typedef {object} ShippingAddress
* @property {string} country_code Two-letter ISO 3166-1 alpha-2 country code
* @property {string} state State, if applicable
* @property {string} city City
* @property {string} street_line1 First line for the address
* @property {string} street_line2 Second line for the address
* @property {string} post_code Address post code
* @see https://core.telegram.org/bots/api/#shippingaddress
*/
/**
* This object represents information about an order.
*
* @typedef {object} OrderInfo
* @property {string} [name] *Optional*. User name
* @property {string} [phone_number] *Optional*. User's phone number
* @property {string} [email] *Optional*. User email
* @property {ShippingAddress} [shipping_address] *Optional*. User shipping address
* @see https://core.telegram.org/bots/api/#orderinfo
*/
/**
* This object represents one shipping option.
*
* @typedef {object} ShippingOption
* @property {string} id Shipping option identifier
* @property {string} title Option title
* @property {LabeledPrice[]} prices List of price portions
* @see https://core.telegram.org/bots/api/#shippingoption
*/
/**
* This object contains basic information about a successful payment.
*
* @typedef {object} SuccessfulPayment
* @property {string} currency Three-letter ISO 4217
* [currency](https://core.telegram.org/bots/payments#supported-currencies) code
* @property {number} total_amount 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).
* @property {string} invoice_payload Bot specified invoice payload
* @property {string} [shipping_option_id] *Optional*. Identifier of the shipping option chosen by the user
* @property {OrderInfo} [order_info] *Optional*. Order information provided by the user
* @property {string} telegram_payment_charge_id Telegram payment identifier
* @property {string} provider_payment_charge_id Provider payment identifier
* @see https://core.telegram.org/bots/api/#successfulpayment
*/
/**
* This object contains information about an incoming shipping query.
*
* @typedef {object} ShippingQuery
* @property {string} id Unique query identifier
* @property {User} from User who sent the query
* @property {string} invoice_payload Bot specified invoice payload
* @property {ShippingAddress} shipping_address User specified shipping address
* @see https://core.telegram.org/bots/api/#shippingquery
*/
/**
* This object contains information about an incoming pre-checkout query.
*
* @typedef {object} PreCheckoutQuery
* @property {string} id Unique query identifier
* @property {User} from User who sent the query
* @property {string} currency Three-letter ISO 4217
* [currency](https://core.telegram.org/bots/payments#supported-currencies) code
* @property {number} total_amount 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).
* @property {string} invoice_payload Bot specified invoice payload
* @property {string} [shipping_option_id] *Optional*. Identifier of the shipping option chosen by the user
* @property {OrderInfo} [order_info] *Optional*. Order information provided by the user
* @see https://core.telegram.org/bots/api/#precheckoutquery
*/
/**
* Describes Telegram Passport data shared with the bot by the user.
*
* @typedef {object} PassportData
* @property {EncryptedPassportElement[]} data Array with information about documents and other Telegram Passport
* elements that was shared with the bot
* @property {EncryptedCredentials} credentials Encrypted credentials required to decrypt the data
* @see https://core.telegram.org/bots/api/#passportdata
*/
/**
* 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.
*
* @typedef {object} PassportFile
* @property {string} file_id Identifier for this file, which can be used to download or reuse the file
* @property {string} file_unique_id 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.
* @property {number} file_size File size in bytes
* @property {number} file_date Unix time when the file was uploaded
* @see https://core.telegram.org/bots/api/#passportfile
*/
/**
* Describes documents or other Telegram Passport elements shared with the bot by the user.
*
* @typedef {object} EncryptedPassportElement
* @property {
* 'personal_details'|'passport'|'driver_license'|'identity_card'|'internal_passport'|'address'|'utility_bill'|
* 'bank_statement'|'rental_agreement'|'passport_registration'|'temporary_registration'|'phone_number'|'email'
* } type
* 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”.
* @property {string} [data] *Optional*. Base64-encoded encrypted Telegram Passport element data provided by
* the user, available for “personal\_details”, “passport”, “driver\_license”,
* “identity\_card”, “internal\_passport” and “address” types. Can be decrypted and
* verified using the accompanying
* [EncryptedCredentials](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {string} [phone_number] *Optional*. User's verified phone number, available only for “phone\_number”
* type
* @property {string} [email] *Optional*. User's verified email address, available only for “email” type
* @property {PassportFile[]} [files] *Optional*. 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](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {PassportFile} [front_side] *Optional*. 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](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {PassportFile} [reverse_side] *Optional*. 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](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {PassportFile} [selfie] *Optional*. 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](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {PassportFile[]} [translation] *Optional*. 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](https://core.telegram.org/bots/api/#encryptedcredentials).
* @property {string} hash Base64-encoded element hash for using in
* [PassportElementErrorUnspecified](https://core.telegram.org/bots/api/#passportelementerrorunspecified)
* @see https://core.telegram.org/bots/api/#encryptedpassportelement
*/
/**
* Describes data required for decrypting and authenticating
* [EncryptedPassportElement](https://core.telegram.org/bots/api/#encryptedpassportelement)
*. See the
* [Telegram Passport Documentation](https://core.telegram.org/passport#receiving-information)
* for a
* complete description of the data decryption and authentication processes.
*
* @typedef {object} EncryptedCredentials
* @property {string} data Base64-encoded encrypted JSON-serialized data with unique user's payload, data
* hashes and secrets required for
* [EncryptedPassportElement](https://core.telegram.org/bots/api/#encryptedpassportelement)
* decryption and authentication
* @property {string} hash Base64-encoded data hash for data authentication
* @property {string} secret Base64-encoded secret, encrypted with the bot's public RSA key, required for
* data decryption
* @see https://core.telegram.org/bots/api/#encryptedcredentials
*/
/**
* This object represents an error in the Telegram Passport element which was submitted that should be
* resolved by the user. It should be one of:
*
* [PassportElementErrorDataField](https://core.telegram.org/bots/api/#passportelementerrordatafield)
*
* [PassportElementErrorFrontSide](https://core.telegram.org/bots/api/#passportelementerrorfrontside)
*
* [PassportElementErrorReverseSide](https://core.telegram.org/bots/api/#passportelementerrorreverseside)
*
* [PassportElementErrorSelfie](https://core.telegram.org/bots/api/#passportelementerrorselfie)
*
* [PassportElementErrorFile](https://core.telegram.org/bots/api/#passportelementerrorfile)
*
* [PassportElementErrorFiles](https://core.telegram.org/bots/api/#passportelementerrorfiles)
*
* [PassportElementErrorTranslationFile](https://core.telegram.org/bots/api/#passportelementerrortranslationfile)
*
* [PassportElementErrorTranslationFiles](https://core.telegram.org/bots/api/#passportelementerrortranslationfiles)
*
* [PassportElementErrorUnspecified](https://core.telegram.org/bots/api/#passportelementerrorunspecified)
*
*
* @typedef {
* PassportElementErrorDataField|PassportElementErrorFrontSide|PassportElementErrorReverseSide|
* PassportElementErrorSelfie|PassportElementErrorFile|PassportElementErrorFiles|PassportElementErrorTranslationFile|
* PassportElementErrorTranslationFiles|PassportElementErrorUnspecified
* } PassportElementError
* @see https://core.telegram.org/bots/api/#passportelementerror
*/
/**
* Represents an issue in one of the data fields that was provided by the user. The error is considered
* resolved when the field's value changes.
*
* @typedef {object} PassportElementErrorDataField
* @property {'data'} source Error source, must be *data*
* @property {'personal_details'|'passport'|'driver_license'|'identity_card'|'internal_passport'|'address'} type The
* section of the user's Telegram Passport which has the error, one of
* “personal\_details”, “passport”, “driver\_license”, “identity\_card”,
* “internal\_passport”, “address”
* @property {string} field_name Name of the data field which has the error
* @property {string} data_hash Base64-encoded data hash
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrordatafield
*/
/**
* Represents an issue with the front side of a document. The error is considered resolved when the
* file with the front side of the document changes.
*
* @typedef {object} PassportElementErrorFrontSide
* @property {'front_side'} source Error source, must be *front\_side*
* @property {'passport'|'driver_license'|'identity_card'|'internal_passport'} type The section of the user's Telegram
* Passport which has the issue, one of
* “passport”, “driver\_license”, “identity\_card”, “internal\_passport”
* @property {string} file_hash Base64-encoded hash of the file with the front side of the document
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorfrontside
*/
/**
* Represents an issue with the reverse side of a document. The error is considered resolved when the
* file with reverse side of the document changes.
*
* @typedef {object} PassportElementErrorReverseSide
* @property {'reverse_side'} source Error source, must be *reverse\_side*
* @property {'driver_license'|'identity_card'} type The section of the user's Telegram Passport which has the issue,
* one of
* “driver\_license”, “identity\_card”
* @property {string} file_hash Base64-encoded hash of the file with the reverse side of the document
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorreverseside
*/
/**
* Represents an issue with the selfie with a document. The error is considered resolved when the file
* with the selfie changes.
*
* @typedef {object} PassportElementErrorSelfie
* @property {'selfie'} source Error source, must be *selfie*
* @property {'passport'|'driver_license'|'identity_card'|'internal_passport'} type The section of the user's Telegram
* Passport which has the issue, one of
* “passport”, “driver\_license”, “identity\_card”, “internal\_passport”
* @property {string} file_hash Base64-encoded hash of the file with the selfie
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorselfie
*/
/**
* Represents an issue with a document scan. The error is considered resolved when the file with the
* document scan changes.
*
* @typedef {object} PassportElementErrorFile
* @property {'file'} source Error source, must be *file*
* @property {'utility_bill'|'bank_statement'|'rental_agreement'|'passport_registration'|'temporary_registration'} type
* The section of the user's Telegram Passport which has the issue, one of
* “utility\_bill”, “bank\_statement”, “rental\_agreement”,
* “passport\_registration”, “temporary\_registration”
* @property {string} file_hash Base64-encoded file hash
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorfile
*/
/**
* Represents an issue with a list of scans. The error is considered resolved when the list of files
* containing the scans changes.
*
* @typedef {object} PassportElementErrorFiles
* @property {'files'} source Error source, must be *files*
* @property {'utility_bill'|'bank_statement'|'rental_agreement'|'passport_registration'|'temporary_registration'} type
* The section of the user's Telegram Passport which has the issue, one of
* “utility\_bill”, “bank\_statement”, “rental\_agreement”,
* “passport\_registration”, “temporary\_registration”
* @property {string[]} file_hashes List of base64-encoded file hashes
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorfiles
*/
/**
* Represents an issue with one of the files that constitute the translation of a document. The error
* is considered resolved when the file changes.
*
* @typedef {object} PassportElementErrorTranslationFile
* @property {'translation_file'} source Error source, must be *translation\_file*
* @property {
* 'passport'|'driver_license'|'identity_card'|'internal_passport'|'utility_bill'|'bank_statement'|'rental_agreement'|
* 'passport_registration'|'temporary_registration'
* } type
* Type of element of the user's Telegram Passport which has the issue, one of
* “passport”, “driver\_license”, “identity\_card”, “internal\_passport”,
* “utility\_bill”, “bank\_statement”, “rental\_agreement”,
* “passport\_registration”, “temporary\_registration”
* @property {string} file_hash Base64-encoded file hash
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrortranslationfile
*/
/**
* Represents an issue with the translated version of a document. The error is considered resolved when
* a file with the document translation change.
*
* @typedef {object} PassportElementErrorTranslationFiles
* @property {'translation_files'} source Error source, must be *translation\_files*
* @property {
* 'passport'|'driver_license'|'identity_card'|'internal_passport'|'utility_bill'|'bank_statement'|'rental_agreement'
* |'passport_registration'|'temporary_registration'
* } type
* Type of element of the user's Telegram Passport which has the issue, one of
* “passport”, “driver\_license”, “identity\_card”, “internal\_passport”,
* “utility\_bill”, “bank\_statement”, “rental\_agreement”,
* “passport\_registration”, “temporary\_registration”
* @property {string[]} file_hashes List of base64-encoded file hashes
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrortranslationfiles
*/
/**
* Represents an issue in an unspecified place. The error is considered resolved when new data is
* added.
*
* @typedef {object} PassportElementErrorUnspecified
* @property {'unspecified'} source Error source, must be *unspecified*
* @property {string} type Type of element of the user's Telegram Passport which has the issue
* @property {string} element_hash Base64-encoded element hash
* @property {string} message Error message
* @see https://core.telegram.org/bots/api/#passportelementerrorunspecified
*/
/**
* This object represents a game. Use BotFather to create and edit games, their short names will act as
* unique identifiers.
*
* @typedef {object} Game
* @property {string} title Title of the game
* @property {string} description Description of the game
* @property {PhotoSize[]} photo Photo that will be displayed in the game message in chats.
* @property {string} [text] *Optional*. 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](https://core.telegram.org/bots/api/#setgamescore), or manually
* edited using
* [editMessageText](https://core.telegram.org/bots/api/#editmessagetext). 0-4096
* characters.
* @property {MessageEntity[]} [text_entities] *Optional*. Special entities that appear in *text*, such as usernames,
* URLs, bot commands, etc.
* @property {Animation} [animation] *Optional*. Animation that will be displayed in the game message in chats.
* Upload via [BotFather](https://t.me/botfather)
* @see https://core.telegram.org/bots/api/#game
*/
/**
* A placeholder, currently holds no information. Use [BotFather](https://t.me/botfather)
* to set up
* your game.
*
* @typedef {*} CallbackGame
* @see https://core.telegram.org/bots/api/#callbackgame
*/
/**
* This object represents one row of the high scores table for a game.
*
* @typedef {object} GameHighScore
* @property {number} position Position in high score table for the game
* @property {User} user User
* @property {number} score Score
* @see https://core.telegram.org/bots/api/#gamehighscore
*/
/**
* This object represents a button to be shown above inline query results. You **must** use exactly one
* of the optional fields.
*
* @typedef {object} InlineQueryResultsButton
* @property {string} text Label text on the button
* @property {WebAppInfo} [web_app] *Optional*. Description of the [Web App](https://core.telegram.org/bots/webapps)
* that will be launched when the user presses the button. The Web App will be able
* to switch back to the inline mode using the method
* [switchInlineQuery](https://core.telegram.org/bots/webapps#initializing-mini-apps)
* inside the Web App.
* @property {string} [start_parameter] *Optional*. [Deep-linking](https://core.telegram.org/bots/features#deep-linking)
* parameter for the /start message sent to the bot when a user presses the button.
* 1-64 characters, only `A-Z`, `a-z`, `0-9`, `_` and `-` are allowed.
*
* *Example:* An inline bot that sends YouTube videos can ask the user to connect
* the bot to their YouTube account to adapt search results accordingly. To do
* this, it displays a 'Connect your YouTube account' button above the results, or
* even before showing any. The user presses the button, switches to a private chat
* with the bot and, in doing so, passes a start parameter that instructs the bot
* to return an OAuth link. Once done, the bot can offer a
* [*switch\_inline*](https://core.telegram.org/bots/api/#inlinekeyboardmarkup)
* button so that the user can easily return to the chat where they wanted to use
* the bot's inline capabilities.
* @see https://core.telegram.org/bots/api/#inlinequeryresultsbutton
*/
/**
* This object represents an inline button that switches the current user to inline mode in a chosen
* chat, with an optional default inline query.
*
* @typedef {object} SwitchInlineQueryChosenChat
* @property {string} [query] *Optional*. The default inline query to be inserted in the input field. If left
* empty, only the bot's username will be inserted
* @property {boolean} [allow_user_chats] *Optional*. True, if private chats with users can be chosen
* @property {boolean} [allow_bot_chats] *Optional*. True, if private chats with bots can be chosen
* @property {boolean} [allow_group_chats] *Optional*. True, if group and supergroup chats can be chosen
* @property {boolean} [allow_channel_chats] *Optional*. True, if channel chats can be chosen
* @see https://core.telegram.org/bots/api/#switchinlinequerychosenchat
*/
/**
* This object represents the bot's name.
*
* @typedef {object} BotName
* @property {string} name The bot's name
* @see https://core.telegram.org/bots/api/#botname
*/
/* other */
/**
* @typedef {
* 'mention'|'hashtag'|'cashtag'|'bot_command'|'url'|'email'|'phone_number'|'bold'|'italic'|'underline'|
* 'strikethrough'|'spoiler'|'code'|'pre'|'text_link'|'text_mention'|'custom_emoji'
* } MessageEntityType
*/
/**
* @typedef {
* 'private'|'group'|'supergroup'|'channel'
* } ChatType
*/
/**
* @typedef {
* 'creator'|'administrator'|'member'|'restricted'|'left'|'kicked'
* } ChatMemberStatus
*/
/**
* @typedef {object} TelegramOptions
* @property {string} [username] Bot username, used if you don't call `bot.launch()`
* @property {http.Agent} [attachmentAgent] HTTP Agent used for attachments
* @property {http.Agent} [agent] HTTP agent used for API calls. By default, it have this configuration:
* `new https.Agent({ keepAlive: true, keepAliveMsecs: 10000 })`
* @property {string} [apiRoot] API root URL
* @property {boolean} [channelMode=false] If `true`, channel posts can be matched as `text` update type
* @property {string} [apiPrefix=bot] API prefix before bot token, by default `bot`, but if you use
* [TDLight](https://github.com/tdlight-team/tdlight) you maybe should change `apiPrefix` to `user`
* @property {boolean} [testEnv=false] Enable / disable test environment for WebApps,
* see more [here](https://core.telegram.org/bots/webapps#testing-web-apps)
* @property {boolean} [webhookReply=true] Enable / disable webhook reply
*/
/**
* @typedef {object} InvoiceParams
* @see https://core.telegram.org/bots/api#sendinvoice
* @property {number} [message_thread_id] *Optional*. Unique identifier for the target message thread (topic)
* of the forum; for forum supergroups only
* @property {string} title Product name, 1-32 characters
* @property {string} description Product description, 1-255 characters
* @property {string} payload Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user,
* use for your internal processes.
* @property {string} provider_token Payment provider token, obtained via [@BotFather](https://t.me/botfather)
* @property {string} currency Three-letter ISO 4217 currency code, see
* [more on currencies](https://core.telegram.org/bots/payments#supported-currencies)
* @property {LabeledPrice[]} prices Price breakdown, a JSON-serialized list of components (e.g. product price, tax,
* discount, delivery cost, delivery tax, bonus, etc.)
*/
/** @typedef {'Markdown'|'MarkdownV2'|'HTML'} ParseMode */
/**
* @typedef {
* 'typing'|'upload_photo'|'record_video'|'upload_video'|'record_voice'|'upload_voice'|'upload_document'|
* 'choose_sticker'|'find_location'|'record_video_note'|'upload_video_note'
* } Action
*/
/**
* @typedef {string} FileId
*/
/**
* @typedef {object} WebhookResponse
* @property {true} webhook Always `true`
* @property {'https://core.telegram.org/bots/api#making-requests-when-getting-updates'} details Link to telegram docs
*/