o
    "h                     @   s   d 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 er6ddlmZ G d	d
 d
e
ZG dd deZG dd deZG dd deZG dd de
ZdS )zEThis module contains objects that represents a Telegram ReactionType.    )TYPE_CHECKINGFinalLiteralOptionalUnion)	constants)TelegramObject)enum)de_json_optional)JSONDict)Botc                       s   e Zd ZU dZdZejjZeej e	d< 	 ejj
Z
eej e	d< 	 ejjZeej e	d< 	 dddeed	 ejf d
ee f fddZeddeded dd f fddZ  ZS )ReactionTypea  Base class for Telegram ReactionType Objects.
    There exist :class:`telegram.ReactionTypeEmoji`, :class:`telegram.ReactionTypeCustomEmoji`
    and :class:`telegram.ReactionTypePaid`.

    .. versionadded:: 20.8
    .. versionchanged:: 21.5

        Added paid reaction.

    Args:
        type (:obj:`str`): Type of the reaction. Can be
            :attr:`~telegram.ReactionType.EMOJI`, :attr:`~telegram.ReactionType.CUSTOM_EMOJI` or
            :attr:`~telegram.ReactionType.PAID`.
    Attributes:
        type (:obj:`str`): Type of the reaction. Can be
            :attr:`~telegram.ReactionType.EMOJI`, :attr:`~telegram.ReactionType.CUSTOM_EMOJI` or
            :attr:`~telegram.ReactionType.PAID`.

    )typeEMOJICUSTOM_EMOJIPAIDN
api_kwargsr   )emojicustom_emojipaidr   c                   s,   t  j|d ttj||| _|   d S Nr   )super__init__r	   
get_memberr   r   r   _freeze)selfr   r   	__class__ E/var/www/html/venv/lib/python3.10/site-packages/telegram/_reaction.pyr   B   s   zReactionType.__init__databotr   returnc                    s\   |  |}| jt| jt| jti}| tu r&|d|v r&||	d 
||S t j
||dS z,See :meth:`telegram.TelegramObject.de_json`.r   )r!   r"   )_parse_datar   ReactionTypeEmojir   ReactionTypeCustomEmojir   ReactionTypePaidr   getpopde_jsonr   )clsr!   r"   _class_mappingr   r   r    r+   P   s   
zReactionType.de_jsonN)__name__
__module____qualname____doc__	__slots__r   r   r   r   __annotations__r   r   r   r   r   r   r   classmethodr+   __classcell__r   r   r   r    r   !   s&   
 *r   c                       8   e Zd ZdZdZdddedee f fddZ  Z	S )	r&   aP  
    Represents a reaction with a normal emoji.

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

    .. versionadded:: 20.8

    Args:
        emoji (:obj:`str`): Reaction emoji. It can be one of
            :const:`telegram.constants.ReactionEmoji`.

    Attributes:
        type (:obj:`str`): Type of the reaction,
            always :tg-const:`telegram.ReactionType.EMOJI`.
        emoji (:obj:`str`): Reaction emoji. It can be one of
        :const:`telegram.constants.ReactionEmoji`.
    )r   Nr   r   r   c                   P   t  jtj|d |   || _| jf| _W d    d S 1 s!w   Y  d S N)r   r   )r   r   r   r   	_unfrozenr   	_id_attrs)r   r   r   r   r   r    r   w   
   
"zReactionTypeEmoji.__init__
r/   r0   r1   r2   r3   strr   r   r   r6   r   r   r   r    r&   a   s    r&   c                       r7   )	r'   a  
    Represents a reaction with a custom emoji.

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

    .. versionadded:: 20.8

    Args:
        custom_emoji_id (:obj:`str`): Custom emoji identifier.

    Attributes:
        type (:obj:`str`): Type of the reaction,
            always :tg-const:`telegram.ReactionType.CUSTOM_EMOJI`.
        custom_emoji_id (:obj:`str`): Custom emoji identifier.

    )custom_emoji_idNr   r?   r   c                   r8   r9   )r   r   r   r   r:   r?   r;   )r   r?   r   r   r   r    r      r<   z ReactionTypeCustomEmoji.__init__r=   r   r   r   r    r'      s    r'   c                       s4   e Zd ZdZdZdddee f fddZ  ZS )r(   z
    The reaction is paid.

    .. versionadded:: 21.5

    Attributes:
        type (:obj:`str`): Type of the reaction,
            always :tg-const:`telegram.ReactionType.PAID`.
    r   Nr   r   c                   s   t  jtj|d |   d S r9   )r   r   r   r   r   )r   r   r   r   r    r      s   zReactionTypePaid.__init__)	r/   r0   r1   r2   r3   r   r   r   r6   r   r   r   r    r(      s    
$r(   c                       s`   e Zd ZdZdZdddededee f fdd	Z	e
dd
eded dd f fddZ  ZS )ReactionCountai  This class represents a reaction added to a message along with the number of times it was
    added.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if the :attr:`type` and :attr:`total_count` is equal.

    .. versionadded:: 20.8

    Args:
        type (:class:`telegram.ReactionType`): Type of the reaction.
        total_count (:obj:`int`): Number of times the reaction was added.

    Attributes:
        type (:class:`telegram.ReactionType`): Type of the reaction.
        total_count (:obj:`int`): Number of times the reaction was added.
    )total_countr   Nr   r   rA   r   c                   s4   t  j|d || _|| _| j| jf| _|   d S r   )r   r   r   rA   r;   r   )r   r   rA   r   r   r   r    r      s   zReactionCount.__init__r!   r"   r   r#   c                    s0   |  |}t|dt||d< t j||dS r$   )r%   r
   r)   r   r   r+   )r,   r!   r"   r   r   r    r+      s   
zReactionCount.de_jsonr.   )r/   r0   r1   r2   r3   r   intr   r   r   r5   r+   r6   r   r   r   r    r@      s    
*r@   N)r2   typingr   r   r   r   r   telegramr   telegram._telegramobjectr   telegram._utilsr	   telegram._utils.argumentparsingr
   telegram._utils.typesr   r   r   r&   r'   r(   r@   r   r   r   r    <module>   s   @#"