U
    dd5r                    @   s~  d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@mAZA ddlBmCZC ddlDmEZE ddlFmGZG dd lHmIZImJZJ dd!lKmLZLmMZM dd"lNmOZOmPZPmQZQmRZRmSZS dd#lTmUZU dd$lVmWZWmXZXmYZYmZZZ dd%l[m\Z\ dd&l]m^Z^ dd'l_m`Z`maZa dd(lbmcZc dd)ldmeZe erjdd*lfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZo G d+d, d,eCZpdS )-zBThis module contains an object that represents a Telegram Message.    N)escape)TYPE_CHECKINGDictListOptionalSequenceTupleUnion)Chat)Dice)	Animation)Audio)Contact)Document)Location)	PhotoSize)Sticker)Venue)Video)	VideoNote)Voice)ForumTopicClosedForumTopicCreatedForumTopicEditedForumTopicReopenedGeneralForumTopicHiddenGeneralForumTopicUnhidden)Game)InlineKeyboardMarkup)MessageAutoDeleteTimerChanged)MessageEntity)PassportData)Invoice)SuccessfulPayment)Poll)ProximityAlertTriggered)
ChatShared
UserShared)TelegramObject)User)parse_sequence_arg)extract_tzinfo_from_defaultsfrom_timestamp)DEFAULT_NONEDefaultValue)DVInput	FileInputJSONDictODVInputReplyMarkup)warn)VideoChatEndedVideoChatParticipantsInvitedVideoChatScheduledVideoChatStarted)
WebAppData)WriteAccessAllowed)MessageAttachmentType	ParseMode)escape_markdown)PTBDeprecationWarning)	BotGameHighScore
InputMediaInputMediaAudioInputMediaDocumentInputMediaPhotoInputMediaVideoLabeledPrice	MessageIdc                K       sF  e Zd ZdZdZdddeejeeeeeejd eje	e
d e
d eeee
e eeeee
e e	eeeee	e
e eeeeeed eee	e	e	e	eeee	eeeeeee e!e"e#eee$eee%e&e'e(e)e*e+ee,e-e.dH fddZ/e0ed	d
dZ1e0ed	ddZ2e0e3e	 d	ddZ4e5e3e. de3d  d fddZ6e0e7eeeeeeeeee
e eeeeeeedf d	ddZ8e3e e3e e3e dddZ9e:e:e:dde:de:df	de:e:e:e:dde	e;e	 e;e e<e ee=e;e e
d e;e eee;e> e;e> e;e> e;e> e.d dddZ?e:e:dde:de:dfde:e:e:e:dde	e;e e<e ee=e;e e
d e;e eee;e> e;e> e;e> e;e> e.d dddZ@e:e:dde:de:dfde:e:e:e:dde	e;e e<e ee=e;e e
d e;e eee;e> e;e> e;e> e;e> e.d dd d!ZAe:e:dde:de:dfde:e:e:e:dde	e;e e<e ee=e;e e
d e;e eee;e> e;e> e;e> e;e> e.d dd"d#ZBe:de:e:dfde:d$e:e:dde:dd%	e
e7d&  e;e ee;e e;e eee;e> e;e> e;e> e;e> e.e3e	 e;e	 e
d eCd' d(d)d*ZDde:dde:e:de:ddf
dde:d$e:e:dd+e7eEd,f e	e<e ee=e;e	 e;e e
d e;e eee	ee;e> e;e> e;e> e;e> e.d d-d.d/ZFdddde:dde:de:de:ddfdde:d$e:e:dd+e7eEd0f ee	e	e	e<e ee=e;e	 eEe;e e
d e;e eeEe	ee;e> e;e> e;e> e;e> e.d d1d2d3ZGde:dde:dde:de:ddfdde:d$e:e:dd+e7eEd4f e	e<e ee=e;e	 eEee;e e
d e;e eeEe	ee;e> e;e> e;e> e;e> e.d d5d6d7ZHddddde:e:dde:de:dddfdde:d$e:e:dd+e7eEd8f eeeeEe	e;e	 e<e ee=e;e e
d e;e eeeEe	ee;e> e;e> e;e> e;e> e.d d9d:d;ZIe:dde:e:ddfde:d$e:e:dde7eEd<f e<e ee=e;e e;e ee	ee;e> e;e> e;e> e;e> e.d d=d>d?ZJdde:dddde:dde:de:dddfdde:d$e:e:dd+e7eEd@f ee	e<e ee=eee;e	 eeEe;e e
d e;e eeeEe	ee;e> e;e> e;e> e;e> e.d dAdBdCZKdde:ddde:e:ddf
dde:d$e:e:dd+e7eEdDf eee<e ee=eEe;e e;e eeEe	ee;e> e;e> e;e> e;e> e.d dEdFdGZLdde:dde:e:de:df
dde:d$e:e:dd+e7eEdHf ee	e<e ee=e;e	 e;e e
d e;e ee	ee;e> e;e> e;e> e;e> e.d dIdJdKZMdde:dddddde:e:dfdde:e:e:e:ddLe>e>e<e ee=ee>eee;e e;e eeee;e> e;e> e;e> e;e> e.d dMdNdOZNddddde:ddddde:e:dfdde:e:e:e:ddPe>e>e	e	e	e<e ee=e	e	e	e;e e;e eeee;e> e;e> e;e> e;e> e.d dQdRdSZOddde:ddde:e:df
dde:e:e:e:ddTe	e	e	e<e ee=e	e;e e;e eeee;e> e;e> e;e> e;e> e.d dUdVdWZPddddde:ddde:dde:de:dfde:e:e:e:dde	e
e	 ee	eeee;e ee=e	e;e	 ee7eejf e;e e
d e;e eee;e> e;e> e;e> e;e> e.d dXdYdZZQe:ddde:e:dfde:e:e:e:dde;e ee=e	e;e e;e eee;e> e;e> e;e> e;e> e.d d[d\d]ZRde:e:e:e:dd^e	ee;e> e;e> e;e> e;e> e.ed_d`daZSe:dde:e:dfde:e:e:e:dde	e<e edbe;e e;e eee;e> e;e> e;e> e;e> e.d dcdddeZTdddddddddde:ddddde:dde:dfde:e:e:e:dde	e	e	e	e	e
df e	e	eeeeeeeee<e edbe7e	eUf eee;e ee
e e;e eee;e> e;e> e;e> e;e> e.d dg"dhdiZVe:e:dfe:e:e:e:dd^e7ee	f e<e e;e ee;e> e;e> e;e> e;e> e.d dj
dkdlZWde:de:de:de:df	e:e:e:e:dd^e7ee	f e	e;e	 e
d e<e ee<e e=e;e ee;e> e;e> e;e> e;e> e.dmdndodpZXde:de:de:de:df	de:e:e:e:dde7e	ef ee	e;e	 e
d e<e ee<e e=e;e eee;e> e;e> e;e> e;e> e.dmdqdrdsZYe:e:ddfe:e:e:e:dd^e	e;e	 e;e ee
d e;e> e;e> e;e> e;e> e.e7d ef dtdudvZZdde:dfe:e:e:e:dd^e	ee;e	 e
d e;e> e;e> e;e> e;e> e.e7d ef dw
dxdyZ[de:e:e:e:dd^dzee;e> e;e> e;e> e;e> e.e7d ef d{d|d}Z\de:e:e:e:dd^e3db e;e> e;e> e;e> e;e> e.e7d ef d~ddZ]dde:e:e:e:dde>e>ee>eeee;e> e;e> e;e> e;e> e.e7d ef dddZ^de:e:e:e:dd^ee;e> e;e> e;e> e;e> e.e7d ef d~ddZ_de:e:e:e:dd^e7ee	f eeee;e> e;e> e;e> e;e> e.e7d ef d
ddZ`e:e:e:e:dd^e7ee	f e;e> e;e> e;e> e;e> e.eCd dddZae:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZbde:e:e:e:dd^ee;e> e;e> e;e> e;e> e.ed~ddZce:fe:e:e:e:dd^e;e e;e> e;e> e;e> e;e> e.edddZde:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZede:e:e:e:dd^e	e	e;e> e;e> e;e> e;e> e.edddZfe:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZge:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZhe:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZie:e:e:e:dd^e;e> e;e> e;e> e;e> e.edddZjeke	dddZleke	dddZmdene	 eoeke	f dddZpdene	 eoeke	f dddZqerde3e	 eoeke	f eee3e	 dddZse0e	d	ddZte0e	d	ddZue0e	d	ddZve0e	d	ddZwerde3e	 eoeke	f eeee3e	 dddZxe0e	d	ddZye0e	d	ddZze0e	d	ddÄZ{e0e	d	ddńZ|e0e	d	ddǄZ}e0e	d	ddɄZ~e0e	d	dd˄Ze0e	d	dd̈́Z  ZS )Messageaq  This object represents a message.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`message_id` and :attr:`chat` are equal.

    Note:
        In Python :keyword:`from` is a reserved word. Use :paramref:`from_user` instead.

    .. versionchanged:: 20.0

        * The arguments and attributes ``voice_chat_scheduled``, ``voice_chat_started`` and
          ``voice_chat_ended``, ``voice_chat_participants_invited`` were renamed to
          :paramref:`video_chat_scheduled`/:attr:`video_chat_scheduled`,
          :paramref:`video_chat_started`/:attr:`video_chat_started`,
          :paramref:`video_chat_ended`/:attr:`video_chat_ended` and
          :paramref:`video_chat_participants_invited`/:attr:`video_chat_participants_invited`,
          respectively, in accordance to Bot API 6.0.
        * The following are now keyword-only arguments in Bot methods:
          ``{read, write, connect, pool}_timeout``, ``api_kwargs``, ``contact``, ``quote``,
          ``filename``, ``loaction``, ``venue``. Use a named argument for those,
          and notice that some positional arguments changed position as a result.

    Args:
        message_id (:obj:`int`): Unique message identifier inside this chat.
        from_user (:class:`telegram.User`, optional): Sender of the message; empty for messages
            sent to channels. For backward compatibility, this will contain a fake sender user in
            non-channel chats, if the message was sent on behalf of a chat.
        sender_chat (:class:`telegram.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,
            :attr:`from_user` contains a fake sender user in non-channel chats, if the message was
            sent on behalf of a chat.
        date (:class:`datetime.datetime`): Date the message was sent in Unix time. Converted to
            :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        chat (:class:`telegram.Chat`): Conversation the message belongs to.
        forward_from (:class:`telegram.User`, optional): For forwarded messages, sender of
            the original message.
        forward_from_chat (:class:`telegram.Chat`, optional): For messages forwarded from channels
            or from anonymous administrators, information about the original sender chat.
        forward_from_message_id (:obj:`int`, optional): For forwarded channel posts, identifier of
            the original message in the channel.
        forward_sender_name (:obj:`str`, optional): Sender's name for messages forwarded from
            users who disallow adding a link to their account in forwarded messages.
        forward_date (:class:`datetime.datetime`, optional): For forwarded messages, date the
            original message was sent in Unix time. Converted to :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        is_automatic_forward (:obj:`bool`, optional): :obj:`True`, if the message is a channel
            post that was automatically forwarded to the connected discussion group.

            .. versionadded:: 13.9
        reply_to_message (:class:`telegram.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.
        edit_date (:class:`datetime.datetime`, optional): Date the message was last edited in Unix
            time. Converted to :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        has_protected_content (:obj:`bool`, optional): :obj:`True`, if the message can't be
            forwarded.

            .. versionadded:: 13.9
        media_group_id (:obj:`str`, optional): The unique identifier of a media message group this
            message belongs to.
        text (:obj:`str`, optional): For text messages, the actual UTF-8 text of the message,
            0-:tg-const:`telegram.constants.MessageLimit.MAX_TEXT_LENGTH` characters.
        entities (Sequence[:class:`telegram.MessageEntity`], optional): For text messages, special
            entities like usernames, URLs, bot commands, etc. that appear in the text. See
            :attr:`parse_entity` and :attr:`parse_entities` methods for how to use properly.
            This list is empty if the message does not contain entities.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        caption_entities (Sequence[:class:`telegram.MessageEntity`], optional): For messages with a
            Caption. Special entities like usernames, URLs, bot commands, etc. that appear in the
            caption. See :attr:`Message.parse_caption_entity` and :attr:`parse_caption_entities`
            methods for how to use properly. This list is empty if the message does not contain
            caption entities.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        audio (:class:`telegram.Audio`, optional): Message is an audio file, information
            about the file.
        document (:class:`telegram.Document`, optional): Message is a general file, information
            about the file.
        animation (:class:`telegram.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.
        game (:class:`telegram.Game`, optional): Message is a game, information about the game.
        photo (Sequence[:class:`telegram.PhotoSize`], optional): Message is a photo, available
            sizes of the photo. This list is empty if the message does not contain a photo.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        sticker (:class:`telegram.Sticker`, optional): Message is a sticker, information
            about the sticker.
        video (:class:`telegram.Video`, optional): Message is a video, information about the
            video.
        voice (:class:`telegram.Voice`, optional): Message is a voice message, information about
            the file.
        video_note (:class:`telegram.VideoNote`, optional): Message is a video note, information
            about the video message.
        new_chat_members (Sequence[:class:`telegram.User`], optional): New members that were added
            to the group or supergroup and information about them (the bot itself may be one of
            these members). This list is empty if the message does not contain new chat members.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        caption (:obj:`str`, optional): Caption for the animation, audio, document, photo, video
            or voice, 0-:tg-const:`telegram.constants.MessageLimit.CAPTION_LENGTH` characters.
        contact (:class:`telegram.Contact`, optional): Message is a shared contact, information
            about the contact.
        location (:class:`telegram.Location`, optional): Message is a shared location, information
            about the location.
        venue (:class:`telegram.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.
        left_chat_member (:class:`telegram.User`, optional): A member was removed from the group,
            information about them (this member may be the bot itself).
        new_chat_title (:obj:`str`, optional): A chat title was changed to this value.
        new_chat_photo (Sequence[:class:`telegram.PhotoSize`], optional): A chat photo was changed
            to this value. This list is empty if the message does not contain a new chat photo.

            .. versionchanged:: 20.0
                |sequenceclassargs|

        delete_chat_photo (:obj:`bool`, optional): Service message: The chat photo was deleted.
        group_chat_created (:obj:`bool`, optional): Service message: The group has been created.
        supergroup_chat_created (:obj:`bool`, 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
            :attr:`reply_to_message` if someone replies to a very first message in a directly
            created supergroup.
        channel_chat_created (:obj:`bool`, 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
            :attr:`reply_to_message` if someone replies to a very first message in a channel.
        message_auto_delete_timer_changed (:class:`telegram.MessageAutoDeleteTimerChanged`,             optional): Service message: auto-delete timer settings changed in the chat.

            .. versionadded:: 13.4
        migrate_to_chat_id (:obj:`int`, optional): The group has been migrated to a supergroup
            with the specified identifier.
        migrate_from_chat_id (:obj:`int`, optional): The supergroup has been migrated from a group
            with the specified identifier.
        pinned_message (:class:`telegram.Message`, optional): Specified message was pinned. Note
            that the Message object in this field will not contain further
            :attr:`reply_to_message` fields even if it is itself a reply.
        invoice (:class:`telegram.Invoice`, optional): Message is an invoice for a payment,
            information about the invoice.
        successful_payment (:class:`telegram.SuccessfulPayment`, optional): Message is a service
            message about a successful payment, information about the payment.
        connected_website (:obj:`str`, optional): The domain name of the website on which the user
            has logged in.
        forward_signature (:obj:`str`, optional): For messages forwarded from channels, signature
            of the post author if present.
        author_signature (:obj:`str`, optional): Signature of the post author for messages in
            channels, or the custom title of an anonymous group administrator.
        passport_data (:class:`telegram.PassportData`, optional): Telegram Passport data.
        poll (:class:`telegram.Poll`, optional): Message is a native poll,
            information about the poll.
        dice (:class:`telegram.Dice`, optional): Message is a dice with random value.
        via_bot (:class:`telegram.User`, optional): Bot through which message was sent.
        proximity_alert_triggered (:class:`telegram.ProximityAlertTriggered`, optional): Service
            message. A user in the chat triggered another user's proximity alert while sharing
            Live Location.
        video_chat_scheduled (:class:`telegram.VideoChatScheduled`, optional): Service message:
            video chat scheduled.

            .. versionadded:: 20.0
        video_chat_started (:class:`telegram.VideoChatStarted`, optional): Service message: video
            chat started.

            .. versionadded:: 20.0
        video_chat_ended (:class:`telegram.VideoChatEnded`, optional): Service message: video chat
            ended.

            .. versionadded:: 20.0
        video_chat_participants_invited (:class:`telegram.VideoChatParticipantsInvited` optional):
            Service message: new participants invited to a video chat.

            .. versionadded:: 20.0
        web_app_data (:class:`telegram.WebAppData`, optional): Service message: data sent by a Web
            App.

            .. versionadded:: 20.0
        reply_markup (:class:`telegram.InlineKeyboardMarkup`, optional): Inline keyboard attached
            to the message. :paramref:`~telegram.InlineKeyboardButton.login_url` buttons are
            represented as ordinary url buttons.
        is_topic_message (:obj:`bool`, optional): :obj:`True`, if the message is sent to a forum
            topic.

            .. versionadded:: 20.0
        message_thread_id (:obj:`int`, optional): Unique identifier of a message thread to which
            the message belongs; for supergroups only.

            .. versionadded:: 20.0
        forum_topic_created (:class:`telegram.ForumTopicCreated`, optional): Service message:
            forum topic created.

            .. versionadded:: 20.0
        forum_topic_closed (:class:`telegram.ForumTopicClosed`, optional): Service message:
            forum topic closed.

            .. versionadded:: 20.0
        forum_topic_reopened (:class:`telegram.ForumTopicReopened`, optional): Service message:
            forum topic reopened.

            .. versionadded:: 20.0
        forum_topic_edited (:class:`telegram.ForumTopicEdited`, optional): Service message:
            forum topic edited.

            .. versionadded:: 20.0
        general_forum_topic_hidden (:class:`telegram.GeneralForumTopicHidden`, optional):
            Service message: General forum topic hidden.

            .. versionadded:: 20.0
        general_forum_topic_unhidden (:class:`telegram.GeneralForumTopicUnhidden`, optional):
            Service message: General forum topic unhidden.

            .. versionadded:: 20.0
        write_access_allowed (:class:`telegram.WriteAccessAllowed`, optional): Service message:
            the user allowed the bot added to the attachment menu to write messages.

            .. versionadded:: 20.0
        has_media_spoiler (:obj:`bool`, optional): :obj:`True`, if the message media is covered
            by a spoiler animation.

            .. versionadded:: 20.0
        user_shared (:class:`telegram.UserShared`, optional): Service message: a user was shared
            with the bot.

            .. versionadded:: 20.1
        chat_shared (:class:`telegram.ChatShared`, optional):Service message: a chat was shared
            with the bot.

            .. versionadded:: 20.1

    Attributes:
        message_id (:obj:`int`): Unique message identifier inside this chat.
        from_user (:class:`telegram.User`): Optional. Sender of the message; empty for messages
            sent to channels. For backward compatibility, this will contain a fake sender user in
            non-channel chats, if the message was sent on behalf of a chat.
        sender_chat (:class:`telegram.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,
            :attr:`from_user` contains a fake sender user in non-channel chats, if the message was
            sent on behalf of a chat.
        date (:class:`datetime.datetime`): Date the message was sent in Unix time. Converted to
            :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        chat (:class:`telegram.Chat`): Conversation the message belongs to.
        forward_from (:class:`telegram.User`): Optional. For forwarded messages, sender of the
            original message.
        forward_from_chat (:class:`telegram.Chat`): Optional. For messages forwarded from channels
            or from anonymous administrators, information about the original sender chat.
        forward_from_message_id (:obj:`int`): Optional. For forwarded channel posts, identifier of
            the original message in the channel.
        forward_date (:class:`datetime.datetime`): Optional. For forwarded messages, date the
            original message was sent in Unix time. Converted to :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        is_automatic_forward (:obj:`bool`): Optional. :obj:`True`, if the message is a channel
            post that was automatically forwarded to the connected discussion group.

            .. versionadded:: 13.9
        reply_to_message (:class:`telegram.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.
        edit_date (:class:`datetime.datetime`): Optional. Date the message was last edited in Unix
            time. Converted to :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        has_protected_content (:obj:`bool`): Optional. :obj:`True`, if the message can't be
            forwarded.

            .. versionadded:: 13.9
        media_group_id (:obj:`str`): Optional. The unique identifier of a media message group this
            message belongs to.
        text (:obj:`str`): Optional. For text messages, the actual UTF-8 text of the message,
            0-:tg-const:`telegram.constants.MessageLimit.MAX_TEXT_LENGTH` characters.
        entities (Tuple[:class:`telegram.MessageEntity`]): Optional. For text messages, special
            entities like usernames, URLs, bot commands, etc. that appear in the text. See
            :attr:`parse_entity` and :attr:`parse_entities` methods for how to use properly.
            This list is empty if the message does not contain entities.

            .. versionchanged:: 20.0
                |tupleclassattrs|

        caption_entities (Tuple[:class:`telegram.MessageEntity`]): Optional. For messages with a
            Caption. Special entities like usernames, URLs, bot commands, etc. that appear in the
            caption. See :attr:`Message.parse_caption_entity` and :attr:`parse_caption_entities`
            methods for how to use properly. This list is empty if the message does not contain
            caption entities.

            .. versionchanged:: 20.0
                |tupleclassattrs|

        audio (:class:`telegram.Audio`): Optional. Message is an audio file, information
            about the file.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        document (:class:`telegram.Document`): Optional. Message is a general file, information
            about the file.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        animation (:class:`telegram.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.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        game (:class:`telegram.Game`): Optional. Message is a game, information about the game.
        photo (Tuple[:class:`telegram.PhotoSize`]): Optional. Message is a photo, available
            sizes of the photo. This list is empty if the message does not contain a photo.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`

            .. versionchanged:: 20.0
                |tupleclassattrs|

        sticker (:class:`telegram.Sticker`): Optional. Message is a sticker, information
            about the sticker.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        video (:class:`telegram.Video`): Optional. Message is a video, information about the
            video.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        voice (:class:`telegram.Voice`): Optional. Message is a voice message, information about
            the file.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        video_note (:class:`telegram.VideoNote`): Optional. Message is a video note, information
            about the video message.

            .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`
        new_chat_members (Tuple[:class:`telegram.User`]): Optional. New members that were added
            to the group or supergroup and information about them (the bot itself may be one of
            these members). This list is empty if the message does not contain new chat members.

            .. versionchanged:: 20.0
                |tupleclassattrs|
        caption (:obj:`str`): Optional. Caption for the animation, audio, document, photo, video
            or voice, 0-:tg-const:`telegram.constants.MessageLimit.CAPTION_LENGTH` characters.
        contact (:class:`telegram.Contact`): Optional. Message is a shared contact, information
            about the contact.
        location (:class:`telegram.Location`): Optional. Message is a shared location, information
            about the location.
        venue (:class:`telegram.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.
        left_chat_member (:class:`telegram.User`): Optional. A member was removed from the group,
            information about them (this member may be the bot itself).
        new_chat_title (:obj:`str`): Optional. A chat title was changed to this value.
        new_chat_photo (Tuple[:class:`telegram.PhotoSize`]): A chat photo was changed to
            this value. This list is empty if the message does not contain a new chat photo.

            .. versionchanged:: 20.0
                |tupleclassattrs|

        delete_chat_photo (:obj:`bool`): Optional. Service message: The chat photo was deleted.
        group_chat_created (:obj:`bool`): Optional. Service message: The group has been created.
        supergroup_chat_created (:obj:`bool`): 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
            :attr:`reply_to_message` if someone replies to a very first message in a directly
            created supergroup.
        channel_chat_created (:obj:`bool`): 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
            :attr:`reply_to_message` if someone replies to a very first message in a channel.
        message_auto_delete_timer_changed (:class:`telegram.MessageAutoDeleteTimerChanged`):
            Optional. Service message: auto-delete timer settings changed in the chat.

            .. versionadded:: 13.4
        migrate_to_chat_id (:obj:`int`): Optional. The group has been migrated to a supergroup
            with the specified identifier.
        migrate_from_chat_id (:obj:`int`): Optional. The supergroup has been migrated from a group
            with the specified identifier.
        pinned_message (:class:`telegram.Message`): Optional. Specified message was pinned. Note
            that the Message object in this field will not contain further
            :attr:`reply_to_message` fields even if it is itself a reply.
        invoice (:class:`telegram.Invoice`): Optional. Message is an invoice for a payment,
            information about the invoice.
        successful_payment (:class:`telegram.SuccessfulPayment`): Optional. Message is a service
            message about a successful payment, information about the payment.
        connected_website (:obj:`str`): Optional. The domain name of the website on which the user
            has logged in.
        forward_signature (:obj:`str`): Optional. For messages forwarded from channels, signature
            of the post author if present.
        author_signature (:obj:`str`): Optional. Signature of the post author for messages in
            channels, or the custom title of an anonymous group administrator.
        forward_sender_name (:obj:`str`): Optional. Sender's name for messages forwarded from
            users who disallow adding a link to their account in forwarded messages.
        passport_data (:class:`telegram.PassportData`): Optional. Telegram Passport data.

            Examples:
                :any:`Passport Bot <examples.passportbot>`
        poll (:class:`telegram.Poll`): Optional. Message is a native poll,
            information about the poll.
        dice (:class:`telegram.Dice`): Optional. Message is a dice with random value.
        via_bot (:class:`telegram.User`): Optional. Bot through which message was sent.
        proximity_alert_triggered (:class:`telegram.ProximityAlertTriggered`): Optional. Service
            message. A user in the chat triggered another user's proximity alert while sharing
            Live Location.
        video_chat_scheduled (:class:`telegram.VideoChatScheduled`): Optional. Service message:
            video chat scheduled.

            .. versionadded:: 20.0
        video_chat_started (:class:`telegram.VideoChatStarted`): Optional. Service message: video
            chat started.

            .. versionadded:: 20.0
        video_chat_ended (:class:`telegram.VideoChatEnded`): Optional. Service message: video chat
            ended.

            .. versionadded:: 20.0
        video_chat_participants_invited (:class:`telegram.VideoChatParticipantsInvited`): Optional.
            Service message: new participants invited to a video chat.

            .. versionadded:: 20.0
        web_app_data (:class:`telegram.WebAppData`): Optional. Service message: data sent by a Web
            App.

            .. versionadded:: 20.0
        reply_markup (:class:`telegram.InlineKeyboardMarkup`): Optional. Inline keyboard attached
            to the message. :paramref:`~telegram.InlineKeyboardButton.login_url` buttons are
            represented as ordinary url buttons.
        is_topic_message (:obj:`bool`): Optional. :obj:`True`, if the message is sent to a forum
            topic.

            .. versionadded:: 20.0
        message_thread_id (:obj:`int`): Optional. Unique identifier of a message thread to which
            the message belongs; for supergroups only.

            .. versionadded:: 20.0
        forum_topic_created (:class:`telegram.ForumTopicCreated`): Optional. Service message:
            forum topic created.

            .. versionadded:: 20.0
        forum_topic_closed (:class:`telegram.ForumTopicClosed`): Optional. Service message:
            forum topic closed.

            .. versionadded:: 20.0
        forum_topic_reopened (:class:`telegram.ForumTopicReopened`): Optional. Service message:
            forum topic reopened.

            .. versionadded:: 20.0
        forum_topic_edited (:class:`telegram.ForumTopicEdited`): Optional. Service message:
            forum topic edited.

            .. versionadded:: 20.0
        general_forum_topic_hidden (:class:`telegram.GeneralForumTopicHidden`): Optional.
            Service message: General forum topic hidden.

            .. versionadded:: 20.0
        general_forum_topic_unhidden (:class:`telegram.GeneralForumTopicUnhidden`): Optional.
            Service message: General forum topic unhidden.

            .. versionadded:: 20.0
        write_access_allowed (:class:`telegram.WriteAccessAllowed`): Optional. Service message:
            the user allowed the bot added to the attachment menu to write messages.

            .. versionadded:: 20.0
        has_media_spoiler (:obj:`bool`): Optional. :obj:`True`, if the message media is covered
            by a spoiler animation.

            .. versionadded:: 20.0
        user_shared (:class:`telegram.UserShared`): Optional. Service message: a user was shared
            with the bot.

            .. versionadded:: 20.1
        chat_shared (:class:`telegram.ChatShared`): Optional. Service message: a chat was shared
            with the bot.

            .. versionadded:: 20.1

    .. |custom_emoji_formatting_note| replace:: Custom emoji entities will be ignored by this
        function. Instead, the supplied replacement for the emoji will be used.

    .. |custom_emoji_md1_deprecation| replace:: Since custom emoji entities are not supported by
       :attr:`~telegram.constants.ParseMode.MARKDOWN`, this method will raise a
       :exc:`ValueError` in future versions instead of falling back to the supplied replacement
       for the emoji.
    )Hreply_markupaudiocontactmigrate_to_chat_idforward_signaturechatsuccessful_paymentgametextforward_sender_namedocumentnew_chat_titleforward_dategroup_chat_createdmedia_group_idcaptionvideoentitiesvia_botnew_chat_membersconnected_website	animationmigrate_from_chat_idforward_fromstickerlocationvenue	edit_datereply_to_messagepassport_datapinned_messageforward_from_chatnew_chat_photo
message_iddelete_chat_photo	from_userauthor_signatureproximity_alert_triggeredsender_chatdiceforward_from_message_idcaption_entitiesvoicedatesupergroup_chat_createdpollleft_chat_memberphotochannel_chat_createdinvoice
video_note_effective_attachment!message_auto_delete_timer_changedvideo_chat_endedvideo_chat_participants_invitedvideo_chat_startedvideo_chat_scheduledis_automatic_forwardhas_protected_contentweb_app_datais_topic_messagemessage_thread_idforum_topic_createdforum_topic_closedforum_topic_reopenedforum_topic_editedgeneral_forum_topic_hiddengeneral_forum_topic_unhiddenwrite_access_allowedhas_media_spoileruser_sharedchat_sharedN
api_kwargsr    )Hrj   rt   rN   rl   r`   rh   rq   rU   re   rd   rQ   rZ   rr   rJ   rS   rP   rx   ra   rY   rs   r{   r\   rX   rK   rb   rc   rw   rT   ri   rk   rV   ru   ry   rL   r_   rg   rz   rO   rM   rm   rW   r]   r^   rf   rv   rR   rI   rp   r[   rn   ro   r   r~   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   cH          I         s  t  j|Hd || _|| _|3| _|| _|| _|| _|| _|| _	|9| _
|	| _|
| _|:| _|| _t|| _t|| _|| _|| _|| _t|| _|| _|| _|| _|| _|| _|| _|| _|| _t|| _|| _|| _ t|| _!t"|| _#t"|| _$t"| | _%|"| _&|#| _'t"|!| _(|7| _)|$| _*|| _+|%| _,|&| _-|*| _.|'| _/|.| _0|(| _1|)| _2|+| _3|,| _4|-| _5|0| _6|1| _7|2| _8|8| _9|4| _:|5| _;|6| _<|/| _=|;| _>|<| _?|=| _@|>| _A|?| _B|@| _C|A| _D|B| _E|C| _F|D| _G|E| _H|F| _I|G| _JtK| _L| j| jf| _M| N  d S )Nr   )Osuper__init__rj   rl   ro   rt   rN   r`   rh   rU   r   re   rd   r   rQ   r*   rZ   rr   rJ   rP   rS   rx   ra   rY   rs   r{   rX   rK   rb   rc   r\   rw   rT   ri   boolrk   rV   ru   rL   r_   ry   r}   rg   rq   rz   rO   r]   rM   rR   rm   rW   r^   rf   rv   rp   r[   rn   r   r   r~   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r|   Z	_id_attrsZ_freeze)Iselfrj   rt   rN   rl   r`   rh   rq   rU   re   rd   rQ   rZ   rr   rJ   rS   rP   rx   ra   rY   rs   r{   r\   rX   rK   rb   rc   rw   rT   ri   rk   rV   ru   ry   rL   r_   rg   rz   rO   rM   rm   rW   r]   r^   rf   rv   rR   rI   rp   r[   rn   ro   r   r~   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	__class__ 5/tmp/pip-unpacked-wheel-e3anp165/telegram/_message.pyr     s    L








zMessage.__init__)returnc                 C   s   | j jS )zC:obj:`int`: Shortcut for :attr:`telegram.Chat.id` for :attr:`chat`.)rN   idr   r   r   r   chat_idD  s    zMessage.chat_idc                 C   s   | j S )zb
        :obj:`int`: Shortcut for :attr:`message_id`.

            .. versionadded:: 20.0
        )rj   r   r   r   r   r   I  s    z
Message.idc                 C   sz   | j jtjtjfkrv| j jr$| j jndt| j jdd  }d| d| j }| j	r\| j
sb| jrr| d| j
 }|S dS )aL  :obj:`str`: Convenience property. If the chat of the message is not
        a private chat or normal group, returns a t.me link of the message.

            .. versionchanged:: 20.3
                For messages that are replies or part of a forum topic, the link now points
                to the corresponding thread view.
        zc/   Nzhttps://t.me//z?thread=)rN   typer
   PRIVATEZGROUPusernamestrr   rj   r   r   re   )r   Zto_linkZbaselinkr   r   r   linkR  s    	*zMessage.linkr?   )databotr   c                    sv  |  |}|sdS t|}t|dd||d< t|d||d< t|d |d|d< t|d||d< t	|d||d< t	|d	||d	< t|d
||d
< t|d||d< t|d|d|d< t
|d||d< t|d|d|d< t|d||d< t|d||d< t|d||d< t|d||d< t	|d||d< t|d||d< t|d||d< t|d||d< t|d||d< t|d||d< t|d||d< t|d||d< t	|d||d< t|d||d< t	|d||d< t|d||d< t
|d||d< t|d ||d < t|d!||d!< t|d"||d"< t|d#||d#< t|d$||d$< t|d%||d%< t|d&||d&< t|d'||d'< t|d(||d(< t |d)||d)< t!|d*||d*< t"|d+||d+< t#|d,||d,< t$|d-||d-< t%|d.||d.< t&|d/||d/< t'|d0||d0< t(|d1||d1< t)|d2||d2< t*|d3||d3< t+|d4||d4< t,|d5||d5< t- j||d6S )7z,See :meth:`telegram.TelegramObject.de_json`.Nfromrl   ro   rt   )tzinforN   rZ   rr   r`   rh   rU   re   rd   rJ   rS   r^   rP   rx   ra   rY   rs   r{   rK   rb   rc   r\   rw   ri   r}   rg   rz   rO   rf   rv   rp   r[   rn   rI   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   )r   r   ).Z_parse_datar+   r)   de_jsonpopr
   getr,   r    Zde_listrH   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r#   r!   r$   r   r%   r   r7   r8   r5   r6   r9   r   r   r   r   r   r   r:   r'   r&   r   )clsr   r   Z
loc_tzinfor   r   r   r   f  s    
         zMessage.de_jsonc                 C   s>   t | jts| jS tD ]}| | r| | | _ q8qd| _| jS )a7  If this message is neither a plain text message nor a status update, this gives the
        attachment that this message was sent with. This may be one of

        * :class:`telegram.Audio`
        * :class:`telegram.Dice`
        * :class:`telegram.Contact`
        * :class:`telegram.Document`
        * :class:`telegram.Animation`
        * :class:`telegram.Game`
        * :class:`telegram.Invoice`
        * :class:`telegram.Location`
        * :class:`telegram.PassportData`
        * List[:class:`telegram.PhotoSize`]
        * :class:`telegram.Poll`
        * :class:`telegram.Sticker`
        * :class:`telegram.SuccessfulPayment`
        * :class:`telegram.Venue`
        * :class:`telegram.Video`
        * :class:`telegram.VideoNote`
        * :class:`telegram.Voice`

        Otherwise :obj:`None` is returned.

        .. seealso:: :wiki:`Working with Files and Media <Working-with-Files-and-Media>`

        .. versionchanged:: 20.0
            :attr:`dice`, :attr:`passport_data` and :attr:`poll` are now also considered to be an
            attachment.

        N)
isinstancer|   r.   r;   )r   Zattachment_typer   r   r   effective_attachment  s    5
zMessage.effective_attachment)quotereply_to_message_idr   c                 C   sn   |dk	r|S |dk	r |rj| j S nJt|  drF|  jrF|  jj}nd}|dkr`| jjtjksd|rj| j S dS )z3Modify kwargs for replying with or without quoting.Ndefaults)	rj   hasattrget_botr   r   rN   r   r
   r   )r   r   r   Zdefault_quoter   r   r   _quote  s    zMessage._quote)r   read_timeoutwrite_timeoutconnect_timeoutpool_timeoutr   )rQ   
parse_modedisable_web_page_previewdisable_notificationr   rI   allow_sending_without_replyrZ   protect_contentr   r   r   r   r   r   r   r   c                   sB   |  ||}|  j| j|||||||||	|
|||||dI dH S )a|  Shortcut for::

             await bot.send_message(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_message`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the message is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        r   rQ   r   r   r   r   rI   r   rZ   r   r   r   r   r   r   r   N)r   r   send_messager   )r   rQ   r   r   r   r   rI   r   rZ   r   r   r   r   r   r   r   r   r   r   r   
reply_text  s&    #zMessage.reply_text)rQ   r   r   r   rI   r   rZ   r   r   r   r   r   r   r   r   r   c
                   sD   |  |
|}|  j| j|tj||||||||	|||||dI dH S )a  Shortcut for::

            await bot.send_message(
                update.effective_message.chat_id,
                parse_mode=ParseMode.MARKDOWN,
                *args,
                **kwargs,
            )

        Sends a message with Markdown version 1 formatting.

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_message`.

        Note:
            :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
            Telegram for backward compatibility. You should use :meth:`reply_markdown_v2` instead.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the message is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.
        r   N)r   r   r   r   r<   ZMARKDOWNr   rQ   r   r   r   rI   r   rZ   r   r   r   r   r   r   r   r   r   r   r   reply_markdownE  s&    ,zMessage.reply_markdownc
                   sD   |  |
|}|  j| j|tj||||||||	|||||dI dH S )a(  Shortcut for::

            await bot.send_message(
                update.effective_message.chat_id,
                parse_mode=ParseMode.MARKDOWN_V2,
                *args,
                **kwargs,
            )

        Sends a message with markdown version 2 formatting.

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_message`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the message is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.
        r   N)r   r   r   r   r<   ZMARKDOWN_V2r   r   r   r   reply_markdown_v2  s&    (zMessage.reply_markdown_v2c
                   sD   |  |
|}|  j| j|tj||||||||	|||||dI dH S )a  Shortcut for::

            await bot.send_message(
                update.effective_message.chat_id,
                parse_mode=ParseMode.HTML,
                *args,
                **kwargs,
            )

        Sends a message with HTML formatting.

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_message`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the message is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.
        r   N)r   r   r   r   r<   ZHTMLr   r   r   r   
reply_html  s&    (zMessage.reply_html   )	r   r   r   r   r   r   rX   r   rr   )rB   rC   rD   rE   )rH   .)mediar   r   r   r   r   r   r   r   r   r   r   rX   r   rr   r   c       	            s@   |  ||}|  j| j|||||	|
||||||||dI dH S )a  Shortcut for::

             await bot.send_media_group(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_media_group`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the media group is sent as an
                actual reply to this message. If ``reply_to_message_id`` is passed, this parameter
                will be ignored. Default: :obj:`True` in group chats and :obj:`False` in private
                chats.

        Returns:
            Tuple[:class:`telegram.Message`]: An array of the sent Messages.

        Raises:
            :class:`telegram.error.TelegramError`
        )r   r   r   r   r   r   r   r   r   r   r   r   rX   r   rr   N)r   r   Zsend_media_groupr   )r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r   rr   r   r   r   reply_media_group  s$    'zMessage.reply_media_group)filenamer   r   r   r   r   r   r   )rx   rX   r   r   rI   r   r   rr   r   r   has_spoilerr   r   r   r   r   r   r   r   c                   sF   |  ||}|  j| j||||||||||	|
||||||dI dH S )av  Shortcut for::

             await bot.send_photo(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_photo`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the photo is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   rx   rX   r   r   rI   r   r   rr   r   r   r   r   r   r   r   r   r   N)r   r   Z
send_photor   )r   rx   rX   r   r   rI   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_photo7  s*    %zMessage.reply_photor   )rJ   duration	performertitlerX   r   r   rI   r   thumbr   rr   r   r   	thumbnailr   r   r   r   r   r   r   r   c                   sN   |  ||}|  j| j|||||||||	|
|||||||||||dI dH S )av  Shortcut for::

             await bot.send_audio(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_audio`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the audio is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   rJ   r   r   r   rX   r   r   rI   r   r   r   rr   r   r   r   r   r   r   r   r   r   N)r   r   Z
send_audior   )r   rJ   r   r   r   rX   r   r   rI   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_audior  s2    )zMessage.reply_audior   )rS   rX   r   r   rI   r   r   disable_content_type_detectionr   rr   r   r   r   r   r   r   r   r   r   r   r   c                   sJ   |  ||}|  j| j|||||||||||||||	|
|||dI dH S )a  Shortcut for::

             await bot.send_document(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_document`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the document is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   rS   r   rX   r   r   rI   r   r   r   r   r   r   r   r   r   rr   r   r   r   N)r   r   Zsend_documentr   )r   rS   rX   r   r   rI   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_document  s.    'zMessage.reply_documentr   )r^   r   widthheightr   rX   r   r   r   rI   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   c                   sP   |  ||	}	|  j| j|||||||||	|
||||||||||||dI dH S )a  Shortcut for::

             await bot.send_animation(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_animation`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the animation is sent as an
                actual reply to this message. If ``reply_to_message_id`` is passed, this parameter
                will be ignored. Default: :obj:`True` in group chats and :obj:`False` in private
                chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r^   r   r   r   r   rX   r   r   r   rI   r   r   r   r   r   r   rr   r   r   r   r   r   N)r   r   Zsend_animationr   )r   r^   r   r   r   r   rX   r   r   r   rI   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_animation  s4    +zMessage.reply_animationr   )ra   r   r   rI   r   r   r   emojir   r   r   r   r   r   r   c	                   s>   |  |	|}|  j| j|||||
||||||||dI dH S )a|  Shortcut for::

             await bot.send_sticker(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_sticker`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the sticker is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   ra   r   r   rI   r   r   r   r   r   r   r   r   r   N)r   r   Zsend_stickerr   )r   ra   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_sticker:  s"    !zMessage.reply_stickerr   )rY   r   rX   r   r   rI   r   r   r   supports_streamingr   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   c                   sR   |  ||}|  j| j|||||||||||||	|
|||||||||dI dH S )av  Shortcut for::

             await bot.send_video(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_video`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the video is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   rY   r   rX   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r   N)r   r   Z
send_videor   )r   rY   r   rX   r   r   rI   r   r   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_videom  s6    +zMessage.reply_videor   )r{   r   lengthr   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   c                   sF   |  ||}|  j| j|||||||||||||||	|
|dI dH S )a  Shortcut for::

             await bot.send_video_note(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_video_note`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the video note is sent as an
                actual reply to this message. If ``reply_to_message_id`` is passed, this parameter
                will be ignored. Default: :obj:`True` in group chats and :obj:`False` in private
                chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r{   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   N)r   r   Zsend_video_noter   )r   r{   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   reply_video_note  s*    &zMessage.reply_video_noter   )rs   r   rX   r   r   rI   r   r   rr   r   r   r   r   r   r   r   r   r   r   c                   sF   |  ||}|  j| j||||||||||||||	||
|dI dH S )a  Shortcut for::

             await bot.send_voice(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_voice`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the voice note is sent as an
                actual reply to this message. If ``reply_to_message_id`` is passed, this parameter
                will be ignored. Default: :obj:`True` in group chats and :obj:`False` in private
                chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   rs   r   rX   r   r   rI   r   r   r   r   r   r   r   rr   r   r   r   N)r   r   Z
send_voicer   )r   rs   r   rX   r   r   rI   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   reply_voice  s*    &zMessage.reply_voice)rb   r   r   r   r   r   r   )latitude	longituder   r   rI   live_periodhorizontal_accuracyheadingproximity_alert_radiusr   r   r   rb   r   r   r   r   r   r   r   c                   sH   |  ||}|  j| j|||||||||||||||	|
||dI dH S )a  Shortcut for::

             await bot.send_location(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_location`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the location is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   r   r   rI   r   r   r   r   rb   r   r   r   r   r   r   r   r   N)r   r   Zsend_locationr   )r   r   r   r   r   rI   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   r   r   reply_location,  s,    &zMessage.reply_location)rc   r   r   r   r   r   r   )r   r   r   addressfoursquare_idr   r   rI   foursquare_typegoogle_place_idgoogle_place_typer   r   r   rc   r   r   r   r   r   r   r   c                   sL   |  ||}|  j| j||||||||||||||	||
||||dI dH S )av  Shortcut for::

             await bot.send_venue(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_venue`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the venue is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   r   r   r   r   r   rI   r   r   r   r   rc   r   r   r   r   r   r   r   N)r   r   Z
send_venuer   )r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   reply_venuei  s0    (zMessage.reply_venue)rK   r   r   r   r   r   r   )phone_number
first_name	last_namer   r   rI   vcardr   r   r   rK   r   r   r   r   r   r   r   c                   sD   |  ||}|  j| j|||||||||||||||	|
dI dH S )a|  Shortcut for::

             await bot.send_contact(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_contact`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the contact is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   r   r   r   rI   r   r   r   r   rK   r   r   r   r   r   N)r   r   Zsend_contactr   )r   r   r   r   r   r   rI   r   r   r   r   rK   r   r   r   r   r   r   r   r   r   reply_contact  s(    $zMessage.reply_contact)questionoptionsis_anonymousr   allows_multiple_answerscorrect_option_id	is_closedr   r   rI   explanationexplanation_parse_modeopen_period
close_dater   explanation_entitiesr   r   r   r   r   r   r   r   r   c                   sR   |  ||	}	|  j| j|||||||||	|
|||||||||||||dI dH S )as  Shortcut for::

             await bot.send_poll(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_poll`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the poll is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   N)r   r   Z	send_pollr   )r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
reply_poll  s6    +zMessage.reply_poll)r   r   rI   r   r   r   r   r   r   r   r   r   r   r   c                   s<   |  ||}|  j| j||||	|
|||||||dI dH S )as  Shortcut for::

             await bot.send_dice(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_dice`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the dice is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   rI   r   r   r   r   r   r   r   r   r   N)r   r   Z	send_dicer   )r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   
reply_dice*  s      zMessage.reply_dice)r   r   r   r   r   )actionr   r   r   r   r   r   r   c             
      s&   |   j| j|||||||dI dH S )aG  Shortcut for::

             await bot.send_chat_action(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_chat_action`.

        .. versionadded:: 13.2

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.

        )r   r   r   r   r   r   r   r   N)r   Zsend_chat_actionr   )r   r   r   r   r   r   r   r   r   r   r   reply_chat_action[  s    zMessage.reply_chat_actionr   )game_short_namer   r   rI   r   r   r   r   r   r   r   r   r   r   c                   s<   |  ||}|  j| j|||||	|
||||||dI dH S )a  Shortcut for::

             await bot.send_game(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_game`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the game is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        .. versionadded:: 13.2

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )r   r   r   r   rI   r   r   r   r   r   r   r   r   N)r   r   Z	send_gamer   )r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   
reply_game}  s     "zMessage.reply_gamerF   )"r   descriptionpayloadprovider_tokencurrencypricesstart_parameter	photo_url
photo_sizephoto_widthphoto_height	need_nameneed_phone_number
need_emailneed_shipping_addressis_flexibler   r   rI   provider_datasend_phone_number_to_providersend_email_to_providerr   max_tip_amountsuggested_tip_amountsr   r   r   r   r   r   r   r   r   c          "   #      sd   |  ||}|  j| j|||||||||	|
|||||||||||||||| |!|||||d!I dH S )a  Shortcut for::

             await bot.send_invoice(update.effective_message.chat_id, *args, **kwargs)

        For the documentation of the arguments, please see :meth:`telegram.Bot.send_invoice`.

        Warning:
            As of API 5.2 :paramref:`start_parameter <telegram.Bot.send_invoice.start_parameter>`
            is an optional argument and therefore the
            order of the arguments had to be changed. Use keyword arguments to make sure that the
            arguments are passed correctly.

        .. versionadded:: 13.2

        .. versionchanged:: 13.5
            As of Bot API 5.2, the parameter
            :paramref:`start_parameter <telegram.Bot.send_invoice.start_parameter>` is optional.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the invoice is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.

        )!r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r   r   rI   r  r  r  r   r   r   r   r   r   r  r  r   r   N)r   r   Zsend_invoicer   )"r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r   r   rI   r  r  r  r   r  r  r   r   r   r   r   r   r   r   r   r   r   reply_invoice  sH    @zMessage.reply_invoice)
r   r   r   r   r   r   r   r   r   r   c          
         s.   |   j|| j| j||||||||	dI dH S )a  Shortcut for::

             await bot.forward_message(
                 from_chat_id=update.effective_message.chat_id,
                 message_id=update.effective_message.message_id,
                 *args,
                 **kwargs
             )

        For the documentation of the arguments, please see :meth:`telegram.Bot.forward_message`.

        Note:
            Since the release of Bot API 5.5 it can be impossible to forward messages from
            some chats. Use the attributes :attr:`telegram.Message.has_protected_content` and
            :attr:`telegram.Chat.has_protected_content` to check this.

            As a workaround, it is still possible to use :meth:`copy`. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, instance representing the message forwarded.

        )r   from_chat_idrj   r   r   r   r   r   r   r   r   N)r   Zforward_messager   rj   )
r   r   r   r   r   r   r   r   r   r   r   r   r   forward	  s    $zMessage.forwardrG   )r   rX   r   rr   r   r   r   rI   r   r   r   r   r   r   r   r   c                   s:   |   j|| j| j|||||||||||||	|
dI dH S )a  Shortcut for::

             await bot.copy_message(
                 chat_id=chat_id,
                 from_chat_id=update.effective_message.chat_id,
                 message_id=update.effective_message.message_id,
                 *args,
                 **kwargs
             )

        For the documentation of the arguments, please see :meth:`telegram.Bot.copy_message`.

        Returns:
            :class:`telegram.MessageId`: On success, returns the MessageId of the sent message.

        r   r  rj   rX   r   rr   r   r   r   rI   r   r   r   r   r   r   r   N)r   copy_messager   rj   )r   r   rX   r   rr   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   copyG	  s&    #zMessage.copy)r  rj   rX   r   rr   r   r   r   rI   r   r   r   r   r   r   r   r   r   c                   sD   |  ||}|  j| j|||||||||	||||||
|dI dH S )a  Shortcut for::

             await bot.copy_message(
                 chat_id=message.chat.id,
                 message_id=message_id,
                 *args,
                 **kwargs
             )

        For the documentation of the arguments, please see :meth:`telegram.Bot.copy_message`.

        Keyword Args:
            quote (:obj:`bool`, optional): If set to :obj:`True`, the copy is sent as an actual
                reply to this message. If ``reply_to_message_id`` is passed, this parameter will be
                ignored. Default: :obj:`True` in group chats and :obj:`False` in private chats.

                .. versionadded:: 13.1

        Returns:
            :class:`telegram.MessageId`: On success, returns the MessageId of the sent message.

        r  N)r   r   r  r   )r   r  rj   rX   r   rr   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   
reply_copy~	  s(    +zMessage.reply_copy)rQ   r   r   rI   rZ   r   r   r   r   r   r   c                   s2   |   j| j| j||||||||	|
|ddI dH S )a  Shortcut for::

             await bot.edit_message_text(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see :meth:`telegram.Bot.edit_message_text`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise ``True`` is returned.

        N)r   rj   rQ   r   r   rI   r   r   r   r   r   rZ   inline_message_id)r   Zedit_message_textr   rj   )r   rQ   r   r   rI   rZ   r   r   r   r   r   r   r   r   	edit_text	  s     zMessage.edit_text)
rX   rI   r   rr   r   r   r   r   r   r   c          
         s0   |   j| j| j||||||||	|ddI dH S )a  Shortcut for::

             await bot.edit_message_caption(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.edit_message_caption`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise ``True`` is returned.

        N)r   rj   rX   rI   r   r   r   r   r   r   rr   r  )r   Zedit_message_captionr   rj   )
r   rX   rI   r   rr   r   r   r   r   r   r   r   r   edit_caption	  s     zMessage.edit_captionrA   )r   rI   r   r   r   r   r   r   c                   s,   |   j|| j| j||||||dd
I dH S )a  Shortcut for::

             await bot.edit_message_media(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.edit_message_media`.

        Note:
            You can only edit messages that the bot sent itself(i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is not an inline message, the
            edited Message is returned, otherwise ``True`` is returned.

        N)
r   r   rj   rI   r   r   r   r   r   r  )r   Zedit_message_mediar   rj   )r   r   rI   r   r   r   r   r   r   r   r   
edit_media
  s    zMessage.edit_media)rI   r   r   r   r   r   r   c                   s*   |   j| j| j||||||dd	I dH S )a  Shortcut for::

             await bot.edit_message_reply_markup(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.edit_message_reply_markup`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise ``True`` is returned.
        N	r   rj   rI   r   r   r   r   r   r  )r   Zedit_message_reply_markupr   rj   r   rI   r   r   r   r   r   r   r   r   edit_reply_markupH
  s    zMessage.edit_reply_markup)rb   r   r   r   r   r   )r   r   rI   r   r   r   rb   r   r   r   r   r   r   c                   s6   |   j| j| j||||||	|
|||||ddI dH S )a  Shortcut for::

             await bot.edit_message_live_location(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.edit_message_live_location`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise :obj:`True` is returned.
        N)r   rj   r   r   rb   rI   r   r   r   r   r   r   r   r   r  )r   Zedit_message_live_locationr   rj   )r   r   r   rI   r   r   r   rb   r   r   r   r   r   r   r   r   edit_live_locationp
  s"    "zMessage.edit_live_locationc                   s*   |   j| j| j||||||dd	I dH S )a  Shortcut for::

             await bot.stop_message_live_location(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.stop_message_live_location`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise :obj:`True` is returned.
        Nr   )r   Zstop_message_live_locationr   rj   r!  r   r   r   stop_live_location
  s    zMessage.stop_live_location)
user_idscoreforcedisable_edit_messager   r   r   r   r   r   c          
         s0   |   j| j| j|||||||||	ddI dH S )a  Shortcut for::

             await bot.set_game_score(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see :meth:`telegram.Bot.set_game_score`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            :class:`telegram.Message`: On success, if edited message is sent by the bot, the
            edited Message is returned, otherwise :obj:`True` is returned.
        N)r   rj   r%  r&  r'  r(  r   r   r   r   r   r  )r   set_game_scorer   rj   )
r   r%  r&  r'  r(  r   r   r   r   r   r   r   r   r)  
  s    zMessage.set_game_score)r@   .)r%  r   r   r   r   r   r   c                   s*   |   j| j| j||||||dd	I dH S )a{  Shortcut for::

             await bot.get_game_high_scores(
                 chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.get_game_high_scores`.

        Note:
            You can only edit messages that the bot sent itself (i.e. of the ``bot.send_*`` family
            of methods) or channel posts, if the bot is an admin in that channel. However, this
            behaviour is undocumented and might be changed by Telegram.

        Returns:
            Tuple[:class:`telegram.GameHighScore`]
        N)	r   rj   r%  r   r   r   r   r   r  )r   get_game_high_scoresr   rj   )r   r%  r   r   r   r   r   r   r   r   r*  
  s    zMessage.get_game_high_scores)r   r   r   r   r   r   c             	      s&   |   j| j| j|||||dI dH S )a\  Shortcut for::

              await bot.delete_message(
                  chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
              )

        For the documentation of the arguments, please see :meth:`telegram.Bot.delete_message`.

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.

        r   rj   r   r   r   r   r   N)r   Zdelete_messager   rj   r   r   r   r   r   r   r   r   r   delete   s    zMessage.deletec             
      s(   |   j| j| j||||||dI dH S )a  Shortcut for::

              await bot.stop_poll(
                  chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
              )

        For the documentation of the arguments, please see :meth:`telegram.Bot.stop_poll`.

        Returns:
            :class:`telegram.Poll`: On success, the stopped Poll with the final results is
            returned.

        )r   rj   rI   r   r   r   r   r   N)r   	stop_pollr   rj   r!  r   r   r   r.  ?  s    zMessage.stop_poll)r   r   r   r   r   r   r   c             
      s(   |   j| j| j||||||dI dH S )a`  Shortcut for::

              await bot.pin_chat_message(
                  chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
              )

        For the documentation of the arguments, please see :meth:`telegram.Bot.pin_chat_message`.

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.

        )r   rj   r   r   r   r   r   r   N)r   Zpin_chat_messager   rj   )r   r   r   r   r   r   r   r   r   r   pina  s    zMessage.pinc             	      s&   |   j| j| j|||||dI dH S )ad  Shortcut for::

              await bot.unpin_chat_message(
                  chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
              )

        For the documentation of the arguments, please see :meth:`telegram.Bot.unpin_chat_message`.

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.

        r+  N)r   Zunpin_chat_messager   rj   r,  r   r   r   unpin  s    zMessage.unpin)nameicon_custom_emoji_idr   r   r   r   r   r   c                   s*   |   j| j| j|||||||d	I dH S )a  Shortcut for::

             await bot.edit_forum_topic(
                chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
                **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.edit_forum_topic`.

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        )	r   r   r1  r2  r   r   r   r   r   N)r   edit_forum_topicr   r   )r   r1  r2  r   r   r   r   r   r   r   r   r3    s    zMessage.edit_forum_topicc             	      s&   |   j| j| j|||||dI dH S )a  Shortcut for::

             await bot.close_forum_topic(
                chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
                **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.close_forum_topic`.

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        r   r   r   r   r   r   r   N)r   close_forum_topicr   r   r,  r   r   r   r5    s    zMessage.close_forum_topicc             	      s&   |   j| j| j|||||dI dH S )a  Shortcut for::

            await bot.reopen_forum_topic(
                chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
                **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.reopen_forum_topic`.

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        r4  N)r   reopen_forum_topicr   r   r,  r   r   r   r6    s    zMessage.reopen_forum_topicc             	      s&   |   j| j| j|||||dI dH S )a  Shortcut for::

             await bot.delete_forum_topic(
                chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
                **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.delete_forum_topic`.

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        r4  N)r   delete_forum_topicr   r   r,  r   r   r   r7    s    zMessage.delete_forum_topicc             	      s&   |   j| j| j|||||dI dH S )a  Shortcut for::

             await bot.unpin_all_forum_topic_messages(
                chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
                **kwargs
             )

        For the documentation of the arguments, please see
        :meth:`telegram.Bot.unpin_all_forum_topic_messages`.

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        r4  N)r   unpin_all_forum_topic_messagesr   r   r,  r   r   r   r8  -  s    z&Message.unpin_all_forum_topic_messages)entityr   c                 C   sB   | j std| j d}||jd |j|j d  }|dS )a  Returns the text from a given :class:`telegram.MessageEntity`.

        Note:
            This method is present because Telegram calculates the offset and length in
            UTF-16 codepoint pairs, which some versions of Python don't handle automatically.
            (That is, you can't just slice ``Message.text`` with the offset and length.)

        Args:
            entity (:class:`telegram.MessageEntity`): The entity to extract the text from. It must
                be an entity that belongs to this message.

        Returns:
            :obj:`str`: The text of the given entity.

        Raises:
            RuntimeError: If the message has no text.

        zThis Message has no 'text'.	utf-16-le   )rQ   RuntimeErrorencodeoffsetr   decoder   r9  Zentity_textr   r   r   parse_entityO  s
    zMessage.parse_entityc                 C   sB   | j std| j d}||jd |j|j d  }|dS )a  Returns the text from a given :class:`telegram.MessageEntity`.

        Note:
            This method is present because Telegram calculates the offset and length in
            UTF-16 codepoint pairs, which some versions of Python don't handle automatically.
            (That is, you can't just slice ``Message.caption`` with the offset and length.)

        Args:
            entity (:class:`telegram.MessageEntity`): The entity to extract the text from. It must
                be an entity that belongs to this message.

        Returns:
            :obj:`str`: The text of the given entity.

        Raises:
            RuntimeError: If the message has no caption.

        zThis Message has no 'caption'.r:  r;  )rX   r<  r=  r>  r   r?  r@  r   r   r   parse_caption_entityi  s
    zMessage.parse_caption_entity)typesr   c                    s$   dkrt j fdd jD S )ai  
        Returns a :obj:`dict` that maps :class:`telegram.MessageEntity` to :obj:`str`.
        It contains entities from this message filtered by their
        :attr:`telegram.MessageEntity.type` attribute as the key, and the text that each entity
        belongs to as the value of the :obj:`dict`.

        Note:
            This method should always be used instead of the :attr:`entities` attribute, since it
            calculates the correct substring from the message text based on UTF-16 codepoints.
            See :attr:`parse_entity` for more info.

        Args:
            types (List[:obj:`str`], optional): List of :class:`telegram.MessageEntity` types as
                strings. If the ``type`` attribute of an entity is contained in this list, it will
                be returned. Defaults to a list of all types. All types can be found as constants
                in :class:`telegram.MessageEntity`.

        Returns:
            Dict[:class:`telegram.MessageEntity`, :obj:`str`]: A dictionary of entities mapped to
            the text that belongs to them, calculated based on UTF-16 codepoints.

        Nc                    s"   i | ]}|j kr| |qS r   )r   rA  .0r9  r   rC  r   r   
<dictcomp>  s    
  z*Message.parse_entities.<locals>.<dictcomp>)r    	ALL_TYPESrZ   rF  r   rF  r   parse_entities  s
    zMessage.parse_entitiesc                    s$   dkrt j fdd jD S )a{  
        Returns a :obj:`dict` that maps :class:`telegram.MessageEntity` to :obj:`str`.
        It contains entities from this message's caption filtered by their
        :attr:`telegram.MessageEntity.type` attribute as the key, and the text that each entity
        belongs to as the value of the :obj:`dict`.

        Note:
            This method should always be used instead of the :attr:`caption_entities` attribute,
            since it calculates the correct substring from the message text based on UTF-16
            codepoints. See :attr:`parse_entity` for more info.

        Args:
            types (List[:obj:`str`], optional): List of :class:`telegram.MessageEntity` types as
                strings. If the ``type`` attribute of an entity is contained in this list, it will
                be returned. Defaults to a list of all types. All types can be found as constants
                in :class:`telegram.MessageEntity`.

        Returns:
            Dict[:class:`telegram.MessageEntity`, :obj:`str`]: A dictionary of entities mapped to
            the text that belongs to them, calculated based on UTF-16 codepoints.

        Nc                    s"   i | ]}|j kr| |qS r   )r   rB  rD  rF  r   r   rG    s   
 z2Message.parse_caption_entities.<locals>.<dictcomp>)r    rH  rr   rF  r   rF  r   parse_caption_entities  s
    zMessage.parse_caption_entitiesFr   )message_textrZ   urledr>  r   c                    s  | d krd S |  d} d}d}t| dd d}g }|D ]L\ } |kr: fdd|D }	|t|	  |}
t|}|	rtj|
|	| j	d	} j
tjkrd
 j d| d}n` j
tjkr jrd jj d| d}n4 j
tjkr|rd
| d| d}n
 j
tjkr*d| d}n j
tjkrFd| d}n҈ j
tjkrbd| d}n j
tjkr jrd j d| d}nd| d}n| j
tjkrd| d}n` j
tjkrd| d}nD j
tjkrd| d}n( j
tjkrd j d| d}n|}|dkrP|t| |d   j	| d   d| 7 }n(|| |d   j	| d   d| 7 } j	|  j }q:|dkr|t| |d  d  d7 }n|| |d  d  d7 }|S )!Nr:   r   c                 S   s
   | d j S Nr   r>  itemr   r   r   <lambda>      z%Message._parse_html.<locals>.<lambda>keyc                    sB   i | ]:\}}|j  j kr|j |j  j  j kr| kr||qS r   r>  r   rE  etr9  r   r   rG    s    z'Message._parse_html.<locals>.<dictcomp>)rL  r>  z	<a href="z">z</a>z<a href="tg://user?id=z<b>z</b>z<i>z</i>z<code>z</code>z<pre><code class="z</code></pre>z<pre>z</pre>z<u>z</u>z<s>z</s>z<span class="tg-spoiler">z</span>z<tg-emoji emoji-id="z</tg-emoji>r;  )r=  sorteditemsextendlistkeysr   rH   _parse_htmlr>  r   r    	TEXT_LINKurlTEXT_MENTIONuserr   URLBOLDITALICCODEPRElanguage	UNDERLINESTRIKETHROUGHSPOILERCUSTOM_EMOJIcustom_emoji_idr?  r   )rK  rZ   rL  r>  Z	html_textlast_offsetsorted_entitiesparsed_entitiesrQ   nested_entities	orig_textescaped_textinsertr   rZ  r   r`    s    

   
 	 
zMessage._parse_htmlc                 C   s   | j | j|  ddS )a  Creates an HTML-formatted string from the markup entities found in the message.

        Use this if you want to retrieve the message text with the entities formatted as HTML in
        the same way the original message was formatted.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as HTML.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message text with entities formatted as HTML.

        FrL  r`  rQ   rI  r   r   r   r   	text_html"  s    zMessage.text_htmlc                 C   s   | j | j|  ddS )a  Creates an HTML-formatted string from the markup entities found in the message.

        Use this if you want to retrieve the message text with the entities formatted as HTML.
        This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as HTML.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message text with entities formatted as HTML.

        Trw  rx  r   r   r   r   text_html_urled5  s    zMessage.text_html_urledc                 C   s   | j | j|  ddS )a#  Creates an HTML-formatted string from the markup entities found in the message's
        caption.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        HTML in the same way the original message was formatted.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as HTML.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message caption with caption entities formatted as HTML.
        Frw  r`  rX   rJ  r   r   r   r   caption_htmlH  s    zMessage.caption_htmlc                 C   s   | j | j|  ddS )a5  Creates an HTML-formatted string from the markup entities found in the message's
        caption.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        HTML. This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as HTML.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message caption with caption entities formatted as HTML.
        Trw  r{  r   r   r   r   caption_html_urled[  s    zMessage.caption_html_urled   )rK  rZ   rL  versionr>  r   c                    s  t |}| d krd S | d} d}d}t| dd d}g }|D ].\ }	 |krB fdd|D }
|t|
  t|	|d	}|
r|d
k rtdt	j
|	|
| j|d} jtjkr|dkrʈ j}nt j|tjd}d| d| d}n jtjkr" jr"d| d jj d}n܈ jtjkr^|r^|dkrD|	n|}d| d|	 d}n jtjkr|d| d}n jtjkrd| d}nd jtjkrdt|	|tj d}n< jtjkrt|	|tjd} jrd j d}n|dr
d}nd}| | d}n jtjkrL|dkr>tdd| d}n jtjkrz|dkrltdd| d}n jtjkr|dkrtdd| d}nV jtjkr|dkr|}td d!td" n$t j |tjd}d#| d$| d}n|}|dkr:|t| |d
  j| d
  !d|d	| 7 }n(|| |d
  j| d
  !d| 7 } j|  j" }qB|dkr|t| |d
 d  !d|d	7 }n|| |d
 d  !d7 }|S )%Nr:  rM  r   c                 S   s
   | d j S rN  rO  rP  r   r   r   rR    rS  z)Message._parse_markdown.<locals>.<lambda>rT  c                    sB   i | ]:\}}|j  j kr|j |j  j  j kr| kr||qS r   rV  rW  rZ  r   r   rG    s    z+Message._parse_markdown.<locals>.<dictcomp>)r  r;  z8Nested entities are not supported for Markdown version 1)rL  r>  r  r~  )r  Zentity_type[z]()z](tg://user?id=*_`z```
\z```
z;Underline entities are not supported for Markdown version 1__z?Strikethrough entities are not supported for Markdown version 1~z9Spoiler entities are not supported for Markdown version 1z||zCustom emoji entities are not supported for Markdown version 1. Future version of PTB will raise a ValueError instead of falling back to the alternative standard emoji.   )
stacklevelcategoryz![z](tg://emoji?id=)#intr=  r[  r\  r]  r^  r_  r=   
ValueErrorrH   _parse_markdownr>  r   r    ra  rb  rc  rd  r   re  rf  rg  rh  ri  rj  
startswithrk  rl  rm  rn  r4   r>   ro  r?  r   )rK  rZ   rL  r  r>  Zmarkdown_textrp  rq  rr  rQ   rs  ru  rb  rv  r   codeprefixro  r   rZ  r   r  n  s    

  





 
 

zMessage._parse_markdownc                 C   s   | j | j|  ddS )ay  Creates an Markdown-formatted string from the markup entities found in the message
        using :class:`telegram.constants.ParseMode.MARKDOWN`.

        Use this if you want to retrieve the message text with the entities formatted as Markdown
        in the same way the original message was formatted.

        Note:
            * :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
              Telegram for backward compatibility. You should use
              :meth:`text_markdown_v2` instead.

            * |custom_emoji_formatting_note|

        .. deprecated:: 20.3
            |custom_emoji_md1_deprecation|

        Returns:
            :obj:`str`: Message text with entities formatted as Markdown.

        Raises:
            :exc:`ValueError`: If the message contains underline, strikethrough, spoiler or nested
                entities.

        Frw  r  rQ   rI  r   r   r   r   text_markdown  s    zMessage.text_markdownc                 C   s   | j | j|  dddS )aN  Creates an Markdown-formatted string from the markup entities found in the message
        using :class:`telegram.constants.ParseMode.MARKDOWN_V2`.

        Use this if you want to retrieve the message text with the entities formatted as Markdown
        in the same way the original message was formatted.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as Markdown V2.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message text with entities formatted as Markdown.
        Fr;  rL  r  r  r   r   r   r   text_markdown_v2!  s    zMessage.text_markdown_v2c                 C   s   | j | j|  ddS )a  Creates an Markdown-formatted string from the markup entities found in the message
        using :class:`telegram.constants.ParseMode.MARKDOWN`.

        Use this if you want to retrieve the message text with the entities formatted as Markdown.
        This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        Note:
            * :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
              Telegram for backward compatibility. You should use :meth:`text_markdown_v2_urled`
              instead.

            * |custom_emoji_formatting_note|

        .. deprecated:: 20.3
            |custom_emoji_md1_deprecation|

        Returns:
            :obj:`str`: Message text with entities formatted as Markdown.

        Raises:
            :exc:`ValueError`: If the message contains underline, strikethrough, spoiler or nested
                entities.

        Trw  r  r   r   r   r   text_markdown_urled4  s    zMessage.text_markdown_urledc                 C   s   | j | j|  dddS )a`  Creates an Markdown-formatted string from the markup entities found in the message
        using :class:`telegram.constants.ParseMode.MARKDOWN_V2`.

        Use this if you want to retrieve the message text with the entities formatted as Markdown.
        This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as Markdown V2.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message text with entities formatted as Markdown.
        Tr;  r  r  r   r   r   r   text_markdown_v2_urledP  s    zMessage.text_markdown_v2_urledc                 C   s   | j | j|  ddS )a  Creates an Markdown-formatted string from the markup entities found in the message's
        caption using :class:`telegram.constants.ParseMode.MARKDOWN`.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        Markdown in the same way the original message was formatted.

        Note:
            * :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
              Telegram for backward compatibility. You should use :meth:`caption_markdown_v2`
              instead.

            * |custom_emoji_formatting_note|

        .. deprecated:: 20.3
            |custom_emoji_md1_deprecation|

        Returns:
            :obj:`str`: Message caption with caption entities formatted as Markdown.

        Raises:
            :exc:`ValueError`: If the message contains underline, strikethrough, spoiler or nested
                entities.

        Frw  r  rX   rJ  r   r   r   r   caption_markdownc  s    zMessage.caption_markdownc                 C   s   | j | j|  dddS )an  Creates an Markdown-formatted string from the markup entities found in the message's
        caption using :class:`telegram.constants.ParseMode.MARKDOWN_V2`.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        Markdown in the same way the original message was formatted.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as Markdown V2.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message caption with caption entities formatted as Markdown.
        Fr;  r  r  r   r   r   r   caption_markdown_v2  s       zMessage.caption_markdown_v2c                 C   s   | j | j|  ddS )a  Creates an Markdown-formatted string from the markup entities found in the message's
        caption using :class:`telegram.constants.ParseMode.MARKDOWN`.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        Markdown. This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        Note:
            * :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
              Telegram for backward compatibility. You should use
              :meth:`caption_markdown_v2_urled` instead.

            * |custom_emoji_formatting_note|

        .. deprecated:: 20.3
            |custom_emoji_md1_deprecation|

        Returns:
            :obj:`str`: Message caption with caption entities formatted as Markdown.

        Raises:
            :exc:`ValueError`: If the message contains underline, strikethrough, spoiler or nested
                entities.

        Trw  r  r   r   r   r   caption_markdown_urled  s    zMessage.caption_markdown_urledc                 C   s   | j | j|  dddS )a  Creates an Markdown-formatted string from the markup entities found in the message's
        caption using :class:`telegram.constants.ParseMode.MARKDOWN_V2`.

        Use this if you want to retrieve the message caption with the caption entities formatted as
        Markdown. This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.

        .. versionchanged:: 13.10
           Spoiler entities are now formatted as Markdown V2.

        .. versionchanged:: 20.3
           Custom emoji entities are now supported.

        Returns:
            :obj:`str`: Message caption with caption entities formatted as Markdown.
        Tr;  r  r  r   r   r   r   caption_markdown_v2_urled  s       z!Message.caption_markdown_v2_urled)DNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)N)N)N)NNNNNN)N)NN)N)NN)N)N)Fr   )Fr~  r   )__name__
__module____qualname____doc__	__slots__r  datetimer
   r)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r#   r   r!   r$   r   r   r%   r8   r5   r6   r   r7   r9   r   r   r   r   r   r   r:   r'   r&   r1   r   propertyr   r   r   r   classmethodr   r	   r   r   r-   r2   r/   r3   floatr   r   r   r   r   r   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr  r  r  r  r  r  r  r"  r#  r$  r)  r*  r-  r.  r/  r0  r3  r5  r6  r7  r8  r    rA  rB  r   r   rI  rJ  staticmethodr`  ry  rz  r|  r}  r  r  r  r  r  r  r  r  r  __classcell__r   r   r   r   rH   Y   s,     yP                                                                    J ) Q@:C?A=
>
F
B
I
6
J
?
>?C=I
4 %
;
h
5
;
C
2
2 
- 
*      	
6 
,  

1
*! $$!  )%%%"   
`   
 rH   )qr  r  htmlr   typingr   r   r   r   r   r   r	   Ztelegram._chatr
   Ztelegram._dicer   Ztelegram._files.animationr   Ztelegram._files.audior   Ztelegram._files.contactr   Ztelegram._files.documentr   Ztelegram._files.locationr   Ztelegram._files.photosizer   Ztelegram._files.stickerr   Ztelegram._files.venuer   Ztelegram._files.videor   Ztelegram._files.videonoter   Ztelegram._files.voicer   Ztelegram._forumtopicr   r   r   r   r   r   Ztelegram._games.gamer   Z%telegram._inline.inlinekeyboardmarkupr   Z'telegram._messageautodeletetimerchangedr   Ztelegram._messageentityr    Ztelegram._passport.passportdatar!   Ztelegram._payment.invoicer"   Z#telegram._payment.successfulpaymentr#   Ztelegram._pollr$   Z!telegram._proximityalerttriggeredr%   Ztelegram._sharedr&   r'   Ztelegram._telegramobjectr(   Ztelegram._userr)   Ztelegram._utils.argumentparsingr*   Ztelegram._utils.datetimer+   r,   Ztelegram._utils.defaultvaluer-   r.   Ztelegram._utils.typesr/   r0   r1   r2   r3   Ztelegram._utils.warningsr4   Ztelegram._videochatr5   r6   r7   r8   Ztelegram._webappdatar9   Ztelegram._writeaccessallowedr:   Ztelegram.constantsr;   r<   Ztelegram.helpersr=   Ztelegram.warningsr>   Ztelegramr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   r   r   r   <module>   sV   $ ,