U
    dd,                     @   sT   d 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
 G dd deZd	S )
zIThis module contains an object that represents a Telegram ChatPermission.    )Optional)TelegramObject)JSONDict)warn)PTBDeprecationWarningc                       s   e Zd ZdZdZdddeeeeeeeeeeeeeeeed fddZeed fd	d
Z	e
d fddZed dddZed dddZ  ZS )ChatPermissionsa  Describes actions that a non-administrator user is allowed to take in a chat.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`can_send_messages`, :attr:`can_send_media_messages`,
    :attr:`can_send_polls`, :attr:`can_send_other_messages`, :attr:`can_add_web_page_previews`,
    :attr:`can_change_info`, :attr:`can_invite_users`, :attr:`can_pin_messages`, and
    :attr:`can_manage_topics` are equal.

    .. versionchanged:: 20.0
        :attr:`can_manage_topics` is considered as well when comparing objects of
        this type in terms of equality.
    .. deprecated:: 20.1
        :attr:`can_send_audios`, :attr:`can_send_documents`, :attr:`can_send_photos`,
        :attr:`can_send_videos`, :attr:`can_send_video_notes` and :attr:`can_send_voice_notes`
        will be considered as well when comparing objects of this type in terms of equality in
        V21.

    Note:
        Though not stated explicitly in the official docs, Telegram changes not only the
        permissions that are set, but also sets all the others to :obj:`False`. However, since not
        documented, this behavior may change unbeknown to PTB.

    Args:
        can_send_messages (:obj:`bool`, optional): :obj:`True`, if the user is allowed to send text
            messages, contacts, locations and venues.
        can_send_media_messages (:obj:`bool`, optional): :obj:`True`, if the user is allowed to
            send audios, documents, photos, videos, video notes and voice notes, implies
            :attr:`can_send_messages`.

            .. deprecated:: 20.1
               Bot API 6.5 replaced this argument with granular media settings.
        can_send_polls (:obj:`bool`, optional): :obj:`True`, if the user is allowed to send polls,
            implies :attr:`can_send_messages`.
        can_send_other_messages (:obj:`bool`, optional): :obj:`True`, if the user is allowed to
            send animations, games, stickers and use inline bots, implies
            :attr:`can_send_media_messages`.
        can_add_web_page_previews (:obj:`bool`, optional): :obj:`True`, if the user is allowed to
            add web page previews to their messages, implies :attr:`can_send_media_messages`.
        can_change_info (:obj:`bool`, optional): :obj:`True`, if the user is allowed to change the
            chat title, photo and other settings. Ignored in public supergroups.
        can_invite_users (:obj:`bool`, optional): :obj:`True`, if the user is allowed to invite new
            users to the chat.
        can_pin_messages (:obj:`bool`, optional): :obj:`True`, if the user is allowed to pin
            messages. Ignored in public supergroups.
        can_manage_topics (:obj:`bool`, optional): :obj:`True`, if the user is allowed
            to create forum topics. If omitted defaults to the value of
            :attr:`can_pin_messages`.

            .. versionadded:: 20.0
        can_send_audios (:obj:`bool`): :obj:`True`, if the user is allowed to send audios.

            .. versionadded:: 20.1
        can_send_documents (:obj:`bool`): :obj:`True`, if the user is allowed to send documents.

            .. versionadded:: 20.1
        can_send_photos (:obj:`bool`): :obj:`True`, if the user is allowed to send photos.

            .. versionadded:: 20.1
        can_send_videos (:obj:`bool`): :obj:`True`, if the user is allowed to send videos.

            .. versionadded:: 20.1
        can_send_video_notes (:obj:`bool`): :obj:`True`, if the user is allowed to send video
            notes.

            .. versionadded:: 20.1
        can_send_voice_notes (:obj:`bool`): :obj:`True`, if the user is allowed to send voice
            notes.

            .. versionadded:: 20.1

    Attributes:
        can_send_messages (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to send text
            messages, contacts, locations and venues.
        can_send_media_messages (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to
            send audios, documents, photos, videos, video notes and voice notes, implies
            :attr:`can_send_messages`.

            .. deprecated:: 20.1
               Bot API 6.5 replaced this attribute with granular media settings.
        can_send_polls (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to send polls,
            implies :attr:`can_send_messages`.
        can_send_other_messages (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to
            send animations, games, stickers and use inline bots, implies
            :attr:`can_send_media_messages`.
        can_add_web_page_previews (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to
            add web page previews to their messages, implies :attr:`can_send_media_messages`.
        can_change_info (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to change the
            chat title, photo and other settings. Ignored in public supergroups.
        can_invite_users (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to invite
            new users to the chat.
        can_pin_messages (:obj:`bool`): Optional. :obj:`True`, if the user is allowed to pin
            messages. Ignored in public supergroups.
        can_manage_topics (:obj:`bool`): Optional. :obj:`True`, if the user is allowed
            to create forum topics. If omitted defaults to the value of
            :attr:`can_pin_messages`.

            .. versionadded:: 20.0
        can_send_audios (:obj:`bool`): :obj:`True`, if the user is allowed to send audios.

            .. versionadded:: 20.1
        can_send_documents (:obj:`bool`): :obj:`True`, if the user is allowed to send documents.

            .. versionadded:: 20.1
        can_send_photos (:obj:`bool`): :obj:`True`, if the user is allowed to send photos.

            .. versionadded:: 20.1
        can_send_videos (:obj:`bool`): :obj:`True`, if the user is allowed to send videos.

            .. versionadded:: 20.1
        can_send_video_notes (:obj:`bool`): :obj:`True`, if the user is allowed to send video
            notes.

            .. versionadded:: 20.1
        can_send_voice_notes (:obj:`bool`): :obj:`True`, if the user is allowed to send voice
            notes.

            .. versionadded:: 20.1

    )can_send_other_messagescan_invite_userscan_send_pollscan_send_messagescan_send_media_messagescan_change_infocan_pin_messagescan_add_web_page_previewscan_manage_topicscan_send_audioscan_send_documentscan_send_photoscan_send_videoscan_send_video_notescan_send_voice_notesN
api_kwargs)r   r   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
f	| _|   d S )Nr   )super__init__r   r   r
   r   r   r   r	   r   r   r   r   r   r   r   r   Z	_id_attrsZ_freeze)selfr   r   r
   r   r   r   r	   r   r   r   r   r   r   r   r   r   	__class__ =/tmp/pip-unpacked-wheel-e3anp165/telegram/_chatpermissions.pyr      s6    zChatPermissions.__init__)otherreturnc                    s   t dtdd t |S )NzdIn v21, granular media settings will be considered as well when comparing ChatPermissions instances.   )
stacklevel)r   r   r   __eq__)r   r    r   r   r   r$      s    zChatPermissions.__eq__)r!   c                    s
   t   S )N)r   __hash__)r   r   r   r   r%      s    zChatPermissions.__hash__c                 C   s   | d S )a  
        This method returns an :class:`ChatPermissions` instance with all attributes
        set to :obj:`True`. This is e.g. useful when unrestricting a chat member with
        :meth:`telegram.Bot.restrict_chat_member`.

        .. versionadded:: 20.0

        )TTTTTTTTTTTTTTTr   clsr   r   r   all_permissions   s    
zChatPermissions.all_permissionsc                 C   s   | d S )z
        This method returns an :class:`ChatPermissions` instance
        with all attributes set to :obj:`False`.

        .. versionadded:: 20.0
        )FFFFFFFFFFFFFFFr   r&   r   r   r   no_permissions   s    zChatPermissions.no_permissions)NNNNNNNNNNNNNNN)__name__
__module____qualname____doc__	__slots__boolr   r   objectr$   intr%   classmethodr(   r)   __classcell__r   r   r   r   r      sV   x               4	r   N)r-   typingr   Ztelegram._telegramobjectr   Ztelegram._utils.typesr   Ztelegram._utils.warningsr   Ztelegram.warningsr   r   r   r   r   r   <module>   s   