o
    "h>                     @   s<  d Z ddlZddlmZ ddl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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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#G dd deZ$G dd deZ%dS ) zDThis module contains the classes that represent Telegram ChatBoosts.    N)Sequence)TYPE_CHECKINGFinalOptional)	constants)Chat)TelegramObject)User)enum)de_json_optionalde_list_optionalparse_sequence_arg)extract_tzinfo_from_defaultsfrom_timestamp)JSONDict)Botc                       s<   e Zd ZdZdZdddedee ddf fdd	Z  Z	S )
ChatBoostAddeda  
    This object represents a service message about a user boosting a chat.

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

    .. versionadded:: 21.0

    Args:
        boost_count (:obj:`int`): Number of boosts added by the user.

    Attributes:
        boost_count (:obj:`int`): Number of boosts added by the user.

    )boost_countN
api_kwargsr   r   returnc                   s*   t  j|d || _| jf| _|   d S Nr   )super__init__r   	_id_attrs_freeze)selfr   r   	__class__ F/var/www/html/venv/lib/python3.10/site-packages/telegram/_chatboost.pyr   9   s   
zChatBoostAdded.__init__)
__name__
__module____qualname____doc__	__slots__intr   r   r   __classcell__r   r   r   r    r   %   s    r   c                       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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 )ChatBoostSourcea|  
    Base class for Telegram ChatBoostSource objects. It can be one of:

    * :class:`telegram.ChatBoostSourcePremium`
    * :class:`telegram.ChatBoostSourceGiftCode`
    * :class:`telegram.ChatBoostSourceGiveaway`

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

    .. versionadded:: 20.8

    Args:
        source (:obj:`str`): The source of the chat boost. Can be one of:
            :attr:`~telegram.ChatBoostSource.PREMIUM`, :attr:`~telegram.ChatBoostSource.GIFT_CODE`,
            or :attr:`~telegram.ChatBoostSource.GIVEAWAY`.

    Attributes:
        source (:obj:`str`): The source of the chat boost. Can be one of:
            :attr:`~telegram.ChatBoostSource.PREMIUM`, :attr:`~telegram.ChatBoostSource.GIFT_CODE`,
            or :attr:`~telegram.ChatBoostSource.GIVEAWAY`.
    )sourcePREMIUM	GIFT_CODEGIVEAWAYNr   r)   r   c                   s6   t  j|d ttj||| _| jf| _|   d S r   )	r   r   r
   
get_memberr   ChatBoostSourcesr)   r   r   )r   r)   r   r   r   r    r   g   s   
zChatBoostSource.__init__databotr   r   c                    s|   |  |}| jt| jt| jti}| tu r'|d|v r'||	d j
||dS d|v r6t|dt||d< t j
||dS ),See :meth:`telegram.TelegramObject.de_json`.r)   r/   r0   user)_parse_datar*   ChatBoostSourcePremiumr+   ChatBoostSourceGiftCoder,   ChatBoostSourceGiveawayr(   getpopde_jsonr   r	   r   )clsr/   r0   _class_mappingr   r   r    r:   p   s   
zChatBoostSource.de_jsonN)r!   r"   r#   r$   r%   r   r.   r*   r   str__annotations__r+   r,   r   r   r   classmethodr:   r'   r   r   r   r    r(   F   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 )	r5   a  
    The boost was obtained by subscribing to Telegram Premium or by gifting a Telegram Premium
    subscription to another user.

    .. versionadded:: 20.8

    Args:
        user (:class:`telegram.User`): User that boosted the chat.

    Attributes:
        source (:obj:`str`): The source of the chat boost. Always
            :attr:`~telegram.ChatBoostSource.PREMIUM`.
        user (:class:`telegram.User`): User that boosted the chat.
    r3   Nr   r3   r   c                   F   t  j| j|d |   || _W d    d S 1 sw   Y  d S N)r)   r   )r   r   r*   	_unfrozenr3   r   r3   r   r   r   r    r         
"zChatBoostSourcePremium.__init__
r!   r"   r#   r$   r%   r	   r   r   r   r'   r   r   r   r    r5      s    (r5   c                       rA   )	r6   a)  
    The boost was obtained by the creation of Telegram Premium gift codes to boost a chat. Each
    such code boosts the chat 4 times for the duration of the corresponding Telegram Premium
    subscription.

    .. versionadded:: 20.8

    Args:
        user (:class:`telegram.User`): User for which the gift code was created.

    Attributes:
        source (:obj:`str`): The source of the chat boost. Always
            :attr:`~telegram.ChatBoostSource.GIFT_CODE`.
        user (:class:`telegram.User`): User for which the gift code was created.
    rB   Nr   r3   r   c                   rC   rD   )r   r   r+   rE   r3   rF   r   r   r    r      rG   z ChatBoostSourceGiftCode.__init__rH   r   r   r   r    r6      s    (r6   c                       sX   e Zd ZdZdZ			ddddedee dee dee d	ee	 f
 fd
dZ
  ZS )r7   a
  
    The boost was obtained by the creation of a Telegram Premium giveaway or a Telegram Star.
    This boosts the chat 4 times for the duration of the corresponding Telegram Premium
    subscription for Telegram Premium giveaways and :attr:`prize_star_count` / 500 times for
    one year for Telegram Star giveaways.

    .. versionadded:: 20.8

    Args:
        giveaway_message_id (:obj:`int`): Identifier of a message in the chat with the giveaway;
            the message could have been deleted already. May be 0 if the message isn't sent yet.
        user (:class:`telegram.User`, optional): User that won the prize in the giveaway if any;
            for Telegram Premium giveaways only.
        prize_star_count (:obj:`int`, optional): The number of Telegram Stars to be split between
            giveaway winners; for Telegram Star giveaways only.

            .. versionadded:: 21.6
        is_unclaimed (:obj:`bool`, optional): :obj:`True`, if the giveaway was completed, but
            there was no user to win the prize.

    Attributes:
        source (:obj:`str`): Source of the boost. Always
            :attr:`~telegram.ChatBoostSource.GIVEAWAY`.
        giveaway_message_id (:obj:`int`): Identifier of a message in the chat with the giveaway;
            the message could have been deleted already. May be 0 if the message isn't sent yet.
        user (:class:`telegram.User`): Optional. User that won the prize in the giveaway if any.
        prize_star_count (:obj:`int`): Optional. The number of Telegram Stars to be split between
            giveaway winners; for Telegram Star giveaways only.

            .. versionadded:: 21.6
        is_unclaimed (:obj:`bool`): Optional. :obj:`True`, if the giveaway was completed, but
            there was no user to win the prize.
    )giveaway_message_idis_unclaimedprize_star_countr3   Nr   rI   r3   rJ   rK   r   c                   sX   t  j| j|d |   || _|| _|| _|| _W d    d S 1 s%w   Y  d S rD   )r   r   r,   rE   rI   r3   rK   rJ   )r   rI   r3   rJ   rK   r   r   r   r    r      s   	
"z ChatBoostSourceGiveaway.__init__)NNN)r!   r"   r#   r$   r%   r&   r   r	   boolr   r   r'   r   r   r   r    r7      s&    "r7   c                       sl   e Zd ZdZdZdddedejdej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 )	ChatBoosta  
    This object contains information about a chat boost.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`boost_id`, :attr:`add_date`, :attr:`expiration_date`,
    and :attr:`source` are equal.

    .. versionadded:: 20.8

    Args:
        boost_id (:obj:`str`): Unique identifier of the boost.
        add_date (:obj:`datetime.datetime`): Point in time when the chat was boosted.
        expiration_date (:obj:`datetime.datetime`): Point in time when the boost
            will automatically expire, unless the booster's Telegram Premium subscription is
            prolonged.
        source (:class:`telegram.ChatBoostSource`): Source of the added boost.

    Attributes:
        boost_id (:obj:`str`): Unique identifier of the boost.
        add_date (:obj:`datetime.datetime`): Point in time when the chat was boosted.
            |datetime_localization|
        expiration_date (:obj:`datetime.datetime`): Point in time when the boost
            will automatically expire, unless the booster's Telegram Premium subscription is
            prolonged. |datetime_localization|
        source (:class:`telegram.ChatBoostSource`): Source of the added boost.
    )add_dateboost_idexpiration_dater)   Nr   rO   rN   rP   r)   r   c                   H   t  j|d || _|| _|| _|| _| j| j| j| jf| _|   d S r   )r   r   rO   rN   rP   r)   r   r   )r   rO   rN   rP   r)   r   r   r   r    r        	zChatBoost.__init__r/   r0   r   r   c                    sd   |  |}t|dt||d< t|}t|d|d|d< t|d|d|d< t j||dS )r1   r)   rN   tzinforP   r2   )r4   r   r8   r(   r   r   r   r:   r;   r/   r0   
loc_tzinfor   r   r    r:     s   
zChatBoost.de_jsonr=   )r!   r"   r#   r$   r%   r>   dtmdatetimer(   r   r   r   r@   r:   r'   r   r   r   r    rM      s"    	*rM   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 )ChatBoostUpdateda;  This object represents a boost added to a chat or changed.

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

    .. versionadded:: 20.8

    Args:
        chat (:class:`telegram.Chat`): Chat which was boosted.
        boost (:class:`telegram.ChatBoost`): Information about the chat boost.

    Attributes:
        chat (:class:`telegram.Chat`): Chat which was boosted.
        boost (:class:`telegram.ChatBoost`): Information about the chat boost.
    )boostchatNr   r[   rZ   r   c                   s6   t  j|d || _|| _| jj| jf| _|   d S r   )r   r   r[   rZ   idr   r   )r   r[   rZ   r   r   r   r    r   ?  s
   zChatBoostUpdated.__init__r/   r0   r   r   c                    sF   |  |}t|dt||d< t|dt||d< t j||dS )r1   r[   rZ   r2   )r4   r   r8   r   rM   r   r:   r;   r/   r0   r   r   r    r:   N  s   
zChatBoostUpdated.de_jsonr=   )r!   r"   r#   r$   r%   r   rM   r   r   r   r@   r:   r'   r   r   r   r    rY   ,  s    *rY   c                       sj   e Zd ZdZdZdddededej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 )ChatBoostRemoveda  
    This object represents a boost removed from a chat.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`chat`, :attr:`boost_id`, :attr:`remove_date`, and
    :attr:`source` are equal.

    Args:
        chat (:class:`telegram.Chat`): Chat which was boosted.
        boost_id (:obj:`str`): Unique identifier of the boost.
        remove_date (:obj:`datetime.datetime`): Point in time when the boost was removed.
        source (:class:`telegram.ChatBoostSource`): Source of the removed boost.

    Attributes:
        chat (:class:`telegram.Chat`): Chat which was boosted.
        boost_id (:obj:`str`): Unique identifier of the boost.
        remove_date (:obj:`datetime.datetime`): Point in time when the boost was removed.
            |datetime_localization|
        source (:class:`telegram.ChatBoostSource`): Source of the removed boost.
    )rO   r[   remove_dater)   Nr   r[   rO   r_   r)   r   c                   rQ   r   )r   r   r[   rO   r_   r)   r   r   )r   r[   rO   r_   r)   r   r   r   r    r   q  rR   zChatBoostRemoved.__init__r/   r0   r   r   c                    sd   |  |}t|dt||d< t|dt||d< t|}t|d|d|d< t j||dS )r1   r[   r)   r_   rS   r2   )	r4   r   r8   r   r(   r   r   r   r:   rU   r   r   r    r:     s   
zChatBoostRemoved.de_jsonr=   )r!   r"   r#   r$   r%   r   r>   rW   rX   r(   r   r   r   r@   r:   r'   r   r   r   r    r^   Y  s"    	*r^   c                       s`   e Zd ZdZdZddde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 )UserChatBoostsa  This object represents a list of boosts added to a chat by a user.

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

    .. versionadded:: 20.8

    Args:
        boosts (Sequence[:class:`telegram.ChatBoost`]): List of boosts added to the chat by the
            user.

    Attributes:
        boosts (tuple[:class:`telegram.ChatBoost`]): List of boosts added to the chat by the user.
    )boostsNr   ra   r   c                   s.   t  j|d t|| _| jf| _|   d S r   )r   r   r   ra   r   r   )r   ra   r   r   r   r    r     s   

zUserChatBoosts.__init__r/   r0   r   r   c                    s0   |  |}t|dt||d< t j||dS )r1   ra   r2   )r4   r   r8   rM   r   r:   r]   r   r   r    r:     s   
zUserChatBoosts.de_jsonr=   )r!   r"   r#   r$   r%   r   rM   r   r   r   r@   r:   r'   r   r   r   r    r`     s    *r`   )&r$   rX   rW   collections.abcr   typingr   r   r   telegramr   telegram._chatr   telegram._telegramobjectr   telegram._userr	   telegram._utilsr
   telegram._utils.argumentparsingr   r   r   telegram._utils.datetimer   r   telegram._utils.typesr   r   r   r(   r5   r6   r7   rM   rY   r^   r`   r   r   r   r    <module>   s.   !>7>-8