
    i+B                        d Z ddl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mZ  G d de
          Z G d de
          Z G d de
          Z G d de
          ZdS )zGThis module contains an objects that are related to Telegram giveaways.    N)Sequence)TYPE_CHECKING)Chat)TelegramObject)User)de_json_optionalde_list_optionalparse_sequence_arg)extract_tzinfo_from_defaultsfrom_timestamp)JSONDict)BotMessagec                        e Zd ZdZdZ	 	 	 	 	 	 ddddee         dej        de	de
dz  d	e
dz  d
edz  dee         dz  de	dz  de	dz  dedz  f fdZeddedddd f fd            Z xZS )Giveawaya  This object represents a message about a scheduled giveaway.

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

    .. versionadded:: 20.8

    Args:
        chats (tuple[:class:`telegram.Chat`]): The list of chats which the user must join to
            participate in the giveaway.
        winners_selection_date (:class:`datetime.datetime`): The date when the giveaway winner will
            be selected. |datetime_localization|
        winner_count (:obj:`int`): The number of users which are supposed to be selected as winners
            of the giveaway.
        only_new_members (:obj:`True`, optional): If :obj:`True`, only users who join the chats
            after the giveaway started should be eligible to win.
        has_public_winners (:obj:`True`, optional): :obj:`True`, if the list of giveaway winners
            will be visible to everyone
        prize_description (:obj:`str`, optional): Description of additional giveaway prize
        country_codes (Sequence[:obj:`str`]): A list of two-letter ISO 3166-1 alpha-2
            country codes indicating the countries from which eligible users for the giveaway must
            come. If empty, then all users can participate in the giveaway. Users with a phone
            number that was bought on Fragment can always participate in giveaways.
        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
        premium_subscription_month_count (:obj:`int`, optional): The number of months the Telegram
            Premium subscription won from the giveaway will be active for; for Telegram Premium
            giveaways only.

    Attributes:
        chats (Sequence[:class:`telegram.Chat`]): The list of chats which the user must join to
            participate in the giveaway.
        winners_selection_date (:class:`datetime.datetime`): The date when the giveaway winner will
            be selected. |datetime_localization|
        winner_count (:obj:`int`): The number of users which are supposed to be selected as winners
            of the giveaway.
        only_new_members (:obj:`True`): Optional. If :obj:`True`, only users who join the chats
            after the giveaway started should be eligible to win.
        has_public_winners (:obj:`True`): Optional. :obj:`True`, if the list of giveaway winners
            will be visible to everyone
        prize_description (:obj:`str`): Optional. Description of additional giveaway prize
        country_codes (tuple[:obj:`str`]): Optional. A tuple of two-letter ISO 3166-1 alpha-2
            country codes indicating the countries from which eligible users for the giveaway must
            come. If empty, then all users can participate in the giveaway. Users with a phone
            number that was bought on Fragment can always participate in giveaways.
        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
        premium_subscription_month_count (:obj:`int`): Optional. The number of months the Telegram
            Premium subscription won from the giveaway will be active for; for Telegram Premium
            giveaways only.
    )	chatscountry_codeshas_public_winnersonly_new_members premium_subscription_month_countprize_descriptionprize_star_countwinner_countwinners_selection_dateN
api_kwargsr   r   r   r   r   r   r   r   r   r   c
                X   t                                          |
           t          |          | _        || _        || _        || _        || _        || _        t          |          | _
        || _        |	| _        | j        | j        | j        f| _        |                                  d S Nr   )super__init__tupler   r   r   r   r   r   r
   r   r   r   	_id_attrs_freeze)selfr   r   r   r   r   r   r   r   r   r   	__class__s              R/Users/shanyulin/my-agent/.venv/lib/python3.11/site-packages/telegram/_giveaway.pyr    zGiveaway.__init__j   s     	J///',U||
4J#!--=/A->.@.O.O<\-,< J'
 	    databot
Bot | Nonereturnc                 8   |                      |          }t          |          }t          |                    d          t          |          |d<   t          |                    d          |          |d<   t                                          ||          S ),See :meth:`telegram.TelegramObject.de_json`.r   r   tzinfor(   r)   )_parse_datar   r	   getr   r   r   de_jsonclsr(   r)   
loc_tzinfor%   s       r&   r3   zGiveaway.de_json   s     t$$ 2#66
('):):D#FFW)7HH-..z*
 *
 *
%& wwDc222r'   )NNNNNNN)__name__
__module____qualname____doc__	__slots__r   r   dtmdatetimeintboolstrr   r    classmethodr3   __classcell__r%   s   @r&   r   r   $   sE       7 7r
I" )-*.(,.27;'+  '+     ~  !$  	 
 +  !4K  :   }t+  +.*  *  tO           D 3 38 3, 3* 3 3 3 3 3 [3 3 3 3 3r'   r   c                   D     e Zd ZdZdZddddedz  dedz  f fdZ xZS )	GiveawayCreateda  This object represents a service message about the creation of a scheduled giveaway.

    Args:
        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

    Attributes:
        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

    )r   Nr   r   r   c                    t                                          |           || _        |                                  d S r   )r   r    r   r#   )r$   r   r   r%   s      r&   r    zGiveawayCreated.__init__   s7    J///,<r'   r7   )	r8   r9   r:   r;   r<   r?   r   r    rC   rD   s   @r&   rF   rF      sw           &I]a   t 8VZ?          r'   rF   c                        e Zd ZdZdZ	 	 	 	 	 	 	 ddddededej        ded	e	e
         d
edz  dedz  dedz  dedz  dedz  dedz  dedz  dedz  f fdZeddedddd f fd            Z xZS )GiveawayWinnersa  This object represents a message about the completion of a giveaway with public winners.

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

    .. versionadded:: 20.8

    Args:
        chat (:class:`telegram.Chat`): The chat that created the giveaway
        giveaway_message_id (:obj:`int`): Identifier of the message with the giveaway in the chat
        winners_selection_date (:class:`datetime.datetime`): Point in time when winners of the
            giveaway were selected. |datetime_localization|
        winner_count (:obj:`int`): Total number of winners in the giveaway
        winners	(Sequence[:class:`telegram.User`]): List of up to
            :tg-const:`telegram.constants.GiveawayLimit.MAX_WINNERS` winners of the giveaway
        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
        additional_chat_count (:obj:`int`, optional): The number of other chats the user had to
            join in order to be eligible for the giveaway
        premium_subscription_month_count (:obj:`int`, optional): The number of months the Telegram
            Premium subscription won from the giveaway will be active for
        unclaimed_prize_count (:obj:`int`, optional): Number of undistributed prizes
        only_new_members (:obj:`True`, optional): :obj:`True`, if only users who had joined the
            chats after the giveaway started were eligible to win
        was_refunded (:obj:`True`, optional): :obj:`True`, if the giveaway was canceled because the
            payment for it was refunded
        prize_description (:obj:`str`, optional): Description of additional giveaway prize

    Attributes:
        chat (:class:`telegram.Chat`): The chat that created the giveaway
        giveaway_message_id (:obj:`int`): Identifier of the message with the giveaway in the chat
        winners_selection_date (:class:`datetime.datetime`): Point in time when winners of the
            giveaway were selected. |datetime_localization|
        winner_count (:obj:`int`): Total number of winners in the giveaway
        winners	(tuple[:class:`telegram.User`]): tuple of up to
            :tg-const:`telegram.constants.GiveawayLimit.MAX_WINNERS` winners of the giveaway
        additional_chat_count (:obj:`int`): Optional. The number of other chats the user had to
            join in order to be eligible for the giveaway
        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
        premium_subscription_month_count (:obj:`int`): Optional. The number of months the Telegram
            Premium subscription won from the giveaway will be active for
        unclaimed_prize_count (:obj:`int`): Optional. Number of undistributed prizes
        only_new_members (:obj:`True`): Optional. :obj:`True`, if only users who had joined the
            chats after the giveaway started were eligible to win
        was_refunded (:obj:`True`): Optional. :obj:`True`, if the giveaway was canceled because the
            payment for it was refunded
        prize_description (:obj:`str`): Optional. Description of additional giveaway prize
    )additional_chat_countchatgiveaway_message_idr   r   r   r   unclaimed_prize_countwas_refundedr   winnersr   Nr   rK   rL   r   r   rO   rJ   r   rM   r   rN   r   r   r   c                   t                                          |           || _        || _        || _        || _        t          |          | _        || _        || _	        || _
        |	| _        |
| _        || _        || _        | j        | j        | j        | j        | j        f| _        |                                  d S r   )r   r    rK   rL   r   r   r!   rO   rJ   r   rM   r   rN   r   r   r"   r#   )r$   rK   rL   r   r   rO   rJ   r   rM   r   rN   r   r   r   r%   s                 r&   r    zGiveawayWinners.__init__   s    " 	J///	(; 4J#!-).w1F"<\-1F"-=)5->,< I$'L
 	r'   r(   r)   r*   r+   c                    |                      |          }t          |          }t          |                    d          t          |          |d<   t          |                    d          t          |          |d<   t          |                    d          |          |d<   t                      	                    ||          S )r-   rK   rO   r   r.   r0   )
r1   r   r   r2   r   r	   r   r   r   r3   r4   s       r&   r3   zGiveawayWinners.de_json'  s     t$$ 2#66
'(8(8$DDV*488I+>+>cJJY)7HH-..z*
 *
 *
%& wwDc222r'   )NNNNNNNr7   )r8   r9   r:   r;   r<   r   r?   r=   r>   r   r   r@   rA   r   r    rB   r3   rC   rD   s   @r&   rI   rI      sf       5 5nI, -17;,0(,$((,'+( '+( ( (( !( !$	(
 ( $(  #Tz( +.*(  #Tz( +( Tk( :( *( tO( ( ( ( ( (T 3 38 3, 3BS 3 3 3 3 3 [3 3 3 3 3r'   rI   c                        e Zd ZdZdZ	 	 	 ddddededz  ddd	edz  d
edz  f
 fdZe	ddedddd f fd            Z
 xZS )GiveawayCompletedas  This object represents a service message about the completion of a giveaway without public
    winners.

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

    .. versionadded:: 20.8


    Args:
        winner_count (:obj:`int`): Number of winners in the giveaway
        unclaimed_prize_count (:obj:`int`, optional): Number of undistributed prizes
        giveaway_message (:class:`telegram.Message`, optional): Message with the giveaway that was
            completed, if it wasn't deleted
        is_star_giveaway (:obj:`bool`, optional): :obj:`True`, if the giveaway is a Telegram Star
            giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.

            .. versionadded:: 21.6
    Attributes:
        winner_count (:obj:`int`): Number of winners in the giveaway
        unclaimed_prize_count (:obj:`int`): Optional. Number of undistributed prizes
        giveaway_message (:class:`telegram.Message`): Optional. Message with the giveaway that was
            completed, if it wasn't deleted
        is_star_giveaway (:obj:`bool`): Optional. :obj:`True`, if the giveaway is a Telegram Star
            giveaway. Otherwise, currently, the giveaway is a Telegram Premium giveaway.

            .. versionadded:: 21.6
    )giveaway_messageis_star_giveawayrM   r   Nr   r   rM   rT   zMessage | NonerU   r   c                    t                                          |           || _        || _        || _        || _        | j        | j        f| _        |                                  d S r   )r   r    r   rM   rT   rU   r"   r#   )r$   r   rM   rT   rU   r   r%   s         r&   r    zGiveawayCompleted.__init__X  sj     	J///!-1F"0@-= &

 	r'   r(   r)   r*   r+   c                     |                      |          }ddlm} t          |                    d          ||          |d<   t                                          ||          S )r-   r   )r   rT   r0   )r1   telegram._messager   r   r2   r   r3   )r5   r(   r)   r   r%   s       r&   r3   zGiveawayCompleted.de_jsono  sv     t$$	
 	
 	
 	
 	
 	
 $4DHH=O4P4PRY[^#_#_ wwDc222r'   )NNNr7   )r8   r9   r:   r;   r<   r?   r@   r   r    rB   r3   rC   rD   s   @r&   rS   rS   8  s         : bI
 -1-1(, '+    #Tz +	
 + tO     . 3 38 3, 3BU 3 3 3 3 3 [3 3 3 3 3r'   rS   )r;   r>   r=   collections.abcr   typingr   telegram._chatr   telegram._telegramobjectr   telegram._userr   telegram._utils.argumentparsingr   r	   r
   telegram._utils.datetimer   r   telegram._utils.typesr   telegramr   r   r   rF   rI   rS    r'   r&   <module>rc      s  & N M     $ $ $ $ $ $                   3 3 3 3 3 3       b b b b b b b b b b Q Q Q Q Q Q Q Q * * * * * * &%%%%%%%%u3 u3 u3 u3 u3~ u3 u3 u3p    n   43 3 3 3 3n 3 3 3DC3 C3 C3 C3 C3 C3 C3 C3 C3 C3r'   