diff --git a/pyrogram/methods/chats/set_chat_permissions.py b/pyrogram/methods/chats/set_chat_permissions.py index 9ab50ecb..2829184e 100644 --- a/pyrogram/methods/chats/set_chat_permissions.py +++ b/pyrogram/methods/chats/set_chat_permissions.py @@ -65,6 +65,59 @@ class SetChatPermissions: ) """ + if permissions.all_perms is not None: + send_audios=None + send_docs=None + send_games=None + send_gifs=None + send_inline=None + send_photos=None + send_plain=None + send_roundvideos=None + send_stickers=None + send_videos=None + send_voices=None + if permissions.all_perms: + send_messages=False + send_media=False + send_polls=False + embed_links=False + change_info=False + invite_users=False + pin_messages=False + manage_topics=False + send_inline=False + else: + send_messages=True + send_media=True + send_polls=True + embed_links=True + change_info=True + invite_users=True + pin_messages=True + manage_topics=True + send_inline=True + else: + send_messages=not permissions.can_send_messages if permissions.can_send_messages is not None else None + send_media=not permissions.can_send_media_messages if permissions.can_send_media_messages is not None else None + embed_links=not permissions.can_add_web_page_previews if permissions.can_add_web_page_previews is not None else not old_permissions.can_add_web_page_previews + send_polls=not permissions.can_send_polls if permissions.can_send_polls is not None else not old_permissions.can_send_polls + change_info=not permissions.can_change_info if permissions.can_change_info is not None else not old_permissions.can_change_info + invite_users=not permissions.can_invite_users if permissions.can_invite_users is not None else not old_permissions.can_invite_users + pin_messages=not permissions.can_pin_messages if permissions.can_pin_messages is not None else not old_permissions.can_pin_messages + manage_topics=not permissions.can_manage_topics if permissions.can_manage_topics is not None else not old_permissions.can_manage_topics + send_audios=not permissions.can_send_audios if permissions.can_send_audios is not None else not old_permissions.can_send_audios + send_docs=not permissions.can_send_docs if permissions.can_send_docs is not None else not old_permissions.can_send_docs + send_games=not permissions.can_send_games if permissions.can_send_games is not None else not old_permissions.can_send_games + send_gifs=not permissions.can_send_gifs if permissions.can_send_gifs is not None else not old_permissions.can_send_gifs + send_inline=not permissions.can_send_inline if permissions.can_send_inline is not None else not old_permissions.can_send_inline + send_photos=not permissions.can_send_photos if permissions.can_send_photos is not None else not old_permissions.can_send_photos + send_plain=not permissions.can_send_plain if permissions.can_send_plain is not None else not old_permissions.can_send_plain + send_roundvideos=not permissions.can_send_roundvideos if permissions.can_send_roundvideos is not None else not old_permissions.can_send_roundvideos + send_stickers=not permissions.can_send_stickers if permissions.can_send_stickers is not None else not old_permissions.can_send_stickers + send_videos=not permissions.can_send_videos if permissions.can_send_videos is not None else not old_permissions.can_send_videos + send_voices=not permissions.can_send_voices if permissions.can_send_voices is not None else not old_permissions.can_send_voices + old_permissions = (await self.get_chat(chat_id)).permissions r = await self.invoke( @@ -72,25 +125,25 @@ class SetChatPermissions: peer=await self.resolve_peer(chat_id), banned_rights=raw.types.ChatBannedRights( until_date=0, - send_messages=not permissions.can_send_messages if permissions.can_send_messages is not None else None, - send_media=not permissions.can_send_media_messages if permissions.can_send_media_messages is not None else None, - embed_links=not permissions.can_add_web_page_previews if permissions.can_add_web_page_previews is not None else not old_permissions.can_add_web_page_previews, - send_polls=not permissions.can_send_polls if permissions.can_send_polls is not None else not old_permissions.can_send_polls, - change_info=not permissions.can_change_info if permissions.can_change_info is not None else not old_permissions.can_change_info, - invite_users=not permissions.can_invite_users if permissions.can_invite_users is not None else not old_permissions.can_invite_users, - pin_messages=not permissions.can_pin_messages if permissions.can_pin_messages is not None else not old_permissions.can_pin_messages, - manage_topics=not permissions.can_manage_topics if permissions.can_manage_topics is not None else not old_permissions.can_manage_topics, - send_audios=not permissions.can_send_audios if permissions.can_send_audios is not None else not old_permissions.can_send_audios, - send_docs=not permissions.can_send_docs if permissions.can_send_docs is not None else not old_permissions.can_send_docs, - send_games=not permissions.can_send_games if permissions.can_send_games is not None else not old_permissions.can_send_games, - send_gifs=not permissions.can_send_gifs if permissions.can_send_gifs is not None else not old_permissions.can_send_gifs, - send_inline=not permissions.can_send_inline if permissions.can_send_inline is not None else not old_permissions.can_send_inline, - send_photos=not permissions.can_send_photos if permissions.can_send_photos is not None else not old_permissions.can_send_photos, - send_plain=not permissions.can_send_plain if permissions.can_send_plain is not None else not old_permissions.can_send_plain, - send_roundvideos=not permissions.can_send_roundvideos if permissions.can_send_roundvideos is not None else not old_permissions.can_send_roundvideos, - send_stickers=not permissions.can_send_stickers if permissions.can_send_stickers is not None else not old_permissions.can_send_stickers, - send_videos=not permissions.can_send_videos if permissions.can_send_videos is not None else not old_permissions.can_send_videos, - send_voices=not permissions.can_send_voices if permissions.can_send_voices is not None else not old_permissions.can_send_voices + send_messages=send_messages, + send_media=send_media, + embed_links=embed_links, + send_polls=send_polls, + change_info=change_info, + invite_users=invite_users, + pin_messages=pin_messages, + manage_topics=manage_topics, + send_audios=send_audios, + send_docs=send_docs, + send_games=send_games, + send_gifs=send_gifs, + send_inline=send_inline, + send_photos=send_photos, + send_plain=send_plain, + send_roundvideos=send_roundvideos, + send_stickers=send_stickers, + send_videos=send_videos, + send_voices=send_voices ) ) ) diff --git a/pyrogram/types/user_and_chats/chat_permissions.py b/pyrogram/types/user_and_chats/chat_permissions.py index 59a06403..42cbcac1 100644 --- a/pyrogram/types/user_and_chats/chat_permissions.py +++ b/pyrogram/types/user_and_chats/chat_permissions.py @@ -25,6 +25,9 @@ class ChatPermissions(Object): """Describes actions that a non-administrator user is allowed to take in a chat. Parameters: + all_perms (``bool``, *optional*): + True, if all permissions are allowed. + can_send_messages (``bool``, *optional*): True, if the user is allowed to send text messages, contacts, locations and venues. @@ -92,6 +95,7 @@ class ChatPermissions(Object): def __init__( self, *, + all_perms: bool = None, can_send_messages: bool = None, # Text, contacts, locations and venues can_send_media_messages: bool = None, # Audio files, documents, photos, videos, video notes and voice notes can_send_polls: bool = None, @@ -114,6 +118,7 @@ class ChatPermissions(Object): ): super().__init__(None) + self.all_perms = all_perms self.can_send_messages = can_send_messages self.can_send_media_messages = can_send_media_messages self.can_send_polls = can_send_polls @@ -137,7 +142,53 @@ class ChatPermissions(Object): @staticmethod def _parse(denied_permissions: "raw.base.ChatBannedRights") -> "ChatPermissions": if isinstance(denied_permissions, raw.types.ChatBannedRights): + all_permissions = None + all_params = [ + denied_permissions.send_messages, + denied_permissions.send_media, + denied_permissions.embed_links, + denied_permissions.send_polls, + denied_permissions.change_info, + denied_permissions.invite_users, + denied_permissions.pin_messages, + denied_permissions.send_audios, + denied_permissions.send_docs, + denied_permissions.send_games, + denied_permissions.send_gifs, + denied_permissions.send_inline, + denied_permissions.send_photos, + denied_permissions.send_plain, + denied_permissions.send_roundvideos, + denied_permissions.send_stickers, + denied_permissions.send_videos, + denied_permissions.send_voices + ] + all_params_not = [ + not denied_permissions.send_messages, + not denied_permissions.send_media, + not denied_permissions.embed_links, + not denied_permissions.send_polls, + not denied_permissions.change_info, + not denied_permissions.invite_users, + not denied_permissions.pin_messages, + not denied_permissions.send_audios, + not denied_permissions.send_docs, + not denied_permissions.send_games, + not denied_permissions.send_gifs, + not denied_permissions.send_inline, + not denied_permissions.send_photos, + not denied_permissions.send_plain, + not denied_permissions.send_roundvideos, + not denied_permissions.send_stickers, + not denied_permissions.send_videos, + not denied_permissions.send_voices + ] + if all(all_params): + all_permissions = False + elif all(all_params_not): + all_permissions = True return ChatPermissions( + all_perms=all_permissions, can_send_messages=not denied_permissions.send_messages, can_send_media_messages=not denied_permissions.send_media, can_add_web_page_previews=not denied_permissions.embed_links,