o
    ZzjÐi  ã                   @   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 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mZ ddlmZ erXd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%dS )z;This module contains the Telegram Business related classes.é    N)ÚSequence)ÚTYPE_CHECKING)ÚZoneInfo)ÚChat)ÚLocation)ÚSticker)ÚTelegramObject)ÚUser)Úde_json_optionalÚde_list_optionalÚparse_sequence_arg)Úextract_tzinfo_from_defaultsÚfrom_timestampÚget_zone_info)ÚJSONDict)ÚBotc                !       sÂ   e Zd ZdZdZ														dddœ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 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‡  ZS )ÚBusinessBotRightsaW  
    This object represents the rights of a business bot.

    Objects of this class are comparable in terms of equality.
    Two objects of this class are considered equal, if all their attributes are equal.

    .. versionadded:: 22.1

    Args:
        can_reply (:obj:`bool`, optional): True, if the bot can send and edit messages in the
            private chats that had incoming messages in the last 24 hours.
        can_read_messages (:obj:`bool`, optional): True, if the bot can mark incoming private
            messages as read.
        can_delete_sent_messages (:obj:`bool`, optional): True, if the bot can delete messages
            sent by the bot.
        can_delete_all_messages (:obj:`bool`, optional): True, if the bot can delete all private
            messages in managed chats.
        can_edit_name (:obj:`bool`, optional): True, if the bot can edit the first and last name
            of the business account.
        can_edit_bio (:obj:`bool`, optional): True, if the bot can edit the bio of the
            business account.
        can_edit_profile_photo (:obj:`bool`, optional): True, if the bot can edit the profile
            photo of the business account.
        can_edit_username (:obj:`bool`, optional): True, if the bot can edit the username of the
            business account.
        can_change_gift_settings (:obj:`bool`, optional): True, if the bot can change the privacy
            settings pertaining to gifts for the business account.
        can_view_gifts_and_stars (:obj:`bool`, optional): True, if the bot can view gifts and the
            amount of Telegram Stars owned by the business account.
        can_convert_gifts_to_stars (:obj:`bool`, optional): True, if the bot can convert regular
            gifts owned by the business account to Telegram Stars.
        can_transfer_and_upgrade_gifts (:obj:`bool`, optional): True, if the bot can transfer and
            upgrade gifts owned by the business account.
        can_transfer_stars (:obj:`bool`, optional): True, if the bot can transfer Telegram Stars
            received by the business account to its own account, or use them to upgrade and
            transfer gifts.
        can_manage_stories (:obj:`bool`, optional): True, if the bot can post, edit and delete
            stories on behalf of the business account.

    Attributes:
        can_reply (:obj:`bool`): Optional. True, if the bot can send and edit messages in the
            private chats that had incoming messages in the last 24 hours.
        can_read_messages (:obj:`bool`): Optional. True, if the bot can mark incoming private
            messages as read.
        can_delete_sent_messages (:obj:`bool`): Optional. True, if the bot can delete messages
            sent by the bot.
        can_delete_all_messages (:obj:`bool`): Optional. True, if the bot can delete all private
            messages in managed chats.
        can_edit_name (:obj:`bool`): Optional. True, if the bot can edit the first and last name
            of the business account.
        can_edit_bio (:obj:`bool`): Optional. True, if the bot can edit the bio of the
            business account.
        can_edit_profile_photo (:obj:`bool`): Optional. True, if the bot can edit the profile
            photo of the business account.
        can_edit_username (:obj:`bool`): Optional. True, if the bot can edit the username of the
            business account.
        can_change_gift_settings (:obj:`bool`): Optional. True, if the bot can change the privacy
            settings pertaining to gifts for the business account.
        can_view_gifts_and_stars (:obj:`bool`): Optional. True, if the bot can view gifts and the
            amount of Telegram Stars owned by the business account.
        can_convert_gifts_to_stars (:obj:`bool`): Optional. True, if the bot can convert regular
            gifts owned by the business account to Telegram Stars.
        can_transfer_and_upgrade_gifts (:obj:`bool`): Optional. True, if the bot can transfer and
            upgrade gifts owned by the business account.
        can_transfer_stars (:obj:`bool`): Optional. True, if the bot can transfer Telegram Stars
            received by the business account to its own account, or use them to upgrade and
            transfer gifts.
        can_manage_stories (:obj:`bool`): Optional. True, if the bot can post, edit and delete
            stories on behalf of the business account.
    )Úcan_change_gift_settingsÚcan_convert_gifts_to_starsÚcan_delete_all_messagesÚcan_delete_sent_messagesÚcan_edit_bioÚcan_edit_nameÚcan_edit_profile_photoÚcan_edit_usernameÚcan_manage_storiesÚcan_read_messagesÚ	can_replyÚcan_transfer_and_upgrade_giftsÚcan_transfer_starsÚcan_view_gifts_and_starsN©Ú
api_kwargsr   r   r   r   r   r   r   r   r   r    r   r   r   r   r"   c                   s¬   t ƒ j|d� || _|| _|| _|| _|| _|| _|| _|| _	|	| _
|
| _|| _|| _|| _|| _| j| j| j| j| j| j| j| j	| j
| j| j| j| j| jf| _|  ¡  d S ©Nr!   )ÚsuperÚ__init__r   r   r   r   r   r   r   r   r   r    r   r   r   r   Ú	_id_attrsÚ_freeze)Úselfr   r   r   r   r   r   r   r   r   r    r   r   r   r   r"   ©Ú	__class__© úM/var/www/kodo/tsheker/venv/lib/python3.10/site-packages/telegram/_business.pyr%   ‰   s>   òzBusinessBotRights.__init__)NNNNNNNNNNNNNN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Úboolr   r%   Ú__classcell__r+   r+   r)   r,   r   0   sd    Gñïþýüûúùø	÷
öõôóòñïr   c                       sv   e Zd ZdZdZ	dddœdeddded	ejd
e	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 )ÚBusinessConnectionaÈ  
    Describes the connection of the bot with a business account.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal if their :attr:`id`, :attr:`user`, :attr:`user_chat_id`, :attr:`date`,
    :attr:`rights`, and :attr:`is_enabled` are equal.

    .. versionadded:: 21.1
    .. versionchanged:: 22.1
        Equality comparison now considers :attr:`rights` instead of ``can_reply``.

    .. versionremoved:: 22.3
       Removed argument and attribute ``can_reply`` deprecated  by API 9.0.

    Args:
        id (:obj:`str`): Unique identifier of the business connection.
        user (:class:`telegram.User`): Business account user that created the business connection.
        user_chat_id (:obj:`int`): Identifier of a private chat with the user who created the
            business connection.
        date (:obj:`datetime.datetime`): Date the connection was established in Unix time.
        is_enabled (:obj:`bool`): True, if the connection is active.
        rights (:class:`BusinessBotRights`, optional): Rights of the business bot.

            .. versionadded:: 22.1

    Attributes:
        id (:obj:`str`): Unique identifier of the business connection.
        user (:class:`telegram.User`): Business account user that created the business connection.
        user_chat_id (:obj:`int`): Identifier of a private chat with the user who created the
            business connection.
        date (:obj:`datetime.datetime`): Date the connection was established in Unix time.
        is_enabled (:obj:`bool`): True, if the connection is active.
        rights (:class:`BusinessBotRights`): Optional. Rights of the business bot.

            .. versionadded:: 22.1
    )ÚdateÚidÚ
is_enabledÚrightsÚuserÚuser_chat_idNr!   r6   r9   r	   r:   r5   r7   r8   r"   c                   s\   t ƒ j|d� || _|| _|| _|| _|| _|| _| j| j| j| j| j| jf| _|  	¡  d S r#   )
r$   r%   r6   r9   r:   r5   r7   r8   r&   r'   )r(   r6   r9   r:   r5   r7   r8   r"   r)   r+   r,   r%   ï   s   ú	zBusinessConnection.__init__ÚdataÚbotú
Bot | NoneÚreturnc                    sd   |   |¡}t|ƒ}t| d¡|d�|d< t| d¡t|ƒ|d< t| d¡t|ƒ|d< tƒ j||d�S )ú,See :meth:`telegram.TelegramObject.de_json`.r5   ©Útzinfor9   r8   ©r;   r<   )	Ú_parse_datar   r   Úgetr
   r	   r   r$   Úde_json)Úclsr;   r<   Ú
loc_tzinfor)   r+   r,   rE     s   
zBusinessConnection.de_json©N)r-   r.   r/   r0   r1   ÚstrÚintÚdtmÚdatetimer2   r   r   r%   ÚclassmethodrE   r3   r+   r+   r)   r,   r4   À   s.    %ù	÷þýüûúù	÷&r4   c                
       sd   e Zd ZdZdZddœdededee de	dB f‡ fd	d
„Z
edde	dddd f‡ fdd„ƒZ‡  ZS )ÚBusinessMessagesDeleteda€  
    This object is received when messages are deleted from a connected business account.

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

    .. versionadded:: 21.1

    Args:
        business_connection_id (:obj:`str`): Unique identifier of the business connection.
        chat (:class:`telegram.Chat`): Information about a chat in the business account. The bot
            may not have access to the chat or the corresponding user.
        message_ids (Sequence[:obj:`int`]): A list of identifiers of the deleted messages in the
            chat of the business account.

    Attributes:
        business_connection_id (:obj:`str`): Unique identifier of the business connection.
        chat (:class:`telegram.Chat`): Information about a chat in the business account. The bot
            may not have access to the chat or the corresponding user.
        message_ids (tuple[:obj:`int`]): A list of identifiers of the deleted messages in the
            chat of the business account.
    )Úbusiness_connection_idÚchatÚmessage_idsNr!   rO   rP   rQ   r"   c                   sB   t ƒ j|d� || _|| _t|ƒ| _| j| j| jf| _|  ¡  d S r#   )r$   r%   rO   rP   r   rQ   r&   r'   )r(   rO   rP   rQ   r"   r)   r+   r,   r%   ;  s   
ýz BusinessMessagesDeleted.__init__r;   r<   r=   r>   c                    ó0   |   |¡}t| d¡t|ƒ|d< tƒ j||d�S )r?   rP   rB   )rC   r
   rD   r   r$   rE   ©rF   r;   r<   r)   r+   r,   rE   P  ó   
zBusinessMessagesDeleted.de_jsonrH   )r-   r.   r/   r0   r1   rI   r   r   rJ   r   r%   rM   rE   r3   r+   r+   r)   r,   rN     s    úþýüú&rN   c                       st   e Zd ZdZdZ			dddœ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 )ÚBusinessIntroa3  
    This object contains information about the start page settings of a Telegram Business account.

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

    .. versionadded:: 21.1

    Args:
        title (:obj:`str`, optional): Title text of the business intro.
        message (:obj:`str`, optional): Message text of the business intro.
        sticker (:class:`telegram.Sticker`, optional): Sticker of the business intro.

    Attributes:
        title (:obj:`str`): Optional. Title text of the business intro.
        message (:obj:`str`): Optional. Message text of the business intro.
        sticker (:class:`telegram.Sticker`): Optional. Sticker of the business intro.
    )ÚmessageÚstickerÚtitleNr!   rX   rV   rW   r"   c                   s>   t ƒ j|d� || _|| _|| _| j| j| jf| _|  ¡  d S r#   )r$   r%   rX   rV   rW   r&   r'   )r(   rX   rV   rW   r"   r)   r+   r,   r%   u  s   zBusinessIntro.__init__r;   r<   r=   r>   c                    rR   )r?   rW   rB   )rC   r
   rD   r   r$   rE   rS   r)   r+   r,   rE   †  rT   zBusinessIntro.de_json)NNNrH   )r-   r.   r/   r0   r1   rI   r   r   r%   rM   rE   r3   r+   r+   r)   r,   rU   Z  s&    üúþýüú&rU   c                	       s`   e Zd ZdZdZ	dddœdedddedB f‡ fd	d
„Zeddedddd f‡ fdd„ƒZ	‡  Z
S )ÚBusinessLocationaD  
    This object contains information about the location of a Telegram Business account.

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

    .. versionadded:: 21.1

    Args:
        address (:obj:`str`): Address of the business.
        location (:class:`telegram.Location`, optional): Location of the business.

    Attributes:
        address (:obj:`str`): Address of the business.
        location (:class:`telegram.Location`): Optional. Location of the business.
    )ÚaddressÚlocationNr!   rZ   r[   zLocation | Noner"   c                   s0   t ƒ j|d� || _|| _| jf| _|  ¡  d S r#   )r$   r%   rZ   r[   r&   r'   )r(   rZ   r[   r"   r)   r+   r,   r%   ¨  s
   
zBusinessLocation.__init__r;   r<   r=   r>   c                    rR   )r?   r[   rB   )rC   r
   rD   r   r$   rE   rS   r)   r+   r,   rE   ·  rT   zBusinessLocation.de_jsonrH   )r-   r.   r/   r0   r1   rI   r   r%   rM   rE   r3   r+   r+   r)   r,   rY   �  s    ýûþýû&rY   c                       s�   e Zd ZdZdZddœdedededB f‡ fdd	„Zd
edeeeef fdd„Z	e
deeeef fdd„ƒZe
deeeef fdd„ƒZ‡  ZS )ÚBusinessOpeningHoursIntervala|  
    This object describes an interval of time during which a business is open.

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

    .. versionadded:: 21.1

    Examples:
        A day has (24 * 60 =) 1440 minutes, a week has (7 * 1440 =) 10080 minutes.
        Starting the minute's sequence from Monday, example values of
        :attr:`opening_minute`, :attr:`closing_minute` will map to the following day times:

        * Monday - 8am to 8:30pm:
            - ``opening_minute = 480`` :guilabel:`8 * 60`
            - ``closing_minute = 1230`` :guilabel:`20 * 60 + 30`
        * Tuesday - 24 hours:
            - ``opening_minute = 1440`` :guilabel:`24 * 60`
            - ``closing_minute = 2879`` :guilabel:`2 * 24 * 60 - 1`
        * Sunday - 12am - 11:58pm:
            - ``opening_minute = 8640`` :guilabel:`6 * 24 * 60`
            - ``closing_minute = 10078`` :guilabel:`7 * 24 * 60 - 2`

    Args:
        opening_minute (:obj:`int`): The minute's sequence number in a week, starting on Monday,
            marking the start of the time interval during which the business is open;
            0 - 7 * 24 * 60.
        closing_minute (:obj:`int`): The minute's
            sequence number in a week, starting on Monday, marking the end of the time interval
            during which the business is open; 0 - 8 * 24 * 60

    Attributes:
        opening_minute (:obj:`int`): The minute's sequence number in a week, starting on Monday,
            marking the start of the time interval during which the business is open;
            0 - 7 * 24 * 60.
        closing_minute (:obj:`int`): The minute's
            sequence number in a week, starting on Monday, marking the end of the time interval
            during which the business is open; 0 - 8 * 24 * 60
    )Ú_closing_timeÚ_opening_timeÚclosing_minuteÚopening_minuteNr!   r`   r_   r"   c                   s@   t ƒ j|d� || _|| _d | _d | _| j| jf| _|  ¡  d S r#   )r$   r%   r`   r_   r^   r]   r&   r'   )r(   r`   r_   r"   r)   r+   r,   r%   í  s   z%BusinessOpeningHoursInterval.__init__Úminuter>   c                 C   s   |d |d d |d d fS )Né   é<   r+   )r(   ra   r+   r+   r,   Ú_parse_minuteÿ  s   z*BusinessOpeningHoursInterval._parse_minutec                 C   ó   | j du r|  | j¡| _ | j S )aW  Convenience attribute. A :obj:`tuple` parsed from :attr:`opening_minute`. It contains
        the `weekday`, `hour` and `minute` in the same ranges as :attr:`datetime.datetime.weekday`,
        :attr:`datetime.datetime.hour` and :attr:`datetime.datetime.minute`

        Returns:
            tuple[:obj:`int`, :obj:`int`, :obj:`int`]:
        N)r^   rd   r`   ©r(   r+   r+   r,   Úopening_time  ó   
	z)BusinessOpeningHoursInterval.opening_timec                 C   re   )aW  Convenience attribute. A :obj:`tuple` parsed from :attr:`closing_minute`. It contains
        the `weekday`, `hour` and `minute` in the same ranges as :attr:`datetime.datetime.weekday`,
        :attr:`datetime.datetime.hour` and :attr:`datetime.datetime.minute`

        Returns:
            tuple[:obj:`int`, :obj:`int`, :obj:`int`]:
        N)r]   rd   r_   rf   r+   r+   r,   Úclosing_time  rh   z)BusinessOpeningHoursInterval.closing_time)r-   r.   r/   r0   r1   rJ   r   r%   Útuplerd   Úpropertyrg   ri   r3   r+   r+   r)   r,   r\   Á  s     )ûþýû"r\   c                
       sÀ   e Zd ZdZdZddœdedee dedB f‡ fdd	„Z	e
d
efdd„ƒZ	ddejdejeB dB d
eeejejf df fdd„Zdejd
efdd„Zeddeddd
d f‡ fdd„ƒZ‡  ZS )ÚBusinessOpeningHoursaS  
    This object describes the opening hours of a business.

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

    .. versionadded:: 21.1

    Args:
        time_zone_name (:obj:`str`): Unique name of the time zone for which the opening
            hours are defined.
        opening_hours (Sequence[:class:`telegram.BusinessOpeningHoursInterval`]): List of
            time intervals describing business opening hours.

    Attributes:
        time_zone_name (:obj:`str`): Unique name of the time zone for which the opening
            hours are defined.
        opening_hours (Sequence[:class:`telegram.BusinessOpeningHoursInterval`]): List of
            time intervals describing business opening hours.
    )Ú_cached_zone_infoÚopening_hoursÚtime_zone_nameNr!   ro   rn   r"   c                   s>   t ƒ j|d� || _t|ƒ| _d | _| j| jf| _|  ¡  d S r#   )r$   r%   ro   r   rn   rm   r&   r'   )r(   ro   rn   r"   r)   r+   r,   r%   6  s   ÿzBusinessOpeningHours.__init__r>   c                 C   s   | j d u rt| jƒ| _ | j S rH   )rm   r   ro   rf   r+   r+   r,   Ú
_zone_infoI  s   
zBusinessOpeningHours._zone_infor5   Ú	time_zone.c              	   C   sÔ   |  ¡ }g }t|tƒrt|ƒ}n
|du r| j}n|}| jD ]B}|j}|j}|d |kr,qtj	|j
|j|j|d |d | jd� |¡}	tj	|j
|j|j|d |d | jd� |¡}
| |	|
f¡ qtt|dd„ d�ƒS )	añ  Returns the opening hours intervals for a specific day as datetime objects.

        .. versionadded:: 22.5

        Args:
            date (:obj:`datetime.date`): The date to get opening hours for.
            time_zone (:obj:`datetime.tzinfo` | :obj:`str`, optional): Timezone to use for the
                returned datetime objects. If not specified, then :attr:`time_zone_name` be used.

        Returns:
            tuple[tuple[:obj:`datetime.datetime`, :obj:`datetime.datetime`], ...]:
            A tuple of datetime pairs representing opening and closing times for the specified day.
            Each pair consists of ``(opening_time, closing_time)``.
            Returns an empty tuple if there are no opening hours for the given day.
        Nr   é   é   )ÚyearÚmonthÚdayÚhourra   rA   c                 S   s   | d S )Nr   r+   )Úxr+   r+   r,   Ú<lambda>‹  s    z@BusinessOpeningHours.get_opening_hours_for_day.<locals>.<lambda>)Úkey)ÚweekdayÚ
isinstancerI   r   rp   rn   rg   ri   rK   rL   rt   ru   rv   Ú
astimezoneÚappendrj   Úsorted)r(   r5   rq   Úweek_dayÚresÚ	tz_targetÚintervalÚint_openÚ	int_closeÚresult_int_openÚresult_int_closer+   r+   r,   Úget_opening_hours_for_dayO  sD   


úù	úù	z.BusinessOpeningHours.get_opening_hours_for_dayrL   c                 C   sp   |j du r|j| jd�n| | j¡}| ¡ d |jd  |j }| jD ]}|j|  kr3|j	k r5 dS  q#q#dS )a²  Check if the business is open at the specified datetime.

        .. versionadded:: 22.5

        Args:
            datetime (:obj:`datetime.datetime`): The datetime to check.
                If the object is timezone-naive, it is assumed to be in the
                timezone specified by :attr:`time_zone_name`.

        Returns:
            :obj:`bool`: True if the business is open at the specified time, False otherwise.
        Nr@   rb   rc   TF)
rA   Úreplacerp   r}   r{   rw   ra   rn   r`   r_   )r(   rL   Údatetime_in_native_tzÚminute_of_weekrƒ   r+   r+   r,   Úis_open�  s   þ
ÿþÿ
ÿzBusinessOpeningHours.is_openr;   r<   r=   c                    rR   )r?   rn   rB   )rC   r   rD   r\   r$   rE   rS   r)   r+   r,   rE   ª  s
   
ÿzBusinessOpeningHours.de_jsonrH   )r-   r.   r/   r0   r1   rI   r   r\   r   r%   rk   r   rp   rK   r5   rA   rj   rL   rˆ   r2   rŒ   rM   rE   r3   r+   r+   r)   r,   rl     s0    ûþýûÿÿÿ
þ>&rl   )&r0   rL   rK   Úcollections.abcr   Útypingr   Úzoneinfor   Útelegram._chatr   Útelegram._files.locationr   Útelegram._files.stickerr   Útelegram._telegramobjectr   Útelegram._userr	   Útelegram._utils.argumentparsingr
   r   r   Útelegram._utils.datetimer   r   r   Útelegram._utils.typesr   Útelegramr   r   r4   rN   rU   rY   r\   rl   r+   r+   r+   r,   Ú<module>   s.    \>61\