
    ՟f!                         d Z ddl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 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y)zLThis module contains an object that represents a Telegram ChatMemberUpdated.    N)TYPE_CHECKINGDictOptionalTupleUnion)Chat)ChatInviteLink)
ChatMember)TelegramObject)User)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	e
   de	e   de	e   de	e   f fdZe	 dde	e   de	d   de	d    f fd       Zdedeeef   fdZdeeeeeeej                  ef   eeeej                  ef   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	                2   t         
|   |	       || _        || _        || _        || _        || _        || _        || _        || _	        | j                  | j                  | j                  | j
                  | j                  f| _
        | j                          y )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             V/var/www/cvtools/html/venv/lib/python3.12/site-packages/telegram/_chatmemberupdated.pyr   zChatMemberUpdated.__init__k   s     	J/	('+	+:+:;V( 6A0@ IINNII    
 	    databotr   returnc                 4   | j                  |      }|syt        |      }t        j                  |j	                  d      |      |d<   t        j                  |j                  dd      |      |d<   t        |j	                  d      |      |d<   t        j                  |j	                  d      |      |d<   t        j                  |j	                  d      |      |d<   t        j                  |j	                  d	      |      |d	<   t        |   ||
      S )z,See :meth:`telegram.TelegramObject.de_json`.Nr   fromr   r   )tzinfor   r   r   )r&   r'   )_parse_datar   r   de_jsongetr   popr   r
   r	   r   )clsr&   r'   
loc_tzinfor#   s       r$   r-   zChatMemberUpdated.de_json   s    
 t$ 2#6
||DHHV$4c:V LL&$)?E[%dhhv&6zJV","4"4TXX>O5PRU"V","4"4TXX>O5PRU"V,44TXXm5LcR]wDc22r%   	attributec                     	 | j                   |   }	 | j                  |   }||fS # t        $ r d }Y !w xY w# t        $ r d }Y ||fS w xY wN)r   KeyErrorr   )r"   r2   oldnews       r$   _get_attribute_differencez+ChatMemberUpdated._get_attribute_difference   sk    	&&y1C	&&y1C Cx  	C	
  	CCx	s   % 6 33AAc                    | j                   j                         }|j                  d      }| j                  j                         }|j                  d      }d t	        |j                               t	        |j                               z  D        }|D ci c]  }|| j                  |       }}||k7  r/| j                   j                  | j                  j                  f|d<   |S c c}w )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      yw)r   N ).0entrys     r$   	<genexpr>z/ChatMemberUpdated.difference.<locals>.<genexpr>   s     Z5eAhZs   )r   to_dictr/   r   setitemsr8   r:   )r"   old_dictold_user_dictnew_dictnew_user_dict
attributesr2   results           r$   
differencezChatMemberUpdated.difference   s    8 ''//1 V,''//1 V, [C0@,ACHXDY,YZ
Xbc9)T;;IFFccM)"22779M9M9R9RSF6N	 ds   C&)NNNr4   )__name__
__module____qualname____doc__	__slots__r   r   datetimer
   r   r	   boolr   r   classmethodr-   strr   objectr8   r   r   rI   __classcell__)r#   s   @r$   r   r   #   sH   :x	I$ 156:+/" *."" " 	"
 $" $" n-" &.d^" #4." X&"H >B3H%3,4UO3	%	&3 3*3 5;P )	#tX..45uS$HYHY[_=_7``	
	
)r%   r   )rM   rO   typingr   r   r   r   r   telegram._chatr   telegram._chatinvitelinkr	   telegram._chatmemberr
   telegram._telegramobjectr   telegram._userr   telegram._utils.datetimer   r   telegram._utils.typesr   telegramr   r   r<   r%   r$   <module>r^      s=   & S  > >  3 + 3  Q *x xr%   