U
    2tc                     @   s   d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZmZmZmZ ddlmZmZ ddlmZ ertd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AnyOptionalDictTupleUnion)TelegramObjectUserChat
ChatMemberChatInviteLink)from_timestampto_timestamp)JSONDict)Botc                	       s   e Zd ZdZdZdeeejeee	e
dddZeee ded  dd	d
Zed fddZeeeeeeejef eeeejef f f d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 ``from`` is a reserved word, use ``from_user`` instead.

    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`.
        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.

    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`.
        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.

    chat	from_userdateold_chat_membernew_chat_memberinvite_linkZ	_id_attrsN)r   r   r   r   r   r   _kwargsc                 K   sB   || _ || _|| _|| _|| _|| _| j | j| j| j| jf| _d S )Nr   )selfr   r   r   r   r   r   r    r   >/tmp/pip-unpacked-wheel-2u9rcp5s/telegram/chatmemberupdated.py__init__K   s    zChatMemberUpdated.__init__r   )databotreturnc                 C   s   |  |}|sdS t|d||d< t|d||d< t|d|d< t|d||d< t|d||d< t|d||d< | f |S )	z,See :meth:`telegram.TelegramObject.de_json`.Nr   fromr   r   r   r   r   )Z_parse_datar
   de_jsongetr	   r   r   r   )clsr   r   r   r   r   r"   g   s    
zChatMemberUpdated.de_json)r    c                    s   t   }t| j|d< |S )z,See :meth:`telegram.TelegramObject.to_dict`.r   )superto_dictr   r   )r   r   	__class__r   r   r&   x   s    
zChatMemberUpdated.to_dictc                    s|    j  }|d} j }|d}dd t| t| A D } fdd|D }||krx j j jjf|d< |S )as  Computes the difference between :attr:`old_chat_member` and :attr:`new_chat_member`.

        Example:
            .. code:: python

                >>> 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[:obj:`obj`, :obj:`obj`]]: 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 | ]}| j |  j| fqS r   )r   r   )r*   	attributer   r   r   
<dictcomp>   s    z0ChatMemberUpdated.difference.<locals>.<dictcomp>)r   r&   popr   setitemsr)   )r   Zold_dictZold_user_dictZnew_dictZnew_user_dict
attributesresultr   r.   r   
difference   s    



"
zChatMemberUpdated.difference)N)__name__
__module____qualname____doc__	__slots__r
   r	   datetimer   r   r   r   classmethodr   r   r"   r&   r   strr   r   boolr5   __classcell__r   r   r'   r   r      s.   ! "r   )r9   r;   typingr   r   r   r   r   r   Ztelegramr   r	   r
   r   r   Ztelegram.utils.helpersr   r   Ztelegram.utils.typesr   r   r   r   r   r   r   <module>   s    