o
    Zzj+B  ã                   @   sÐ   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rFddlmZ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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                       s¨   e Zd ZdZdZ						dddœdee dejde	de
dB d	e
dB d
edB dee dB de	dB de	dB dedB f‡ fdd„Zeddedddd f‡ fdd„ƒZ‡  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
                   sj   t ƒ j|
d� 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__© úM/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/_giveaway.pyr   j   s   

ýzGiveaway.__init__ÚdataÚbotú
Bot | NoneÚreturnc                    sN   |   |¡}t|ƒ}t| d¡t|ƒ|d< t| d¡|d�|d< tƒ j||d�S )ú,See :meth:`telegram.TelegramObject.de_json`.r   r   ©Útzinfo©r&   r'   )Ú_parse_datar
   r   Úgetr   r   r   Úde_json©Úclsr&   r'   Ú
loc_tzinfor"   r$   r%   r0   Œ   s   


ÿzGiveaway.de_json)NNNNNN©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   ÚdtmÚdatetimeÚintÚboolÚstrr   r   Úclassmethodr0   Ú__classcell__r$   r$   r"   r%   r   $   sD    9öôþýüûúù
ø	÷
öô"&r   c                       s>   e Zd ZdZdZd	ddœdedB dedB f‡ fdd„Z‡  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                   s    t ƒ j|d� || _|  ¡  d S r   )r   r   r   r    )r!   r   r   r"   r$   r%   r   ¯   s   zGiveawayCreated.__init__r4   )	r5   r6   r7   r8   r9   r<   r   r   r@   r$   r$   r"   r%   rA   œ   s    .rA   c                       s¶   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B dedB dedB dedB dedB dedB dedB dedB f‡ fdd„Zeddedddd f‡ fdd„ƒZ‡  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   rD   rE   r   r   rH   rC   r   rF   r   rG   r   r   r   c                   s€   t ƒ j|d� || _|| _|| _|| _t|ƒ| _|| _|| _	|| _
|	| _|
| _|| _|| _| j| j| j| j| jf| _|  ¡  d S r   )r   r   rD   rE   r   r   r   rH   rC   r   rF   r   rG   r   r   r   r    )r!   rD   rE   r   r   rH   rC   r   rF   r   rG   r   r   r   r"   r$   r%   r   ý   s(   
ûzGiveawayWinners.__init__r&   r'   r(   r)   c                    sd   |   |¡}t|ƒ}t| d¡t|ƒ|d< t| d¡t|ƒ|d< t| d¡|d�|d< tƒ j	||d�S )r*   rD   rH   r   r+   r-   )
r.   r
   r   r/   r   r   r   r   r   r0   r1   r"   r$   r%   r0   '  s   


ÿzGiveawayWinners.de_json)NNNNNNNr4   )r5   r6   r7   r8   r9   r   r<   r:   r;   r   r   r=   r>   r   r   r?   r0   r@   r$   r$   r"   r%   rB   ¶   sR    7óñþýüûúùø	÷
öõôóñ*&rB   c                       st   e Zd ZdZdZ			dddœdededB ddd	edB d
edB f
‡ fdd„Ze	ddedddd f‡ fdd„ƒZ
‡  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_giveawayrF   r   Nr   r   rF   rJ   zMessage | NonerK   r   c                   s@   t ƒ j|d� || _|| _|| _|| _| j| jf| _|  ¡  d S r   )r   r   r   rF   rJ   rK   r   r    )r!   r   rF   rJ   rK   r   r"   r$   r%   r   X  s   	þzGiveawayCompleted.__init__r&   r'   r(   r)   c                    s<   |   |¡}ddlm} t| d¡||ƒ|d< tƒ j||d�S )r*   r   )r   rJ   r-   )r.   Útelegram._messager   r   r/   r   r0   )r2   r&   r'   r   r"   r$   r%   r0   o  s   
zGiveawayCompleted.de_json)NNNr4   )r5   r6   r7   r8   r9   r<   r=   r   r   r?   r0   r@   r$   r$   r"   r%   rI   8  s*    ûùþýüûù&rI   )r8   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   rA   rB   rI   r$   r$   r$   r%   Ú<module>   s"   x 