
    i>                        d Z ddlZddlmZ ddl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rddlmZ  G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$dS ) zDThis module contains the classes that represent Telegram ChatBoosts.    N)Sequence)TYPE_CHECKINGFinal)	constants)Chat)TelegramObject)User)enum)de_json_optionalde_list_optionalparse_sequence_arg)extract_tzinfo_from_defaultsfrom_timestamp)JSONDict)Botc                   @     e Zd ZdZdZdddededz  ddf fdZ x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                    t                                          |           || _        | j        f| _        |                                  d S Nr   )super__init__r   	_id_attrs_freeze)selfr   r   	__class__s      S/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/telegram/_chatboost.pyr   zChatBoostAdded.__init__:   sF     	J/// +*,    )	__name__
__module____qualname____doc__	__slots__intr   r   __classcell__r   s   @r    r   r   &   s}         " !I '+	
 
 

 tO	

 

 
 
 
 
 
 
 
 
 
r!   r   c                        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dz  f fd
Zeddedddd f fd            Z x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                    t                                          |           t          j        t          j        ||          | _        | j        f| _        |                                  d S r   )	r   r   r
   
get_memberr   ChatBoostSourcesr,   r   r   )r   r,   r   r   s      r    r   zChatBoostSource.__init__h   sT    J///  ?9+EvvVV+r!   databot
Bot | Noner   c                    |                      |          }| j        t          | j        t          | j        t          i}| t          u rG|                    d          |v r0||	                    d                   
                    ||          S d|v r,t          |                    d          t          |          |d<   t                      
                    ||          S ),See :meth:`telegram.TelegramObject.de_json`.r,   r3   r4   user)_parse_datar-   ChatBoostSourcePremiumr.   ChatBoostSourceGiftCoder/   ChatBoostSourceGiveawayr+   getpopde_jsonr   r	   r   )clsr3   r4   _class_mappingr   s       r    r@   zChatBoostSource.de_jsonq   s     t$$ K/M2L1<
 /!!dhhx&8&8N&J&J!$((8"4"45==4S=QQQT>>+DHHV,<,<dCHHDLwwDc222r!   N)r"   r#   r$   r%   r&   r   r2   r-   r   str__annotations__r.   r/   r   r   classmethodr@   r(   r)   s   @r    r+   r+   G   s         . I#4<GU3Z<<<>%6@IuSz@@@@$5>HeCj>>>?EI   s 8d?       3 38 3, 3BS 3 3 3 3 3 [3 3 3 3 3r!   r+   c                   <     e Zd ZdZdZdddededz  f fdZ xZS )r;   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.
    r9   Nr   r9   r   c                    t                                          | j        |           |                                 5  || _        d d d            d S # 1 swxY w Y   d S N)r,   r   )r   r   r-   	_unfrozenr9   r   r9   r   r   s      r    r   zChatBoostSourcePremium.__init__   s    DDD^^ 	# 	#"DI	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#   AAA	r"   r#   r$   r%   r&   r	   r   r   r(   r)   s   @r    r;   r;      sm          IDH # # #T #(T/ # # # # # # # # # #r!   r;   c                   <     e Zd ZdZdZdddededz  f fdZ xZS )r<   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.
    rH   Nr   r9   r   c                    t                                          | j        |           |                                 5  || _        d d d            d S # 1 swxY w Y   d S rJ   )r   r   r.   rK   r9   rL   s      r    r   z ChatBoostSourceGiftCode.__init__   s    :FFF^^ 	# 	#"DI	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#rM   rN   r)   s   @r    r<   r<      sm           IDH # # #T #(T/ # # # # # # # # # #r!   r<   c                   b     e Zd ZdZdZ	 	 	 ddddededz  dedz  dedz  d	edz  f
 fd
Z	 xZ
S )r=   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_countr9   Nr   rR   r9   rS   rT   r   c                    t                                          | j        |           |                                 5  || _        || _        || _        || _        d d d            d S # 1 swxY w Y   d S rJ   )r   r   r/   rK   rR   r9   rT   rS   )r   rR   r9   rS   rT   r   r   s         r    r   z ChatBoostSourceGiveaway.__init__   s     	*EEE^^ 	: 	:,?D$%)DI0@D!-9D		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A((A,/A,)NNN)r"   r#   r$   r%   r&   r'   r	   boolr   r   r(   r)   s   @r    r=   r=      s           D TI
 !$('+: '+: : : : Tk: Tk	:
 *: tO: : : : : : : : : :r!   r=   c                        e Zd ZdZdZdddedej        dej        ded	e	dz  f
 fd
Z
edde	dddd f fd            Z x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   rZ   rY   r[   r,   r   c                    t                                          |           || _        || _        || _        || _        | j        | j        | j        | j        f| _        |                                  d S r   )r   r   rZ   rY   r[   r,   r   r   )r   rZ   rY   r[   r,   r   r   s         r    r   zChatBoost.__init__  sg     	J///%&.-<'--8LdkZr!   r3   r4   r5   r   c                    |                      |          }t          |                    d          t          |          |d<   t	          |          }t          |                    d          |          |d<   t          |                    d          |          |d<   t                                          ||          S )r7   r,   rY   tzinfor[   r8   )r:   r   r>   r+   r   r   r   r@   rA   r3   r4   
loc_tzinfor   s       r    r@   zChatBoost.de_json   s     t$$)$((8*<*<osSSX1#66
)$((:*>*>zRRRZ"0:K1L1LU_"`"`"`wwDc222r!   rC   )r"   r#   r$   r%   r&   rD   dtmdatetimer+   r   r   rF   r@   r(   r)   s   @r    rX   rX      s         6 FI '+   , 	
   tO     & 	3 	38 	3, 	3+ 	3 	3 	3 	3 	3 [	3 	3 	3 	3 	3r!   rX   c                   j     e Zd ZdZdZdddedededz  f fdZe	dd	ed
ddd f fd            Z
 x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   rg   rf   r   c                    t                                          |           || _        || _        | j        j        | j        f| _        |                                  d S r   )r   r   rg   rf   idr   r   )r   rg   rf   r   r   s       r    r   zChatBoostUpdated.__init__@  sQ     	J///	 %
),
3r!   r3   r4   r5   r   c                 $   |                      |          }t          |                    d          t          |          |d<   t          |                    d          t          |          |d<   t                                          ||          S )r7   rg   rf   r8   )r:   r   r>   r   rX   r   r@   rA   r3   r4   r   s      r    r@   zChatBoostUpdated.de_jsonO  sr     t$$'(8(8$DDV('):):IsKKWwwDc222r!   rC   )r"   r#   r$   r%   r&   r   rX   r   r   rF   r@   r(   r)   s   @r    re   re   -  s           "I '+   
 tO      3 38 3, 3BT 3 3 3 3 3 [3 3 3 3 3r!   re   c                   |     e Zd ZdZdZdddededej        de	d	e
dz  f
 fd
Zedde
dddd f fd            Z x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.
    )rZ   rg   remove_dater,   Nr   rg   rZ   rn   r,   r   c                    t                                          |           || _        || _        || _        || _        | j        | j        | j        | j        f| _        |                                  d S r   )r   r   rg   rZ   rn   r,   r   r   )r   rg   rZ   rn   r,   r   r   s         r    r   zChatBoostRemoved.__init__r  sg     	J///	%)4'-)T]D4DdkRr!   r3   r4   r5   r   c                    |                      |          }t          |                    d          t          |          |d<   t          |                    d          t          |          |d<   t          |          }t          |                    d          |          |d<   t                                          ||          S )r7   rg   r,   rn   r^   r8   )	r:   r   r>   r   r+   r   r   r   r@   r`   s       r    r@   zChatBoostRemoved.de_json  s     t$$'(8(8$DDV)$((8*<*<osSSX1#66
,TXXm-D-DZXXX]wwDc222r!   rC   )r"   r#   r$   r%   r&   r   rD   rb   rc   r+   r   r   rF   r@   r(   r)   s   @r    rm   rm   Z  s         * >I '+    \	
   tO     & 	3 	38 	3, 	3BT 	3 	3 	3 	3 	3 [	3 	3 	3 	3 	3r!   rm   c                   r     e Zd ZdZdZdddee         dedz  f fdZe	dded	d
dd f fd            Z
 x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   rs   r   c                    t                                          |           t          |          | _        | j        f| _        |                                  d S r   )r   r   r   rs   r   r   )r   rs   r   r   s      r    r   zUserChatBoosts.__init__  sK     	J///-?-G-G+r!   r3   r4   r5   r   c                     |                      |          }t          |                    d          t          |          |d<   t	                                          ||          S )r7   rs   r8   )r:   r   r>   rX   r   r@   rk   s      r    r@   zUserChatBoosts.de_json  sQ     t$$)$((8*<*<iMMXwwDc222r!   rC   )r"   r#   r$   r%   r&   r   rX   r   r   rF   r@   r(   r)   s   @r    rr   rr     s          I '+	  # tO	      3 38 3, 3BR 3 3 3 3 3 [3 3 3 3 3r!   rr   )%r%   rc   rb   collections.abcr   typingr   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+   r;   r<   r=   rX   re   rm   rr    r!   r    <module>r      s  & K J     $ $ $ $ $ $ ' ' ' ' ' ' ' '             3 3 3 3 3 3                   b b b b b b b b b b Q Q Q Q Q Q Q Q * * * * * *     ^   B;3 ;3 ;3 ;3 ;3n ;3 ;3 ;3|# # # # #_ # # #2# # # # #o # # #44: 4: 4: 4: 4:o 4: 4: 4:n;3 ;3 ;3 ;3 ;3 ;3 ;3 ;3|*3 *3 *3 *3 *3~ *3 *3 *3Z53 53 53 53 53~ 53 53 53p&3 &3 &3 &3 &3^ &3 &3 &3 &3 &3r!   