
    QiNC                         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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y)zGThis module contains an objects that are related to Telegram giveaways.    N)Sequence)TYPE_CHECKINGOptional)Chat)TelegramObject)User)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
e   d	e
e   d
e
e   de
ee      de
e	   de
e	   de
e   f fdZe	 dde
e   de
d   de
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
                8   t         |   |
       t        |      | _        || _        || _        || _        || _        || _        t        |      | _
        || _        |	| _        | j                  | j                  | j
                  f| _        | j                          y 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              =/app/.venv/lib/python3.12/site-packages/telegram/_giveaway.pyr   zGiveaway.__init__i   s     	J/',U|
4J#!-0@2D0A.@.O?_-/? JJ''
 	    databotr   returnc                    | j                  |      }|yt        |      }t        t        j                  |j                  d      |            |d<   t        |j                  d      |      |d<   t        | !  ||      S ),See :meth:`telegram.TelegramObject.de_json`.Nr   r   tzinfor'   r(   )	_parse_datar
   r    r   de_listgetr   r   de_jsonclsr'   r(   
loc_tzinfor$   s       r%   r2   zGiveaway.de_json   s}    
 t$< 2#6
dll488G+<cBCW)7HH-.z*
%& wDc22r&   )NNNNNNN)__name__
__module____qualname____doc__	__slots__r   r   dtmdatetimeintr   boolstrr   r   classmethodr2   __classcell__r$   s   @r%   r   r   #   s    7r
I" ,0-1+/15:>*.  *. ~  !$  	 
 #4.  %TN  $C=   .  +33-  #3-  X& D >B3H%3,4UO3	*	3 3r&   r   c                   F     e Zd ZdZdZ	 ddddee   dee   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    t         |   |       || _        | j                          y r   )r   r   r   r"   )r#   r   r   r$   s      r%   r   zGiveawayCreated.__init__   s&     	J//?r&   r6   )
r7   r8   r9   r:   r;   r   r>   r   r   rB   rC   s   @r%   rE   rE      s?      &I 15Z^ (EMhEW r&   rE   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e   dee   dee   dee   dee   dee   dee   dee   f fdZe	 ddee   ded   de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   rJ   rK   r   r   rN   rI   r   rL   r   rM   r   r   r   c                |   t         |   |       || _        || _        || _        || _        t        |      | _        || _        || _	        || _
        |	| _        |
| _        || _        || _        | j                  | j                  | j                  | j
                  | j                  f| _        | j!                          y r   )r   r   rJ   rK   r   r   r    rN   rI   r   rL   r   rM   r   r   r!   r"   )r#   rJ   rK   r   r   rN   rI   r   rL   r   rM   r   r   r   r$   s                 r%   r   zGiveawayWinners.__init__  s    " 	J/	(; 4J#!-).w4I"?_-4I"0@,80A/? II$$''LL
 	r&   r'   r(   r   r)   c                 T   | j                  |      }|yt        |      }t        j                  |j	                  d      |      |d<   t        t        j                  |j	                  d      |            |d<   t        |j	                  d      |      |d<   t        |   ||      S )r+   NrJ   rN   r   r,   r.   )
r/   r
   r   r2   r1   r    r   r0   r   r   r3   s       r%   r2   zGiveawayWinners.de_json-  s    
 t$< 2#6
||DHHV$4c:VTXXi-@# FGY)7HH-.z*
%& wDc22r&   )NNNNNNNr6   )r7   r8   r9   r:   r;   r   r>   r<   r=   r   r   r   r?   r@   r   r   rA   r2   rB   rC   s   @r%   rH   rH      s   5nI, 04:>/3+/'++/*.( *.(( !( !$	(
 ( $(  (}( +33-(  (}( #4.( tn( $C=( #3-( X&(T >B3H%3,4UO3	#	$3 3r&   rH   c                        e Zd ZdZdZ	 	 	 ddddedee   ded   d	ee   d
ee   f
 fdZ	e
	 ddee   ded   de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_giveawayrL   r   Nr   r   rL   rS   r   rT   r   c                    t         |   |       || _        || _        || _        || _        | j                  | j                  f| _        | j                          y r   )r   r   r   rL   rS   rT   r!   r"   )r#   r   rL   rS   rT   r   r$   s         r%   r   zGiveawayCompleted.__init__c  s]     	J/!-4I"3C0@ &&

 	r&   r'   r(   r   r)   c                     | j                  |      }|yddlm}  |j                  |j	                  d      |      |d<   t
        |   ||      S )r+   Nr   )r   rS   r.   )r/   telegram._messager   r2   r1   r   )r4   r'   r(   r   r$   s       r%   r2   zGiveawayCompleted.de_jsonz  sV    
 t$< 	.#27??488<N3OQT#U wDc22r&   )NNNr6   )r7   r8   r9   r:   r;   r>   r   r?   r   r   rA   r2   rB   rC   s   @r%   rR   rR   C  s    : bI
 0404+/ *.  (} #9-	
 #4. X&. >B3H%3,4UO3	%	&3 3r&   rR   )r:   r=   r<   collections.abcr   typingr   r   telegram._chatr   telegram._telegramobjectr   telegram._userr   telegram._utils.argumentparsingr	   telegram._utils.datetimer
   r   telegram._utils.typesr   telegramr   r   r   rE   rH   rR    r&   r%   <module>rb      sd   & N  $ *  3  > Q *%z3~ z3zn 8D3n D3NF3 F3r&   