U
    g                    @   sz  d 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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  ddl!m"Z" ddl!m#Z$ ddl!m%Z& erVddlm'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA G dd deZBG dd deBZCdS )z?This module contains an object that represents a Telegram Chat.    )datetime)escape)TYPE_CHECKINGFinalOptionalSequenceTupleUnion)	constants)ChatPermissions)
ForumTopic)
MenuButton)ReactionType)TelegramObject)enum)DEFAULT_NONE)CorrectOptionID	FileInputJSONDictODVInputReplyMarkup)escape_markdown)mention_html)mention_markdown)	AnimationAudioChatInviteLink
ChatMemberContactDocumentInlineKeyboardMarkupInputMediaAudioInputMediaDocumentInputMediaPhotoInputMediaVideoInputPaidMediaInputPollOptionLabeledPriceLinkPreviewOptionsLocationMessageMessageEntity	MessageId	PhotoSizeReplyParametersStickerUserChatBoostsVenueVideo	VideoNoteVoicec                &       sp  e Zd ZU dZdZd
ddeeee ee ee ee ee ee	 d fddZ
ejjZee ed< ejjZee ed	< ejjZee ed
< ejjZee ed< ejjZee ed< eee dddZeee dddZeee dddZdee edddZdee edddZdee edddZeeeeddee ee ee ee ee	 edddZeeeeddee ee ee ee ee	 ed dd d!Z eeeeddee ee ee ee ee	 edd"d#Z!eeeeddeee ee ee ee ee	 d$d%d&d'Z"deeeeddeee ee#ee$f  ee ee ee ee ee	 ed(	d)d*Z%eeeeddeee ee ee ee ee	 ed+d,d-Z&eeeedde#eef ee ee ee ee ee	 ed.d/d0Z'eeeeddeee ee ee ee ee	 ed+d1d2Z(eeeedde#eef ee ee ee ee ee	 ed.d3d4Z)deeeeddeee ee ee ee ee ee	 ed5d6d7Z*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e ee ee ee ee ee ee ee ee ee ee	 ed8d9d:Z+deeeeddee,ee#ee$f  ee ee ee ee ee ee	 ed;
d<d=Z-deeeedde,ee ee ee ee ee ee	 ed>d?d@Z.eeeeddeeee ee ee ee ee	 edAdBdCZ/eeeedde0ee ee ee ee ee	 edDdEdFZ1eeeeddee ee ee ee ee	 eddGdHZ2eeeeddeee ee ee ee ee	 edIdJdKZ3deeeeddee ee ee ee ee ee	 edLdMdNZ4edfeeeeddeee ee ee ee ee ee ee	 edO	dPdQZ5deeeeddee ee ee ee ee ee ee	 edRdSdTZ6eeeeddee ee ee ee ee	 eddUdVZ7eeddededddf
dedeeeeddWeee ee ee8 ee9dX  ee ee edY edZ ee ee ee ee ee ee ee ee ee ee	 d[d\d]d^Z:eeeeddeee ee ee ee ee	 ed_d`daZ;eeeedde9e ee ee ee ee ee	 edbdcddZ<eeddddfdeeeeeddedde
e9e#df  ee ee ee edZ ee ee ee ee ee ee ee ee ee	 ee ee ee9dX  edg dhdidjZ=deeeeddeee ee ee ee ee ee ee	 edk	dldmZ>e>Z?dedededdddddfdedeeeeddne#e0dof ee ee ee8 ee ee9dX  ee ee ee edZ ee ee ee ee ee ee ee ee ee ee ee	 d[dpdqdrZ@dddeddeddddfdedeeeeddsee ee ee ee ee8 ee ee ee edZ ee ee ee ee edt ee ee ee ee ee	 d[dudvdwZAddddedededddddfdedeeeeddne#e0dxf ee ee ee ee ee ee8 ee ee9dX  ee ee ee0 edZ ee ee ee ee ee ee ee ee ee ee	 d[dydzd{ZBdededdedddddfdedeeeeddne#e0d|f ee ee ee8 ee ee ee9dX  ee ee ee0 edZ ee ee ee ee ee ee ee ee ee ee	 d[d}d~dZCeddeddddfdeeeeeddee ee8 ee ee ee edZ ee ee ee ee ee ee ee ee ee	 d[dddZDededdddfdeeeeeddeee ed ee ee edZ ee ee ee ee ee ee ee ee ee	 d[dddZEddddddddddeddddddedddfdeeeeeddeeeee ee9d 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eFf  ee ee ee ee9e  ee ee edZ ee ee ee ee ee ee ee ee	 d[d#ddZGddedddddeddddfdedeeeeddee ee ee ee8 ee ee ee ee ee ee edZ ee ee ee ee ed ee ee ee ee ee	 d[dddZHddddeeddedddddddfdedeeeeddne#e0df ee ee ee ee ee ee ee8 ee9dX  ee ee ee ee0 edZ ee ee ee ee ee ee ee ee ee ee ee	 d[dddZIededddddfdeeeeedde#e0df ee ee8 ee ee ee edZ ee ee ee ee ee ee ee ee ee	 d[dddZJdddddeddddeddddfdedeeeeddee ee ee ee ee ee ee8 ee ee ee ee ee edZ ee ee ee ee ed ee ee ee ee ee	 d[dddZKddedddeddedddddddfdedeeeeddne#e0df ee ee ee ee8 ee ee ee ee ee9dX  ee ee ee ee0 edZ ee ee ee ee ee ee ee ee ee ee ee	 d[dddZLddededddddf
dedeeeeddne#e0df ee ee ee ee8 ee ee ee0 edZ ee ee ee ee ee ee ee ee ee ee	 d[dddZMddedededdddfdedeeeeddne#e0df ee ee ee ee8 ee ee9dX  ee ee edZ ee ee ee ee ee ee ee ee ee ee	 d[dddZNdddddeddedddedddeddfdeeeeeddee9e#edf  ee ee ee eeO ee ee ee8 ee ee ee ee#ee$f  ee9dX  ee ee edZ ee ee ee9dX  ee ee ee ee ee ee ee ee	 d[dddZPdedededddf	deeeeedde#eef eee ee ee9dX  ee ee8 ee ee edZ ee ee ee ee ee ee ee ee	 ddddZQdedededddf	deeeeedde#eef eee ee ee9dX  ee ee8 ee ee edZ ee ee ee ee ee ee ee ee	 ddddZReeddfeeeedde#eef e9e ee ee ee ee ee ee ee ee ee	 ed dddZSeeddfeeeedde#eef e9e ee ee ee ee ee ee ee ee ee	 ed dddZTeedfeeeedde#eef eee ee ee ee ee ee ee ee	 d[dddZUeedfeeeedde#eef eee ee ee ee ee ee ee ee	 d[dddZVeedfeeeedde#eef e9e ee ee ee ee ee ee ee ee	 ed dddĄZWeedfeeeedde#eef e9e ee ee ee ee ee ee ee ee	 ed dŜddǄZXeeeeddee ee ee ee ee	 edddɄZYdeeeeddee#ee$f  ee ee ee ee ee ee ee ee	 dd˜
dd̈́ZZdeeeedde#edf ee#ee$f  ee ee ee ee ee ee ee ee	 ddΜddЄZ[eeeedde#edf ee ee ee ee ee	 ddќddӄZ\deeeeddeeee ee ee ee ee ee	 ddԜ	ddքZ]deeeedde#edf ee ee ee ee ee ee	 ddלddلZ^eeeeddeee ee ee ee ee	 ed%ddۄZ_eeeeddeee ee ee ee ee	 ed%dd݄Z`deeeeddeea ee ee ee ee ee	 edޜddZbdeeeeddeee ee ee ee ee ee ee	 ecd	ddZddeeeeddeee ee ee ee ee ee ee	 ed	ddZee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e	 edddZgeeeeddee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e	 edddZieeeeddee ee ee ee ee	 edddZjeeeeddeee ee ee ee ee	 edddZkeeeeddee ee ee ee ee	 edddZleeeeddee ee ee ee ee	 edddZmeeeeddee ee ee ee ee	 edddZneeeeddee ee ee ee ee	 edddZoeeeeddee ee ee ee ee	 eadddZpeeeeddeee ee ee ee ee	 dd%d dZqdeeeeddeee#e9e#eref  eref  ee ee ee ee ee ee	 ed	ddZsdeddeeddddf
edeeeeddee9d ee ee ee9dX  ee ee ee edZ ee8 ee ee ee ee ee ee ee ee ee	 d[ddd	Zt  ZuS (  	_ChatBasezjBase class for :class:`telegram.Chat` and :class:`telegram.ChatFullInfo`.

    .. versionadded:: 21.3
    )
first_nameidis_forum	last_nametitletypeusernameN
api_kwargs)r7   r;   r:   r<   r6   r9   r8   r>   c          	         sZ   t  j|d || _ttj||| _|| _|| _	|| _
|| _|| _| jf| _|   d S )Nr=   )super__init__r7   r   
get_memberr
   ChatTyper;   r:   r<   r6   r9   r8   Z	_id_attrsZ_freeze)	selfr7   r;   r:   r<   r6   r9   r8   r>   	__class__ 2/tmp/pip-unpacked-wheel-swnnwir2/telegram/_chat.pyr@   N   s    
z_ChatBase.__init__SENDERPRIVATEGROUP
SUPERGROUPCHANNEL)returnc                 C   s$   | j dk	r| j S | jdk	r | jS dS )z
        :obj:`str`: Convenience property. Gives :attr:`~Chat.title` if not :obj:`None`,
        else :attr:`~Chat.full_name` if not :obj:`None`.

        .. versionadded:: 20.1
        N)r:   	full_namerC   rF   rF   rG   effective_namew   s
    

z_ChatBase.effective_namec                 C   s(   | j s
dS | jr"| j  d| j S | j S )a]  
        :obj:`str`: Convenience property. If :attr:`~Chat.first_name` is not :obj:`None`, gives
        :attr:`~Chat.first_name` followed by (if available) :attr:`~Chat.last_name`.

        Note:
            :attr:`full_name` will always be :obj:`None`, if the chat is a (super)group or
            channel.

        .. versionadded:: 13.2
        N )r6   r9   rO   rF   rF   rG   rN      s
    z_ChatBase.full_namec                 C   s   | j rd| j  S dS )z}:obj:`str`: Convenience property. If the chat has a :attr:`~Chat.username`, returns a
        t.me link of the chat.
        zhttps://t.me/N)r<   rO   rF   rF   rG   link   s    z_ChatBase.link)namerM   c                 C   s   | j | jkr8|rt| j|S | jr0t| j| jS td| jrz|rVd| d| j dS | jrrd| j d| j dS tdtddS )a  
        Note:
            :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
            Telegram for backward compatibility. You should use :meth:`mention_markdown_v2`
            instead.

        .. versionadded:: 20.0

        Args:
            name (:obj:`str`): The name used as a link for the chat. Defaults to
                :attr:`~Chat.full_name`.

        Returns:
            :obj:`str`: The inline mention for the chat as markdown (version 1).

        Raises:
            :exc:`TypeError`: If the chat is a private chat and neither the :paramref:`name`
                nor the :attr:`~Chat.first_name` is set, then throw an :exc:`TypeError`.
                If the chat is a public chat and neither the :paramref:`name` nor the
                :attr:`~Chat.title` is set, then throw an :exc:`TypeError`. If chat is a
                private group chat, then throw an :exc:`TypeError`.

        =Can not create a mention to a private chat without first name[]()7Can not create a mention to a public chat without title0Can not create a mention to a private group chatN)	r;   rI   helpers_mention_markdownr7   rN   	TypeErrorr<   rR   r:   rC   rS   rF   rF   rG   r      s    z_ChatBase.mention_markdownc                 C   s   | j | jkr@|r t| j|ddS | jr8t| j| jddS td| jr|rfdt|dd d| j dS | j	rdt| j	dd d| j dS tdtdd	S )
a  
        .. versionadded:: 20.0

        Args:
            name (:obj:`str`): The name used as a link for the chat. Defaults to
                :attr:`~Chat.full_name`.

        Returns:
            :obj:`str`: The inline mention for the chat as markdown (version 2).

        Raises:
            :exc:`TypeError`: If the chat is a private chat and neither the :paramref:`name`
                nor the :attr:`~Chat.first_name` is set, then throw an :exc:`TypeError`.
                If the chat is a public chat and neither the :paramref:`name` nor the
                :attr:`~Chat.title` is set, then throw an :exc:`TypeError`. If chat is a
                private group chat, then throw an :exc:`TypeError`.

           )versionrT   rU   rV   rW   rX   rY   N)
r;   rI   rZ   r7   rN   r[   r<   r   rR   r:   r\   rF   rF   rG   mention_markdown_v2   s    z_ChatBase.mention_markdown_v2c                 C   s   | j | jkr8|rt| j|S | jr0t| j| jS td| jr|rZd| j dt| dS | j	rzd| j dt| j	 dS tdtddS )a  
        .. versionadded:: 20.0

        Args:
            name (:obj:`str`): The name used as a link for the chat. Defaults to :attr:`full_name`.

        Returns:
            :obj:`str`: The inline mention for the chat as HTML.

        Raises:
            :exc:`TypeError`: If the chat is a private chat and neither the :paramref:`name`
                nor the :attr:`~Chat.first_name` is set, then throw an :exc:`TypeError`.
                If the chat is a public chat and neither the :paramref:`name` nor the
                :attr:`~Chat.title` is set, then throw an :exc:`TypeError`.
                If chat is a private group chat, then throw an :exc:`TypeError`.

        rT   z	<a href="z">z</a>rX   rY   N)
r;   rI   helpers_mention_htmlr7   rN   r[   r<   rR   r   r:   r\   rF   rF   rG   r      s    z_ChatBase.mention_html)read_timeoutwrite_timeoutconnect_timeoutpool_timeoutr>   )ra   rb   rc   rd   r>   rM   c                   s"   |   j| j|||||dI dH S )a  Shortcut for::

             await bot.leave_chat(update.effective_chat.id, *args, **kwargs)

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

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

        chat_idra   rb   rc   rd   r>   N)get_botZ
leave_chatr7   rC   ra   rb   rc   rd   r>   rF   rF   rG   leave  s    z_ChatBase.leave)r   .c                   s"   |   j| j|||||dI dH S )a]  Shortcut for::

             await bot.get_chat_administrators(update.effective_chat.id, *args, **kwargs)

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

        Returns:
            Tuple[:class:`telegram.ChatMember`]: A tuple of administrators in a chat. An Array of
            :class:`telegram.ChatMember` objects that contains information about all
            chat administrators except other bots. If the chat is a group or a supergroup
            and no administrators were appointed, only the creator will be returned.

        re   N)rg   Zget_chat_administratorsr7   rh   rF   rF   rG   get_administrators#  s    z_ChatBase.get_administratorsc                   s"   |   j| j|||||dI dH S )a	  Shortcut for::

             await bot.get_chat_member_count(update.effective_chat.id, *args, **kwargs)

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

        Returns:
            :obj:`int`
        re   N)rg   Zget_chat_member_countr7   rh   rF   rF   rG   get_member_countC  s    z_ChatBase.get_member_countr   )user_idra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )a  Shortcut for::

             await bot.get_chat_member(update.effective_chat.id, *args, **kwargs)

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

        Returns:
            :class:`telegram.ChatMember`

        rf   rl   ra   rb   rc   rd   r>   N)rg   Zget_chat_memberr7   rC   rl   ra   rb   rc   rd   r>   rF   rF   rG   rA   _  s    z_ChatBase.get_member)	rl   revoke_messages
until_datera   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )a$  Shortcut for::

             await bot.ban_chat_member(update.effective_chat.id, *args, **kwargs)

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

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        )	rf   rl   ra   rb   rc   rd   rp   r>   ro   N)rg   Zban_chat_memberr7   )	rC   rl   ro   rp   ra   rb   rc   rd   r>   rF   rF   rG   
ban_member}  s    z_ChatBase.ban_member)sender_chat_idra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )aW  Shortcut for::

             await bot.ban_chat_sender_chat(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.9

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

        rf   rr   ra   rb   rc   rd   r>   Nrg   Zban_chat_sender_chatr7   rC   rr   ra   rb   rc   rd   r>   rF   rF   rG   ban_sender_chat  s    z_ChatBase.ban_sender_chat)rf   ra   rb   rc   rd   r>   rM   c             	      s$   |   j|| j|||||dI dH S )a~  Shortcut for::

             await bot.ban_chat_sender_chat(
                 sender_chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 13.9

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

        rs   Nrt   rC   rf   ra   rb   rc   rd   r>   rF   rF   rG   ban_chat  s    z_ChatBase.ban_chatc             	      s$   |   j| j||||||dI dH S )a[  Shortcut for::

             await bot.unban_chat_sender_chat(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.9

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

        rs   Nrg   Zunban_chat_sender_chatr7   ru   rF   rF   rG   unban_sender_chat  s    z_ChatBase.unban_sender_chatc             	      s$   |   j|| j|||||dI dH S )a  Shortcut for::

             await bot.unban_chat_sender_chat(
                 sender_chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 13.9

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

        rs   Nry   rw   rF   rF   rG   
unban_chat  s    z_ChatBase.unban_chat)rl   only_if_bannedra   rb   rc   rd   r>   rM   c             
      s&   |   j| j|||||||dI dH S )a!  Shortcut for::

             await bot.unban_chat_member(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   rl   ra   rb   rc   rd   r>   r|   N)rg   Zunban_chat_memberr7   )rC   rl   r|   ra   rb   rc   rd   r>   rF   rF   rG   unban_member'  s    z_ChatBase.unban_member)rl   can_change_infocan_post_messagescan_edit_messagescan_delete_messagescan_invite_userscan_restrict_memberscan_pin_messagescan_promote_membersis_anonymouscan_manage_chatcan_manage_video_chatscan_manage_topicscan_post_storiescan_edit_storiescan_delete_storiesra   rb   rc   rd   r>   rM   c                   sB   |   j| j|||||||||	||||||
||||||dI dH S )a  Shortcut for::

             await bot.promote_chat_member(update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.2
        .. versionchanged:: 20.0
           The argument ``can_manage_voice_chats`` was renamed to
           :paramref:`~telegram.Bot.promote_chat_member.can_manage_video_chats` in accordance to
           Bot API 6.0.
        .. versionchanged:: 20.6
           The arguments `can_post_stories`, `can_edit_stories` and `can_delete_stories` were
           added.

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

        )rf   rl   r~   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   r   r   N)rg   Zpromote_chat_memberr7   )rC   rl   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   promote_memberG  s0    -z_ChatBase.promote_member)
rl   permissionsrp    use_independent_chat_permissionsra   rb   rc   rd   r>   rM   c          
         s*   |   j| j|||||||||	d
I dH S )a  Shortcut for::

             await bot.restrict_chat_member(update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.2

        .. versionadded:: 20.1
            Added :paramref:`~telegram.Bot.restrict_chat_member.use_independent_chat_permissions`.

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

        )
rf   rl   r   rp   r   ra   rb   rc   rd   r>   N)rg   Zrestrict_chat_memberr7   )
rC   rl   r   rp   r   ra   rb   rc   rd   r>   rF   rF   rG   restrict_member  s    z_ChatBase.restrict_member)r   r   ra   rb   rc   rd   r>   rM   c             
      s&   |   j| j|||||||dI dH S )a  Shortcut for::

             await bot.set_chat_permissions(update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.1
            Added :paramref:`~telegram.Bot.set_chat_permissions.use_independent_chat_permissions`.

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

        )rf   r   r   ra   rb   rc   rd   r>   N)rg   Zset_chat_permissionsr7   )rC   r   r   ra   rb   rc   rd   r>   rF   rF   rG   set_permissions  s    z_ChatBase.set_permissions)rl   custom_titlera   rb   rc   rd   r>   rM   c             
      s&   |   j| j|||||||dI dH S )am  Shortcut for::

             await bot.set_chat_administrator_custom_title(
                 update.effective_chat.id, *args, **kwargs
             )

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

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

        )rf   rl   r   ra   rb   rc   rd   r>   N)rg   Z#set_chat_administrator_custom_titler7   )rC   rl   r   ra   rb   rc   rd   r>   rF   rF   rG   set_administrator_custom_title  s    z(_ChatBase.set_administrator_custom_title)photora   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )ak  Shortcut for::

             await bot.set_chat_photo(
                 chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

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

        )rf   r   ra   rb   rc   rd   r>   N)rg   Zset_chat_photor7   )rC   r   ra   rb   rc   rd   r>   rF   rF   rG   	set_photo  s    z_ChatBase.set_photoc                   s"   |   j| j|||||dI dH S )aq  Shortcut for::

             await bot.delete_chat_photo(
                 chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

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

        re   N)rg   Zdelete_chat_photor7   rh   rF   rF   rG   delete_photo!  s    z_ChatBase.delete_photo)r:   ra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )ak  Shortcut for::

             await bot.set_chat_title(
                 chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

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

        )rf   r:   ra   rb   rc   rd   r>   N)rg   Zset_chat_titler7   )rC   r:   ra   rb   rc   rd   r>   rF   rF   rG   	set_titleB  s    z_ChatBase.set_title)descriptionra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )aw  Shortcut for::

             await bot.set_chat_description(
                 chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

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

        )rf   r   ra   rb   rc   rd   r>   N)rg   Zset_chat_descriptionr7   )rC   r   ra   rb   rc   rd   r>   rF   rF   rG   set_descriptione  s    z_ChatBase.set_description)	
message_iddisable_notificationbusiness_connection_idra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )a0  Shortcut for::

              await bot.pin_chat_message(chat_id=update.effective_chat.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.

        )	rf   r   r   ra   rb   rc   rd   r>   r   N)rg   Zpin_chat_messager7   )	rC   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   pin_message  s    z_ChatBase.pin_message)r   r   ra   rb   rc   rd   r>   rM   c             
      s&   |   j| j|||||||dI dH S )a4  Shortcut for::

              await bot.unpin_chat_message(chat_id=update.effective_chat.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.

        )rf   ra   rb   rc   rd   r>   r   r   N)rg   Zunpin_chat_messager7   )rC   r   r   ra   rb   rc   rd   r>   rF   rF   rG   unpin_message  s    z_ChatBase.unpin_messagec                   s"   |   j| j|||||dI dH S )a>  Shortcut for::

              await bot.unpin_all_chat_messages(chat_id=update.effective_chat.id, *args, **kwargs)

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

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

        re   N)rg   Zunpin_all_chat_messagesr7   rh   rF   rF   rG   unpin_all_messages  s    z_ChatBase.unpin_all_messages)reply_to_message_idallow_sending_without_replydisable_web_page_previewra   rb   rc   rd   r>   r+   r(   r.   r*   )text
parse_moder   reply_markupentitiesprotect_contentmessage_thread_idlink_preview_optionsreply_parametersr   message_effect_idr   r   r   ra   rb   rc   rd   r>   rM   c                   s>   |   j| j|||||||	|||||||||||
|dI dH S )a6  Shortcut for::

             await bot.send_message(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   N)rg   send_messager7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s,    !z_ChatBase.send_message)r   ra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )a;  Shortcut for::

             await bot.delete_message(update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.8

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

        )rf   r   ra   rb   rc   rd   r>   N)rg   delete_messager7   )rC   r   ra   rb   rc   rd   r>   rF   rF   rG   r   !  s    z_ChatBase.delete_message)message_idsra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )a=  Shortcut for::

             await bot.delete_messages(update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.8

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

        )rf   r   ra   rb   rc   rd   r>   N)rg   delete_messagesr7   )rC   r   ra   rb   rc   rd   r>   rF   rF   rG   r   A  s    z_ChatBase.delete_messages)
r   r   ra   rb   rc   rd   r>   captionr   caption_entities)r!   r"   r#   r$   )r*   .)mediar   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   rM   c       
            s:   |   j| j||||
|||||	||||||||dI dH S )as  Shortcut for::

             await bot.send_media_group(update.effective_chat.id, *args, **kwargs)

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

        Returns:
            Tuple[:class:`telegram.Message`]: On success, a tuple of :class:`~telegram.Message`
            instances that were sent is returned.

        )rf   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   r   r   r   r   N)rg   send_media_groupr7   )rC   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   rF   rF   rG   r   a  s(    "z_ChatBase.send_media_group)	actionr   r   ra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )a  Shortcut for::

             await bot.send_chat_action(update.effective_chat.id, *args, **kwargs)

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

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

        )	rf   r   r   ra   rb   rc   rd   r>   r   N)rg   send_chat_actionr7   )	rC   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s    z_ChatBase.send_chat_action)r   r   filenamera   rb   rc   rd   r>   r-   )r   r   r   r   r   r   r   r   has_spoilerr   r   r   show_caption_above_mediar   r   r   ra   rb   rc   rd   r>   rM   c                   sB   |   j| j|||||
|||||||||||||	|||dI dH S )a2  Shortcut for::

             await bot.send_photo(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   N)rg   
send_photor7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s0    #z_ChatBase.send_photo)r   r   contactra   rb   rc   rd   r>   r   )phone_numberr6   r9   r   r   vcardr   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s>   |   j| j||||||	||||||||||||
|dI dH S )a6  Shortcut for::

             await bot.send_contact(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r6   r9   r   r   r   r   ra   rb   rc   rd   r   r   r>   r   r   r   r   r   N)rg   send_contactr7   )rC   r   r6   r9   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s,    !z_ChatBase.send_contactr   )audioduration	performerr:   r   r   r   r   r   r   r   	thumbnailr   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sF   |   j| j||||||||||||	||
|||||||||dI dH S )a2  Shortcut for::

             await bot.send_audio(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   N)rg   
send_audior7   )rC   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r   1  s4    %z_ChatBase.send_audior   )documentr   r   r   r   disable_content_type_detectionr   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sB   |   j| j|||||||||||||
||||||	||dI dH S )a8  Shortcut for::

             await bot.send_document(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   ra   rb   rc   rd   r   r   r>   r   r   r   r   r   r   r   N)rg   send_documentr7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r   q  s0    #z_ChatBase.send_document)r   r   ra   rb   rc   rd   r>   )r   r   emojir   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c	                   s6   |   j| j||	|||||||||
||||dI dH S )a0  Shortcut for::

             await bot.send_dice(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   ra   rb   rc   rd   r   r>   r   r   r   r   r   N)rg   	send_dicer7   )rC   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s$    z_ChatBase.send_dicer    )game_short_namer   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c	                   s6   |   j| j|||	||||||||
||||dI dH S )a0  Shortcut for::

             await bot.send_game(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   N)rg   	send_gamer7   )rC   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s$    z_ChatBase.send_gamer'   )#r:   r   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   provider_datasend_phone_number_to_providersend_email_to_providermax_tip_amountsuggested_tip_amountsr   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c          #   %      s\   |   j| j|||||||||	|
||||||||||||||| |!|"|||||||d#I dH S )a  Shortcut for::

             await bot.send_invoice(update.effective_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.

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

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

        )#rf   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   r   r   N)rg   send_invoicer7   )#rC   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     sJ    :z_ChatBase.send_invoice)r   r   locationra   rb   rc   rd   r>   r)   )latitude	longituder   r   live_periodhorizontal_accuracyheadingproximity_alert_radiusr   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sB   |   j| j||||||||||||||||||	|
||dI dH S )a8  Shortcut for::

             await bot.send_location(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   ra   rb   rc   rd   r   r   r>   r   r   r   r   r   r   r   r   N)rg   send_locationr7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r   m  s0    #z_ChatBase.send_locationr   )	animationr   widthheightr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sJ   |   j| j|||||||||||||||||	||
||||||dI dH S )a:  Shortcut for::

             await bot.send_animation(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   r   r   r   r   r   N)rg   send_animationr7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s8    'z_ChatBase.send_animationr/   )stickerr   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c
                   s8   |   j| j|||
|||||||||||||	dI dH S )a6  Shortcut for::

             await bot.send_sticker(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   r   r   r   N)rg   send_stickerr7   )rC   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s&    z_ChatBase.send_sticker)r   r   venuera   rb   rc   rd   r>   r1   )r   r   r:   addressfoursquare_idr   r   foursquare_typegoogle_place_idgoogle_place_typer   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sF   |   j| j|||||||||||||||||	|
|||||dI dH S )a2  Shortcut for::

             await bot.send_venue(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r:   r   r   r   r   r   r   ra   rb   rc   rd   r   r   r>   r   r   r   r   r   r   r   N)rg   
send_venuer7   )rC   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s4    %z_ChatBase.send_venuer2   )videor   r   r   r   r   r   r   supports_streamingr   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   sL   |   j| j|||||||||||||||	||||
|||||||dI dH S )a2  Shortcut for::

             await bot.send_video(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   ra   rb   rc   rd   r   r   r   r   r   r>   r   r   r   r   r   r   r   r   r   N)rg   
send_videor7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r   _  s:    (z_ChatBase.send_videor3   )
video_noter   lengthr   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s>   |   j| j||||||	||||||||||||
|dI dH S )a<  Shortcut for::

             await bot.send_video_note(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   ra   rb   rc   rd   r   r>   r   r   r   r   r   r   N)rg   send_video_noter7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s,    !z_ChatBase.send_video_noter4   )voicer   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s@   |   j| j||||||
||||||||||||	||dI dH S )a2  Shortcut for::

             await bot.send_voice(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r   r   r   r   ra   rb   rc   rd   r   r>   r   r   r   r   r   r   r   N)rg   
send_voicer7   )rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r     s.    "z_ChatBase.send_voicer&   )questionoptionsr   r;   allows_multiple_answerscorrect_option_id	is_closedr   r   explanationexplanation_parse_modeopen_period
close_dateexplanation_entitiesr   r   r   r   question_parse_modequestion_entitiesr   r   r   ra   rb   rc   rd   r>   rM   c                   sP   |   j| j|||||||||||	||||||
|||||||||||dI dH S )a0  Shortcut for::

             await bot.send_poll(update.effective_chat.id, *args, **kwargs)

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

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

        )rf   r   r   r   r;   r   r   r   r   r   r   r   ra   rb   rc   rd   r   r   r  r  r  r>   r   r  r   r   r   r  r  N)rg   	send_pollr7   )rC   r   r   r   r;   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r  r  r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r    s>    *z_ChatBase.send_pollr,   )from_chat_idr   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s<   |   j| j||||||||
|||||||||	|dI dH S )a  Shortcut for::

             await bot.copy_message(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`copy_message`, :meth:`send_copies`, :meth:`copy_messages`.

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

        )rf   r  r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   Nrg   copy_messager7   )rC   r  r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   	send_copya  s*    "z_ChatBase.send_copy)rf   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s<   |   j| j||||||||
|||||||||	|dI dH S )a  Shortcut for::

             await bot.copy_message(from_chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`send_copy`, :meth:`send_copies`, :meth:`copy_messages`.

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

        )r  rf   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   r   Nr	  )rC   rf   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r
    s*    "z_ChatBase.copy_message)r,   .)r  r   r   r   r   remove_captionra   rb   rc   rd   r>   rM   c                   s.   |   j| j|||||||||	|
|dI dH S )a  Shortcut for::

             await bot.copy_messages(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`copy_message`, :meth:`send_copy`, :meth:`copy_messages`.

        .. versionadded:: 20.8

        Returns:
            Tuple[:class:`telegram.MessageId`]: On success, a tuple of :class:`~telegram.MessageId`
            of the sent messages is returned.

        )rf   r  r   r   r   r   r  ra   rb   rc   rd   r>   Nrg   copy_messagesr7   )rC   r  r   r   r   r   r  ra   rb   rc   rd   r>   rF   rF   rG   send_copies  s    z_ChatBase.send_copies)rf   r   r   r   r   r  ra   rb   rc   rd   r>   rM   c                   s.   |   j| j|||||||||	|
|dI dH S )a  Shortcut for::

             await bot.copy_messages(from_chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`copy_message`, :meth:`send_copy`, :meth:`send_copies`.

        .. versionadded:: 20.8

        Returns:
            Tuple[:class:`telegram.MessageId`]: On success, a tuple of :class:`~telegram.MessageId`
            of the sent messages is returned.

        )r  rf   r   r   r   r   r  ra   rb   rc   rd   r>   Nr  )rC   rf   r   r   r   r   r  ra   rb   rc   rd   r>   rF   rF   rG   r    s    z_ChatBase.copy_messages)r  r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s,   |   j| j|||||||	|
||dI dH S )a  Shortcut for::

             await bot.forward_message(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`forward_to`, :meth:`forward_messages_from`, :meth:`forward_messages_to`

        .. versionadded:: 20.0

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

        )rf   r  r   r   ra   rb   rc   rd   r>   r   r   Nrg   Zforward_messager7   )rC   r  r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   forward_from+	  s    z_ChatBase.forward_from)rf   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s,   |   j| j|||||||	|
||dI dH S )a  Shortcut for::

             await bot.forward_message(from_chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`forward_from`, :meth:`forward_messages_from`,
            :meth:`forward_messages_to`

        .. versionadded:: 20.0

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

        )r  rf   r   r   ra   rb   rc   rd   r>   r   r   Nr  )rC   rf   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   
forward_toU	  s    z_ChatBase.forward_to)r  r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s,   |   j| j|||||||||	|
dI dH S )a  Shortcut for::

             await bot.forward_messages(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`forward_to`, :meth:`forward_from`, :meth:`forward_messages_to`.

        .. versionadded:: 20.8

        Returns:
            Tuple[:class:`telegram.MessageId`]: On success, a tuple of :class:`~telegram.MessageId`
            of sent messages is returned.

        )rf   r  r   r   r   r   ra   rb   rc   rd   r>   Nrg   Zforward_messagesr7   )rC   r  r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   forward_messages_from	  s    z_ChatBase.forward_messages_from)rf   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s,   |   j| j|||||||||	|
dI dH S )a  Shortcut for::

             await bot.forward_messages(from_chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. seealso:: :meth:`forward_from`, :meth:`forward_to`, :meth:`forward_messages_from`.

        .. versionadded:: 20.8

        Returns:
            Tuple[:class:`telegram.MessageId`]: On success, a tuple of :class:`~telegram.MessageId`
            of sent messages is returned.

        )r  rf   r   r   r   r   ra   rb   rc   rd   r>   Nr  )rC   rf   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   forward_messages_to	  s    z_ChatBase.forward_messages_toc                   s"   |   j| j|||||dI dH S )aS  Shortcut for::

             await bot.export_chat_invite_link(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.4

        Returns:
            :obj:`str`: New invite link on success.

        re   N)rg   Zexport_chat_invite_linkr7   rh   rF   rF   rG   export_invite_link	  s    z_ChatBase.export_invite_linkr   )
expire_datemember_limitrS   creates_join_requestra   rb   rc   rd   r>   rM   c          
         s*   |   j| j|||||||	||d
I dH S )a  Shortcut for::

             await bot.create_chat_invite_link(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.4

        .. versionchanged:: 13.8
           Edited signature according to the changes of
           :meth:`telegram.Bot.create_chat_invite_link`.

        Returns:
            :class:`telegram.ChatInviteLink`

        )
rf   r  r  ra   rb   rc   rd   r>   rS   r  N)rg   Zcreate_chat_invite_linkr7   )
rC   r  r  rS   r  ra   rb   rc   rd   r>   rF   rF   rG   create_invite_link	  s    z_ChatBase.create_invite_link)invite_linkr  r  rS   r  ra   rb   rc   rd   r>   rM   c                   s,   |   j| j|||||||	|
||dI dH S )a  Shortcut for::

             await bot.edit_chat_invite_link(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.4

        .. versionchanged:: 13.8
           Edited signature according to the changes of :meth:`telegram.Bot.edit_chat_invite_link`.

        Returns:
            :class:`telegram.ChatInviteLink`

        )rf   r  r  r  ra   rb   rc   rd   r>   rS   r  N)rg   Zedit_chat_invite_linkr7   )rC   r  r  r  rS   r  ra   rb   rc   rd   r>   rF   rF   rG   edit_invite_link 
  s    z_ChatBase.edit_invite_link)r  ra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )aL  Shortcut for::

             await bot.revoke_chat_invite_link(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.4

        Returns:
            :class:`telegram.ChatInviteLink`

        )rf   r  ra   rb   rc   rd   r>   N)rg   Zrevoke_chat_invite_linkr7   )rC   r  ra   rb   rc   rd   r>   rF   rF   rG   revoke_invite_linkL
  s    z_ChatBase.revoke_invite_link)	subscription_periodsubscription_pricerS   ra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )a  Shortcut for::

            await bot.create_chat_subscription_invite_link(
                chat_id=update.effective_chat.id, *args, **kwargs
            )

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

        .. versionadded:: 21.5

        Returns:
            :class:`telegram.ChatInviteLink`
        )	rf   r  r  rS   ra   rb   rc   rd   r>   N)rg   Z$create_chat_subscription_invite_linkr7   )	rC   r  r  rS   ra   rb   rc   rd   r>   rF   rF   rG   create_subscription_invite_linkm
  s    z)_ChatBase.create_subscription_invite_link)r  rS   ra   rb   rc   rd   r>   rM   c             
      s&   |   j| j|||||||dI dH S )a  Shortcut for::

            await bot.edit_chat_subscription_invite_link(
                chat_id=update.effective_chat.id, *args, **kwargs
            )

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

        .. versionadded:: 21.5

        Returns:
            :class:`telegram.ChatInviteLink`

        )rf   r  ra   rb   rc   rd   r>   rS   N)rg   Z"edit_chat_subscription_invite_linkr7   )rC   r  rS   ra   rb   rc   rd   r>   rF   rF   rG   edit_subscription_invite_link
  s    z'_ChatBase.edit_subscription_invite_linkc             	      s$   |   j| j||||||dI dH S )aa  Shortcut for::

             await bot.approve_chat_join_request(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.8

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

        rm   N)rg   Zapprove_chat_join_requestr7   rn   rF   rF   rG   approve_join_request
  s    z_ChatBase.approve_join_requestc             	      s$   |   j| j||||||dI dH S )aa  Shortcut for::

             await bot.decline_chat_join_request(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 13.8

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

        rm   N)rg   Zdecline_chat_join_requestr7   rn   rF   rF   rG   decline_join_request
  s    z_ChatBase.decline_join_request)menu_buttonra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )a  Shortcut for::

             await bot.set_chat_menu_button(chat_id=update.effective_chat.id, *args, **kwargs)

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

        Caution:
            Can only work, if the chat is a private chat.

        .. seealso:: :meth:`get_menu_button`

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        )rf   r$  ra   rb   rc   rd   r>   N)rg   Zset_chat_menu_buttonr7   )rC   r$  ra   rb   rc   rd   r>   rF   rF   rG   set_menu_button
  s    z_ChatBase.set_menu_button)	rS   
icon_coloricon_custom_emoji_idra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )a=  Shortcut for::

             await bot.create_forum_topic(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.0

        Returns:
            :class:`telegram.ForumTopic`
        )	rf   rS   r&  r'  ra   rb   rc   rd   r>   N)rg   create_forum_topicr7   )	rC   rS   r&  r'  ra   rb   rc   rd   r>   rF   rF   rG   r(    s    z_ChatBase.create_forum_topic)	r   rS   r'  ra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )aN  Shortcut for::

             await bot.edit_forum_topic(chat_id=update.effective_chat.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.
        )	rf   r   rS   r'  ra   rb   rc   rd   r>   N)rg   edit_forum_topicr7   )	rC   r   rS   r'  ra   rb   rc   rd   r>   rF   rF   rG   r)  C  s    z_ChatBase.edit_forum_topic)r   ra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )aP  Shortcut for::

             await bot.close_forum_topic(chat_id=update.effective_chat.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.
        rf   r   ra   rb   rc   rd   r>   N)rg   close_forum_topicr7   rC   r   ra   rb   rc   rd   r>   rF   rF   rG   r+  g  s    z_ChatBase.close_forum_topicc             	      s$   |   j| j||||||dI dH S )aR  Shortcut for::

             await bot.reopen_forum_topic(chat_id=update.effective_chat.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.
        r*  N)rg   reopen_forum_topicr7   r,  rF   rF   rG   r-    s    z_ChatBase.reopen_forum_topicc             	      s$   |   j| j||||||dI dH S )aR  Shortcut for::

             await bot.delete_forum_topic(chat_id=update.effective_chat.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.
        r*  N)rg   delete_forum_topicr7   r,  rF   rF   rG   r.    s    z_ChatBase.delete_forum_topicc             	      s$   |   j| j||||||dI dH S )az  Shortcut for::

             await bot.unpin_all_forum_topic_messages(chat_id=update.effective_chat.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.
        r*  N)rg   unpin_all_forum_topic_messagesr7   r,  rF   rF   rG   r/    s    z(_ChatBase.unpin_all_forum_topic_messagesc                   s"   |   j| j|||||dI dH S )a  Shortcut for::

             await bot.unpin_all_general_forum_topic_messages(chat_id=update.effective_chat.id,
                *args, **kwargs)

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

        .. versionadded:: 20.5

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        re   N)rg   &unpin_all_general_forum_topic_messagesr7   rh   rF   rF   rG   r0    s    z0_ChatBase.unpin_all_general_forum_topic_messages)rS   ra   rb   rc   rd   r>   rM   c             	      s$   |   j| j||||||dI dH S )a}  Shortcut for::

             await bot.edit_general_forum_topic(
                chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        )rf   rS   ra   rb   rc   rd   r>   N)rg   edit_general_forum_topicr7   )rC   rS   ra   rb   rc   rd   r>   rF   rF   rG   r1    s    z"_ChatBase.edit_general_forum_topicc                   s"   |   j| j|||||dI dH S )a`  Shortcut for::

             await bot.close_general_forum_topic(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        re   N)rg   close_general_forum_topicr7   rh   rF   rF   rG   r2  )  s    z#_ChatBase.close_general_forum_topicc                   s"   |   j| j|||||dI dH S )a  Shortcut for::

             await bot.reopen_general_forum_topic(
                chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        re   N)rg   reopen_general_forum_topicr7   rh   rF   rF   rG   r3  G  s    z$_ChatBase.reopen_general_forum_topicc                   s"   |   j| j|||||dI dH S )a^  Shortcut for::

             await bot.hide_general_forum_topic(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        re   N)rg   hide_general_forum_topicr7   rh   rF   rF   rG   r4  g  s    z"_ChatBase.hide_general_forum_topicc                   s"   |   j| j|||||dI dH S )a  Shortcut for::

             await bot.unhide_general_forum_topic (
                chat_id=update.effective_chat.id, *args, **kwargs
             )

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

        .. versionadded:: 20.0

        Returns:
            :obj:`bool`: On success, :obj:`True` is returned.
        re   N)rg   unhide_general_forum_topicr7   rh   rF   rF   rG   r5    s    z$_ChatBase.unhide_general_forum_topicc                   s"   |   j| j|||||dI dH S )a  Shortcut for::

             await bot.get_chat_menu_button(chat_id=update.effective_chat.id, *args, **kwargs)

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

        Caution:
            Can only work, if the chat is a private chat.

        .. seealso:: :meth:`set_menu_button`

        .. versionadded:: 20.0

        Returns:
            :class:`telegram.MenuButton`: On success, the current menu button is returned.
        re   N)rg   Zget_chat_menu_buttonr7   rh   rF   rF   rG   get_menu_button  s    z_ChatBase.get_menu_buttonr0   c             	      s$   |   j| j||||||dI dH S )az  Shortcut for::

             await bot.get_user_chat_boosts(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.8

        Returns:
            :class:`telegram.UserChatBoosts`: On success, returns the boosts applied in the chat.
        )rf   rl   r>   ra   rb   rc   rd   N)rg   get_user_chat_boostsr7   rn   rF   rF   rG   r7    s    z_ChatBase.get_user_chat_boosts)	r   reactionis_bigra   rb   rc   rd   r>   rM   c          	         s(   |   j| j||||||||d	I dH S )aU  Shortcut for::

             await bot.set_message_reaction(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 20.8

        Returns:
            :obj:`bool` On success, :obj:`True` is returned.
        )	rf   r   r8  r9  ra   rb   rc   rd   r>   N)rg   set_message_reactionr7   )	rC   r   r8  r9  ra   rb   rc   rd   r>   rF   rF   rG   r:    s    z_ChatBase.set_message_reaction)r   r   ra   rb   rc   rd   r>   r%   )
star_countr   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rM   c                   s>   |   j| j|||||||||	|
|||||||||dI dH S )ak  Shortcut for::

             await bot.send_paid_media(chat_id=update.effective_chat.id, *args, **kwargs)

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

        .. versionadded:: 21.4

        Returns:
            :class:`telegram.Message`: On success, instance representing the message posted.
        )rf   r;  r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   r   r   N)rg   send_paid_mediar7   )rC   r;  r   r   r   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   rd   r>   rF   rF   rG   r<    s,    #z_ChatBase.send_paid_media)NNNNN)N)N)N)NN)N)NNNNNNNNNNNNNNN)NN)N)N)NN)NN)NNNN)NNNN)N)N)N)NN)NN)NN)v__name__
__module____qualname____doc__	__slots__intstrr   boolr   r@   r
   rB   rH   r   __annotations__rI   rJ   rK   rL   propertyrP   rN   rR   r   r_   r   r   r   floatri   r   rj   rk   rA   r	   r   rq   rv   rx   rz   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsend_actionr   r   r   r   r   r   objectr   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r   r%  r   r(  r)  r+  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r   r:  r<  __classcell__rF   rF   rD   rG   r5   F   sF  
    
&!## ! &%
'%
&#              J -)'&%%&% $ 
<$%
: "

>;

C

>38
b?

G
4C

I
;

>

N

<

<	
1	
1
.
/
/
.!   .   
0
%)
)%#( ' ($$$$#%!#!#'# (
r5   c                   @   s   e Zd ZdZdZdS )ChataN
  This object represents a chat.

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

    .. versionchanged:: 20.0

        * Removed the deprecated methods ``kick_member`` and ``get_members_count``.
        * The following are now keyword-only arguments in Bot methods:
          ``location``, ``filename``, ``contact``, ``{read, write, connect, pool}_timeout``,
          ``api_kwargs``. Use a named argument for those,
          and notice that some positional arguments changed position as a result.

    .. versionchanged:: 20.0
        Removed the attribute ``all_members_are_administrators``. As long as Telegram provides
        this field for backwards compatibility, it is available through
        :attr:`~telegram.TelegramObject.api_kwargs`.

    .. versionchanged:: 21.3
        As per Bot API 7.3, most of the arguments and attributes of this class have now moved to
        :class:`telegram.ChatFullInfo`.

    Args:
        id (:obj:`int`): Unique identifier for this chat.
        type (:obj:`str`): Type of chat, can be either :attr:`PRIVATE`, :attr:`GROUP`,
            :attr:`SUPERGROUP` or :attr:`CHANNEL`.
        title (:obj:`str`, optional): Title, for supergroups, channels and group chats.
        username (:obj:`str`, optional): Username, for private chats, supergroups and channels if
            available.
        first_name (:obj:`str`, optional): First name of the other party in a private chat.
        last_name (:obj:`str`, optional): Last name of the other party in a private chat.
        is_forum (:obj:`bool`, optional): :obj:`True`, if the supergroup chat is a forum
            (has topics_ enabled).

            .. versionadded:: 20.0

    Attributes:
        id (:obj:`int`): Unique identifier for this chat.
        type (:obj:`str`): Type of chat, can be either :attr:`PRIVATE`, :attr:`GROUP`,
            :attr:`SUPERGROUP` or :attr:`CHANNEL`.
        title (:obj:`str`): Optional. Title, for supergroups, channels and group chats.
        username (:obj:`str`): Optional. Username, for private chats, supergroups and channels if
            available.
        first_name (:obj:`str`): Optional. First name of the other party in a private chat.
        last_name (:obj:`str`): Optional. Last name of the other party in a private chat.
        is_forum (:obj:`bool`): Optional. :obj:`True`, if the supergroup chat is a forum
            (has topics_ enabled).

            .. versionadded:: 20.0

    .. _topics: https://telegram.org/blog/topics-in-groups-collectible-usernames#topics-in-groups
    rF   N)r=  r>  r?  r@  rA  rF   rF   rF   rG   rJ  G  s   5rJ  N)Dr@  r   htmlr   typingr   r   r   r   r   r	   Ztelegramr
   Ztelegram._chatpermissionsr   Ztelegram._forumtopicr   Ztelegram._menubuttonr   Ztelegram._reactionr   Ztelegram._telegramobjectr   Ztelegram._utilsr   Ztelegram._utils.defaultvaluer   Ztelegram._utils.typesr   r   r   r   r   Ztelegram.helpersr   r   r`   r   rZ   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   rJ  rF   rF   rF   rG   <module>   sZ    t                          