U
    g+                     @   s   d Z ddlmZmZ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 dd	lmZ dd
lmZ erd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G dd deZdS )zCThis module contains objects that represent paid media in Telegram.    )TYPE_CHECKINGDictFinalOptionalSequenceTupleType)	constants)	PhotoSize)Video)TelegramObject)User)enum)parse_sequence_arg)JSONDict)Botc                       s   e Zd ZU dZdZejjZee	 e
d< ejjZee	 e
d< ejjZee	 e
d< dde	ee dd fd	d
Zedee ed ed  d fddZ  ZS )	PaidMediaa  Describes the paid media added to a message. Currently, it can be one of:

    * :class:`telegram.PaidMediaPreview`
    * :class:`telegram.PaidMediaPhoto`
    * :class:`telegram.PaidMediaVideo`

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

    .. versionadded:: 21.4

    Args:
        type (:obj:`str`): Type of the paid media.

    Attributes:
        type (:obj:`str`): Type of the paid media.
    )typePREVIEWPHOTOVIDEON
api_kwargs)r   r   returnc                   s6   t  j|d ttj||| _| jf| _|   d S Nr   )	super__init__r   Z
get_memberr	   PaidMediaTyper   	_id_attrs_freeze)selfr   r   	__class__ 7/tmp/pip-unpacked-wheel-swnnwir2/telegram/_paidmedia.pyr   @   s    
zPaidMedia.__init__r   databotr   c                    sz   |  |}|dkrdS |s&| tkr&dS | jt| jt| jti}| tkrj|d|krj||	d j
||dS t j
||dS )aX  Converts JSON data to the appropriate :class:`PaidMedia` object, i.e. takes
        care of selecting the correct subclass.

        Args:
            data (Dict[:obj:`str`, ...]): The JSON data.
            bot (:class:`telegram.Bot`, optional): The bot associated with this object.

        Returns:
            The Telegram object.

        Nr   r&   r'   )_parse_datar   r   PaidMediaPreviewr   PaidMediaPhotor   PaidMediaVideogetpopde_jsonr   )clsr&   r'   Z_class_mappingr!   r#   r$   r/   L   s    
   zPaidMedia.de_json)N)__name__
__module____qualname____doc__	__slots__r	   r   r   r   str__annotations__r   r   r   r   r   classmethodr/   __classcell__r#   r#   r!   r$   r   $   s$   
  r   c                       sJ   e Zd ZdZdZdddee ee ee ee dd fddZ  Z	S )	r*   a  The paid media isn't available before the payment.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`width`, :attr:`height`, and :attr:`duration`
    are equal.

    .. versionadded:: 21.4

    Args:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.PREVIEW`.
        width (:obj:`int`, optional): Media width as defined by the sender.
        height (:obj:`int`, optional): Media height as defined by the sender.
        duration (:obj:`int`, optional): Duration of the media in seconds as defined by the sender.

    Attributes:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.PREVIEW`.
        width (:obj:`int`): Optional. Media width as defined by the sender.
        height (:obj:`int`): Optional. Media height as defined by the sender.
        duration (:obj:`int`): Optional. Duration of the media in seconds as defined by the sender.
    )durationheightwidthNr   )r<   r;   r:   r   r   c             	      sR   t  jtj|d |  . || _|| _|| _| j| j| j| jf| _	W 5 Q R X d S N)r   r   )
r   r   r   r   	_unfrozenr<   r;   r:   r   r   )r    r<   r;   r:   r   r!   r#   r$   r      s    
zPaidMediaPreview.__init__)NNN)
r1   r2   r3   r4   r5   r   intr   r   r9   r#   r#   r!   r$   r*   o   s      r*   c                       sd   e Zd ZdZdZdded ee dd fddZe	dee ed	 ed  d
 fddZ
  ZS )r+   a3  
    The paid media is a photo.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`photo` are equal.

    .. versionadded:: 21.4

    Args:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.PHOTO`.
        photo (Sequence[:class:`telegram.PhotoSize`]): The photo.

    Attributes:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.PHOTO`.
        photo (Tuple[:class:`telegram.PhotoSize`]): The photo.
    )photoNr   r
   )r@   r   r   c             	      sB   t  jtj|d |   t|| _| j| jf| _W 5 Q R X d S r=   )	r   r   r   r   r>   r   r@   r   r   )r    r@   r   r!   r#   r$   r      s    

zPaidMediaPhoto.__init__r   r%   c                    s:   |  |}|sd S tj|d|d|d< t j||dS )Nr@   r'   r(   )r)   r
   de_listr-   r   r/   r0   r&   r'   r!   r#   r$   r/      s
    
zPaidMediaPhoto.de_json)N)r1   r2   r3   r4   r5   r   r   r   r   r8   r/   r9   r#   r#   r!   r$   r+      s     r+   c                       s`   e Zd ZdZdZddeee dd fddZe	dee ed ed  d	 fd
dZ
  ZS )r,   a  
    The paid media is a video.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`video` are equal.

    .. versionadded:: 21.4

    Args:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.VIDEO`.
        video (:class:`telegram.Video`): The video.

    Attributes:
        type (:obj:`str`): Type of the paid media, always :tg-const:`telegram.PaidMedia.VIDEO`.
        video (:class:`telegram.Video`): The video.
    )videoNr   )rD   r   r   c             	      s>   t  jtj|d |   || _| j| jf| _W 5 Q R X d S r=   )r   r   r   r   r>   rD   r   r   )r    rD   r   r!   r#   r$   r      s    
zPaidMediaVideo.__init__r   r%   c                    s:   |  |}|sd S tj|d|d|d< t j||dS )NrD   rA   r(   )r)   r   r/   r-   r   rC   r!   r#   r$   r/      s
    
zPaidMediaVideo.de_json)N)r1   r2   r3   r4   r5   r   r   r   r   r8   r/   r9   r#   r#   r!   r$   r,      s     r,   c                       sf   e Zd ZdZdZddeee ee	 dd fddZ
edee	 ed ed  d	 fd
dZ  ZS )PaidMediaInfoa  
    Describes the paid media added to a message.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`star_count` and :attr:`paid_media` are equal.

    .. versionadded:: 21.4

    Args:
        star_count (:obj:`int`): The number of Telegram Stars that must be paid to buy access to
            the media.
        paid_media (Sequence[:class:`telegram.PaidMedia`]): Information about the paid media.

    Attributes:
        star_count (:obj:`int`): The number of Telegram Stars that must be paid to buy access to
            the media.
        paid_media (Tuple[:class:`telegram.PaidMedia`]): Information about the paid media.
    )
paid_media
star_countNr   )rG   rF   r   r   c                   s8   t  j|d || _t|| _| j| jf| _|   d S r   )r   r   rG   r   rF   r   r   )r    rG   rF   r   r!   r#   r$   r     s
    
zPaidMediaInfo.__init__r   r%   c                    s:   |  |}|sd S tj|d|d|d< t j||dS )NrF   rA   r(   )r)   r   rB   r-   r   r/   rC   r!   r#   r$   r/     s
    
zPaidMediaInfo.de_json)N)r1   r2   r3   r4   r5   r?   r   r   r   r   r   r8   r/   r9   r#   r#   r!   r$   rE      s      rE   c                       sb   e Zd ZdZdZdddeee dd fddZe	dee ed	 ed  d
 fddZ
  ZS )PaidMediaPurchaseda  This object contains information about a paid media purchase.

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

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

    .. versionadded:: 21.6

    Args:
        from_user (:class:`telegram.User`): User who purchased the media.
        paid_media_payload (:obj:`str`): Bot-specified paid media payload.

    Attributes:
        from_user (:class:`telegram.User`): User who purchased the media.
        paid_media_payload (:obj:`str`): Bot-specified paid media payload.
    )	from_userpaid_media_payloadNr   r   )rI   rJ   r   r   c                   s4   t  j|d || _|| _| j| jf| _|   d S r   )r   r   rI   rJ   r   r   )r    rI   rJ   r   r!   r#   r$   r   <  s
    zPaidMediaPurchased.__init__r   r%   c                    s:   |  |}|sd S tj|d|d|d< t j||dS )Nfromr(   rI   )r)   r   r/   r.   r   rC   r!   r#   r$   r/   J  s
    
zPaidMediaPurchased.de_json)N)r1   r2   r3   r4   r5   r6   r   r   r   r8   r/   r9   r#   r#   r!   r$   rH   &  s      rH   N) r4   typingr   r   r   r   r   r   r   Ztelegramr	   Ztelegram._files.photosizer
   Ztelegram._files.videor   Ztelegram._telegramobjectr   Ztelegram._userr   Ztelegram._utilsr   Ztelegram._utils.argumentparsingr   Ztelegram._utils.typesr   r   r   r*   r+   r,   rE   rH   r#   r#   r#   r$   <module>   s"   $K*..1