o
    Zzj¡!  ã                   @   s    d Z ddl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 ddlmZ erFddlmZ G dd„ deƒZdS )zLThis module contains an object that represents a Telegram ChatMemberUpdated.é    N)ÚTYPE_CHECKING)ÚChat)ÚChatInviteLink)Ú
ChatMember)ÚTelegramObject)ÚUser)Úde_json_optional)Úextract_tzinfo_from_defaultsÚfrom_timestamp)ÚJSONDict)ÚBotc                       sÞ   e Zd ZdZdZ			dddœdededejde	d	e	d
e
dB dedB dedB dedB f‡ fdd„Zeddedddd f‡ fdd„ƒZdedeeef fdd„ZdeeeeeB ejB eB eeB ejB eB f f fdd„Z‡  ZS )ÚChatMemberUpdateda^  This object represents changes in the status of a chat member.

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

    .. versionadded:: 13.4

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

    Examples:
        :any:`Chat Member Bot <examples.chatmemberbot>`

    Args:
        chat (:class:`telegram.Chat`): Chat the user belongs to.
        from_user (:class:`telegram.User`): Performer of the action, which resulted in the change.
        date (:class:`datetime.datetime`): Date the change was done in Unix time. Converted to
            :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        old_chat_member (:class:`telegram.ChatMember`): Previous information about the chat member.
        new_chat_member (:class:`telegram.ChatMember`): New information about the chat member.
        invite_link (:class:`telegram.ChatInviteLink`, optional): Chat invite link, which was used
            by the user to join the chat. For joining by invite link events only.
        via_chat_folder_invite_link (:obj:`bool`, optional): :obj:`True`, if the user joined the
            chat via a chat folder invite link

            .. versionadded:: 20.3
        via_join_request (:obj:`bool`, optional): :obj:`True`, if the user joined the chat after
            sending a direct join request without using an invite link and being approved by
            an administrator

            .. versionadded:: 21.2

    Attributes:
        chat (:class:`telegram.Chat`): Chat the user belongs to.
        from_user (:class:`telegram.User`): Performer of the action, which resulted in the change.
        date (:class:`datetime.datetime`): Date the change was done in Unix time. Converted to
            :class:`datetime.datetime`.

            .. versionchanged:: 20.3
                |datetime_localization|
        old_chat_member (:class:`telegram.ChatMember`): Previous information about the chat member.
        new_chat_member (:class:`telegram.ChatMember`): New information about the chat member.
        invite_link (:class:`telegram.ChatInviteLink`): Optional. Chat invite link, which was used
            by the user to join the chat. For joining by invite link events only.
        via_chat_folder_invite_link (:obj:`bool`): Optional. :obj:`True`, if the user joined the
            chat via a chat folder invite link

            .. versionadded:: 20.3
        via_join_request (:obj:`bool`): Optional. :obj:`True`, if the user joined the chat after
            sending a direct join request without using an invite link and being approved
            by an administrator

            .. versionadded:: 21.2

    )ÚchatÚdateÚ	from_userÚinvite_linkÚnew_chat_memberÚold_chat_memberÚvia_chat_folder_invite_linkÚvia_join_requestN©Ú
api_kwargsr   r   r   r   r   r   r   r   r   c	          
         sd   t ƒ j|	d� || _|| _|| _|| _|| _|| _|| _|| _	| j| j| j| j| jf| _
|  ¡  d S )Nr   )ÚsuperÚ__init__r   r   r   r   r   r   r   r   Ú	_id_attrsÚ_freeze)
Úselfr   r   r   r   r   r   r   r   r   ©Ú	__class__© úV/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/_chatmemberupdated.pyr   m   s    ûzChatMemberUpdated.__init__ÚdataÚbotz
Bot | NoneÚreturnc                    s¨   |   |¡}t|ƒ}t| d¡t|ƒ|d< t| dd¡t|ƒ|d< t| d¡|d�|d< t| d¡t|ƒ|d< t| d¡t|ƒ|d< t| d	¡t	|ƒ|d	< t
ƒ j||d
�S )z,See :meth:`telegram.TelegramObject.de_json`.r   ÚfromNr   r   )Útzinfor   r   r   )r!   r"   )Ú_parse_datar	   r   Úgetr   Úpopr   r
   r   r   r   Úde_json)Úclsr!   r"   Ú
loc_tzinfor   r   r    r)   ‘   s   
zChatMemberUpdated.de_jsonÚ	attributec                 C   sX   z| j | }W n ty   d }Y nw z
| j| }W ||fS  ty+   d }Y ||fS w ©N)r   ÚKeyErrorr   )r   r,   ÚoldÚnewr   r   r    Ú_get_attribute_difference¢   s   ÿýýz+ChatMemberUpdated._get_attribute_differencec                    s|   ˆ j  ¡ }| d¡}ˆ j ¡ }| d¡}dd„ t| ¡ ƒt| ¡ ƒA D ƒ}‡ fdd„|D ƒ}||kr<ˆ j jˆ jjf|d< |S )a|  Computes the difference between :attr:`old_chat_member` and :attr:`new_chat_member`.

        Example:
            .. code:: pycon

                >>> chat_member_updated.difference()
                {'custom_title': ('old title', 'new title')}

        Note:
            To determine, if the :attr:`telegram.ChatMember.user` attribute has changed, *every*
            attribute of the user will be checked.

        .. versionadded:: 13.5

        Returns:
            dict[:obj:`str`, tuple[:class:`object`, :class:`object`]]: A dictionary mapping
            attribute names to tuples of the form ``(old_value, new_value)``
        Úuserc                 s   s   � | ]}|d  V  qdS )r   Nr   )Ú.0Úentryr   r   r    Ú	<genexpr>Ð   s   € z/ChatMemberUpdated.difference.<locals>.<genexpr>c                    s   i | ]}|ˆ   |¡“qS r   )r1   )r3   r,   ©r   r   r    Ú
<dictcomp>Ò   s    z0ChatMemberUpdated.difference.<locals>.<dictcomp>)r   Úto_dictr(   r   ÚsetÚitemsr2   )r   Úold_dictÚold_user_dictÚnew_dictÚnew_user_dictÚ
attributesÚresultr   r6   r    Ú
difference¯   s   



"zChatMemberUpdated.difference)NNNr-   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   ÚdtmÚdatetimer   r   Úboolr   r   Úclassmethodr)   ÚstrÚtupleÚobjectr1   ÚdictrA   Ú__classcell__r   r   r   r    r   %   sJ    <÷õþýüûúùø	÷õ$&ÿÿþr   )rE   rH   rG   Útypingr   Útelegram._chatr   Útelegram._chatinvitelinkr   Útelegram._chatmemberr   Útelegram._telegramobjectr   Útelegram._userr   Útelegram._utils.argumentparsingr   Útelegram._utils.datetimer	   r
   Útelegram._utils.typesr   Útelegramr   r   r   r   r   r    Ú<module>   s   