diff --git a/pyrogram/methods/chats/set_chat_permissions.py b/pyrogram/methods/chats/set_chat_permissions.py index d8ec0cf02..bdc2f0216 100644 --- a/pyrogram/methods/chats/set_chat_permissions.py +++ b/pyrogram/methods/chats/set_chat_permissions.py @@ -54,12 +54,12 @@ async def set_chat_permissions( # Completely restrict chat await app.set_chat_permissions(chat_id, ChatPermissions()) - # Chat members can only send text messages and media messages + # Chat members can only send text messages and documents await app.set_chat_permissions( chat_id, ChatPermissions( can_send_messages=True, - can_send_media_messages=True + can_send_documents=True ) ) """ @@ -67,20 +67,7 @@ async def set_chat_permissions( r = await self.invoke( raw.functions.messages.EditChatDefaultBannedRights( peer=await self.resolve_peer(chat_id), - banned_rights=raw.types.ChatBannedRights( - until_date=0, - send_messages=not permissions.can_send_messages, - send_media=not permissions.can_send_media_messages, - send_stickers=not permissions.can_send_other_messages, - send_gifs=not permissions.can_send_other_messages, - send_games=not permissions.can_send_other_messages, - send_inline=not permissions.can_send_other_messages, - embed_links=not permissions.can_add_web_page_previews, - send_polls=not permissions.can_send_polls, - change_info=not permissions.can_change_info, - invite_users=not permissions.can_invite_users, - pin_messages=not permissions.can_pin_messages, - ) + banned_rights=permissions.write(False) ) ) diff --git a/pyrogram/types/user_and_chats/chat_permissions.py b/pyrogram/types/user_and_chats/chat_permissions.py index 07b655caf..bc0f779c0 100644 --- a/pyrogram/types/user_and_chats/chat_permissions.py +++ b/pyrogram/types/user_and_chats/chat_permissions.py @@ -16,10 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import logging from datetime import datetime from pyrogram import raw, utils from ..object import Object +log = logging.getLogger(__name__) + class ChatPermissions(Object): """Describes actions that a non-administrator user is allowed to take in a chat. @@ -70,9 +73,6 @@ class ChatPermissions(Object): True, if the user is allowed to create forum topics If omitted defaults to the value of can_pin_messages - can_send_media_messages (``bool``, *optional*): - True, if the user is allowed to send audios, documents, photos, videos, video notes and voice notes. - Implies *can_send_messages*. """ def __init__( @@ -92,7 +92,6 @@ def __init__( can_invite_users: bool = None, can_pin_messages: bool = None, can_manage_topics: bool = None, - can_send_media_messages: bool = None, # Audio files, documents, photos, videos, video notes and voice notes ): super().__init__(None) @@ -110,7 +109,6 @@ def __init__( self.can_invite_users = can_invite_users self.can_pin_messages = can_pin_messages self.can_manage_topics = can_manage_topics - self.can_send_media_messages = can_send_media_messages @staticmethod def _parse(denied_permissions: "raw.base.ChatBannedRights") -> "ChatPermissions": @@ -128,7 +126,6 @@ def _parse(denied_permissions: "raw.base.ChatBannedRights") -> "ChatPermissions" can_invite_users = False can_pin_messages = False can_manage_topics = False - can_send_media_messages = False if isinstance(denied_permissions, raw.types.ChatBannedRights): can_send_messages = not denied_permissions.send_messages @@ -161,14 +158,27 @@ def _parse(denied_permissions: "raw.base.ChatBannedRights") -> "ChatPermissions" can_send_videos = not denied_permissions.send_videos can_send_video_notes = not denied_permissions.send_roundvideos can_send_voice_notes = not denied_permissions.send_voices + send_aidem = any([ + can_send_audios, + can_send_documents, + can_send_photos, + can_send_videos, + can_send_video_notes, + can_send_voice_notes, + ]) + if not send_aidem: + can_send_messages = not any([ + denied_permissions.send_messages, + denied_permissions.send_plain + ]) else: - can_send_media_messages = not denied_permissions.send_media - can_send_audios = can_send_media_messages - can_send_documents = can_send_media_messages - can_send_photos = can_send_media_messages - can_send_videos = can_send_media_messages - can_send_video_notes = can_send_media_messages - can_send_voice_notes = can_send_media_messages + send_media = not denied_permissions.send_media + can_send_audios = send_media + can_send_documents = send_media + can_send_photos = send_media + can_send_videos = send_media + can_send_video_notes = send_media + can_send_voice_notes = send_media return ChatPermissions( can_send_messages=can_send_messages, @@ -185,7 +195,6 @@ def _parse(denied_permissions: "raw.base.ChatBannedRights") -> "ChatPermissions" can_invite_users=can_invite_users, can_pin_messages=can_pin_messages, can_manage_topics=can_manage_topics, - can_send_media_messages=can_send_media_messages ) def write( @@ -193,29 +202,80 @@ def write( use_independent_chat_permissions: bool, until_date: datetime = utils.zero_datetime() ) -> "raw.base.ChatBannedRights": - return raw.types.ChatBannedRights( - until_date=utils.datetime_to_timestamp(until_date), - send_messages=not permissions.can_send_messages, - send_media=not permissions.can_send_media_messages, - send_stickers=not permissions.can_send_other_messages, - send_gifs=not permissions.can_send_other_messages, - send_games=not permissions.can_send_other_messages, - send_inline=not permissions.can_send_other_messages, - embed_links=not permissions.can_add_web_page_previews, - send_polls=not permissions.can_send_polls, - change_info=not permissions.can_change_info, - invite_users=not permissions.can_invite_users, - pin_messages=not permissions.can_pin_messages, - manage_topics=( - permissions.can_manage_topics and - not permissions.can_manage_topics - ) or not permissions.can_pin_messages, - # view_messages=# TODO - send_audios=not permissions.can_send_audios,# TODO - send_docs=not permissions.can_send_documents,# TODO - send_photos=not permissions.can_send_photos,# TODO - send_videos=not permissions.can_send_videos,# TODO - send_roundvideos=not permissions.can_send_video_notes,# TODO - send_voices=not permissions.can_send_voice_notes,# TODO - # send_plain=# TODO + if use_independent_chat_permissions: + return raw.types.ChatBannedRights( + until_date=utils.datetime_to_timestamp(until_date), + send_messages=not permissions.can_send_messages, + send_media=False, + send_stickers=not permissions.can_send_other_messages, + send_gifs=not permissions.can_send_other_messages, + send_games=not permissions.can_send_other_messages, + send_inline=not permissions.can_send_other_messages, + embed_links=not permissions.can_add_web_page_previews, + send_polls=not permissions.can_send_polls, + change_info=not permissions.can_change_info, + invite_users=not permissions.can_invite_users, + pin_messages=not permissions.can_pin_messages, + manage_topics=( + permissions.can_manage_topics and + not permissions.can_manage_topics + ) or not permissions.can_pin_messages, + view_messages=False, + send_audios=not permissions.can_send_audios, + send_docs=not permissions.can_send_documents, + send_photos=not permissions.can_send_photos, + send_videos=not permissions.can_send_videos, + send_roundvideos=not permissions.can_send_video_notes, + send_voices=not permissions.can_send_voice_notes, + send_plain=not permissions.can_send_messages, + ) + else: + send_aidem = any([ + permissions.can_send_audios, + permissions.can_send_documents, + permissions.can_send_photos, + permissions.can_send_videos, + permissions.can_send_video_notes, + permissions.can_send_voice_notes, + ]) + return raw.types.ChatBannedRights( + until_date=utils.datetime_to_timestamp(until_date), + send_messages=False, + send_media=not send_aidem, + send_stickers=not permissions.can_send_other_messages, + send_gifs=not permissions.can_send_other_messages, + send_games=not permissions.can_send_other_messages, + send_inline=not permissions.can_send_other_messages, + embed_links=not permissions.can_add_web_page_previews, + send_polls=not permissions.can_send_polls, + change_info=not permissions.can_change_info, + invite_users=not permissions.can_invite_users, + pin_messages=not permissions.can_pin_messages, + manage_topics=( + permissions.can_manage_topics and + not permissions.can_manage_topics + ) or not permissions.can_pin_messages, + view_messages=False, + send_audios=not permissions.can_send_audios, + send_docs=not permissions.can_send_documents, + send_photos=not permissions.can_send_photos, + send_videos=not permissions.can_send_videos, + send_roundvideos=not permissions.can_send_video_notes, + send_voices=not permissions.can_send_voice_notes, + send_plain=not permissions.can_send_messages, + ) + + @property + def can_send_media_messages(permissions: "ChatPermissions"): + log.warning( + "can_send_media_messages property is deprecated. " + "Please use any of can_send_audios, can_send_documents, can_send_photos, can_send_videos, can_send_video_notes or can_send_voice_notes." ) + return any([ + permissions.can_send_audios, + permissions.can_send_documents, + permissions.can_send_photos, + permissions.can_send_videos, + permissions.can_send_video_notes, + permissions.can_send_voice_notes, + ])