
    i!                         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rddlmZ  G 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                   *    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z  dedz  dedz  dedz  f fdZeddedddd f fd            Zdedeeef         fdZdeeeeez  ej        z  ez  eez  ej        z  ez  f         f         fdZ x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	                .   t                                          |	           || _        || _        || _        || _        || _        || _        || _        || _	        | 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__s             [/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/telegram/_chatmemberupdated.pyr   zChatMemberUpdated.__init__m   s     	J///	("&	+:+:8S( 3>-= INI  
 	    databotz
Bot | Nonereturnc                    |                      |          }t          |          }t          |                    d          t          |          |d<   t          |                    dd          t          |          |d<   t          |                    d          |          |d<   t          |                    d          t          |          |d<   t          |                    d          t          |          |d<   t          |                    d	          t          |          |d	<   t                                          ||
          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    s       r!   r,   zChatMemberUpdated.de_json   s    t$$ 2#66
'(8(8$DDV,TXXfd-C-CT3OO[%dhhv&6&6zJJJV"2488<M3N3NPZ\_"`"`"2488<M3N3NPZ\_"`"`.txx/F/FX[\\]wwDc222r"   	attributec                     	 | j         |         }n# t          $ r d }Y nw xY w	 | j        |         }n# t          $ r d }Y nw xY w||fS N)r   KeyErrorr   )r   r/   oldnews       r!   _get_attribute_differencez+ChatMemberUpdated._get_attribute_difference   s}    	&y1CC 	 	 	CCC		&y1CC 	 	 	CCC	 Cxs    1 A A c                      j                                         }|                    d          } j                                        }|                    d          }d t	          |                                          t	          |                                          z  D             } f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              3   &   K   | ]}|d          V  dS )r   N ).0entrys     r!   	<genexpr>z/ChatMemberUpdated.difference.<locals>.<genexpr>   s&      ZZ5eAhZZZZZZr"   c                 <    i | ]}|                     |          S r9   )r5   )r:   r/   r   s     r!   
<dictcomp>z0ChatMemberUpdated.difference.<locals>.<dictcomp>   s)    ccc9)T;;IFFcccr"   )r   to_dictr+   r   setitemsr7   )r   old_dictold_user_dictnew_dictnew_user_dict
attributesresults   `      r!   
differencezChatMemberUpdated.difference   s    4 '//11 V,,'//11 V,, [ZC0@0@,A,ACHXHXDYDY,YZZZ
ccccXbcccM))"279M9RSF6Nr"   )NNNr1   )__name__
__module____qualname____doc__	__slots__r   r   dtmdatetimer   r   boolr   r   classmethodr,   strtupleobjectr5   dictrH   __classcell__)r    s   @r!   r   r   %   s       : :x	I$ .237(," '+" " "" " l	"
 $" $" $d*" &*D[" +" tO" " " " " "H 3 38 3, 3BU 3 3 3 3 3 [3 3 5;P    '	cDj3<'$.d
S\0ID0PPQ	S
' ' ' ' ' ' ' 'r"   r   )rL   rO   rN   typingr   telegram._chatr   telegram._chatinvitelinkr   telegram._chatmemberr   telegram._telegramobjectr   telegram._userr   telegram._utils.argumentparsingr	   telegram._utils.datetimer
   r   telegram._utils.typesr   telegramr   r   r9   r"   r!   <module>ra      s  & S R                       3 3 3 3 3 3 + + + + + + 3 3 3 3 3 3       < < < < < < Q Q Q Q Q Q Q Q * * * * * * q q q q q q q q q qr"   