diff --git a/pyrogram/types/bots_and_keyboards/keyboard_button.py b/pyrogram/types/bots_and_keyboards/keyboard_button.py index cf40bf2b..f565a64a 100644 --- a/pyrogram/types/bots_and_keyboards/keyboard_button.py +++ b/pyrogram/types/bots_and_keyboards/keyboard_button.py @@ -99,15 +99,21 @@ class KeyboardButton(Object): if isinstance(b, raw.types.KeyboardButtonRequestPeer): if isinstance(b.peer_type, raw.types.RequestPeerTypeBroadcast): + user_privileges = getattr(b.peer_type, "user_admin_rights", None) + bot_privileges = getattr(b.peer_type, "bot_admin_rights", None) return KeyboardButton( text=b.text, request_chat=types.RequestPeerTypeChannel( is_creator=b.peer_type.creator, is_username=b.peer_type.has_username, - max=b.max_quantity + max=b.max_quantity, + user_privileges=user_privileges, + bot_privileges=bot_privileges ) ) if isinstance(b.peer_type, raw.types.RequestPeerTypeChat): + user_privileges = getattr(b.peer_type, "user_admin_rights", None) + bot_privileges = getattr(b.peer_type, "bot_admin_rights", None) return KeyboardButton( text=b.text, request_chat=types.RequestPeerTypeChat( @@ -115,7 +121,9 @@ class KeyboardButton(Object): is_bot_participant=b.peer_type.bot_participant, is_username=b.peer_type.has_username, is_forum=b.peer_type.forum, - max=b.max_quantity + max=b.max_quantity, + user_privileges=user_privileges, + bot_privileges=bot_privileges ) ) @@ -135,13 +143,52 @@ class KeyboardButton(Object): elif self.request_location: return raw.types.KeyboardButtonRequestGeoLocation(text=self.text) elif self.request_chat: + user_privileges = self.request_peer.user_privileges + bot_privileges = self.request_peer.bot_privileges + + user_admin_rights = raw.types.ChatAdminRights( + change_info=user_privileges.can_change_info, + post_messages=user_privileges.can_post_messages, + post_stories=user_privileges.can_post_stories, + edit_messages=user_privileges.can_edit_messages, + edit_stories=user_privileges.can_post_stories, + delete_messages=user_privileges.can_delete_messages, + delete_stories=user_privileges.can_delete_stories, + ban_users=user_privileges.can_restrict_members, + invite_users=user_privileges.can_invite_users, + pin_messages=user_privileges.can_pin_messages, + add_admins=user_privileges.can_promote_members, + anonymous=user_privileges.is_anonymous, + manage_call=user_privileges.can_manage_video_chats, + other=user_privileges.can_manage_chat + ) if user_privileges else None + + bot_admin_rights = raw.types.ChatAdminRights( + change_info=bot_privileges.can_change_info, + post_messages=bot_privileges.can_post_messages, + post_stories=bot_privileges.can_post_stories, + edit_messages=bot_privileges.can_edit_messages, + edit_stories=bot_privileges.can_post_stories, + delete_messages=bot_privileges.can_delete_messages, + delete_stories=bot_privileges.can_delete_stories, + ban_users=bot_privileges.can_restrict_members, + invite_users=bot_privileges.can_invite_users, + pin_messages=bot_privileges.can_pin_messages, + add_admins=bot_privileges.can_promote_members, + anonymous=bot_privileges.is_anonymous, + manage_call=bot_privileges.can_manage_video_chats, + other=bot_privileges.can_manage_chat + ) if bot_privileges else None + if isinstance(self.request_chat, types.RequestPeerTypeChannel): return raw.types.InputKeyboardButtonRequestPeer( text=self.text, button_id=self.request_chat.button_id, peer_type=raw.types.RequestPeerTypeBroadcast( creator=self.request_chat.is_creator, - has_username=self.request_chat.is_username + has_username=self.request_chat.is_username, + user_admin_rights=user_admin_rights, + bot_admin_rights=bot_admin_rights ), max_quantity=self.request_chat.max, name_requested=self.request_chat.is_name_requested, @@ -155,7 +202,9 @@ class KeyboardButton(Object): creator=self.request_chat.is_creator, bot_participant=self.request_chat.is_bot_participant, has_username=self.request_chat.is_username, - forum=self.request_chat.is_forum + forum=self.request_chat.is_forum, + user_admin_rights=user_admin_rights, + bot_admin_rights=bot_admin_rights ), max_quantity=self.request_chat.max, name_requested=self.request_chat.is_name_requested, diff --git a/pyrogram/types/bots_and_keyboards/request_peer_type_channel.py b/pyrogram/types/bots_and_keyboards/request_peer_type_channel.py index c7283ee7..d21e77a0 100644 --- a/pyrogram/types/bots_and_keyboards/request_peer_type_channel.py +++ b/pyrogram/types/bots_and_keyboards/request_peer_type_channel.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrofork. If not, see . +from pyrogram import types + from ..object import Object @@ -47,17 +49,25 @@ class RequestPeerTypeChannel(Object): is_photo_requested (``bool``, *optional*): If True, Channel photo is requested. default True. + + user_privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): + Privileged actions that an user administrator is able to take. + + bot_privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): + Privileged actions that a bot administrator is able to take. """ # TODO user_admin_rights, bot_admin_rights def __init__( self, - button_id: int=0, - is_creator: bool=None, - is_username: bool=None, - max: int=1, - is_name_requested: bool=True, - is_username_requested: bool=True, - is_photo_requested: bool=True + button_id: int = 0, + is_creator: bool = None, + is_username: bool = None, + max: int = 1, + is_name_requested: bool = True, + is_username_requested: bool = True, + is_photo_requested: bool = True, + user_privileges: "types.ChatPrivileges" = None, + bot_privileges: "types.ChatPrivileges" = None ): super().__init__() @@ -68,3 +78,6 @@ class RequestPeerTypeChannel(Object): self.is_name_requested = is_name_requested self.is_username_requested = is_username_requested self.is_photo_requested = is_photo_requested + self.user_privileges = user_privileges + self.bot_privileges = bot_privileges + diff --git a/pyrogram/types/bots_and_keyboards/request_peer_type_chat.py b/pyrogram/types/bots_and_keyboards/request_peer_type_chat.py index 59d87300..cc800e4f 100644 --- a/pyrogram/types/bots_and_keyboards/request_peer_type_chat.py +++ b/pyrogram/types/bots_and_keyboards/request_peer_type_chat.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrofork. If not, see . +from pyrogram import types + from ..object import Object @@ -53,19 +55,27 @@ class RequestPeerTypeChat(Object): is_photo_requested (``bool``, *optional*): If True, Chat photo is requested. default True. + + user_privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): + Privileged actions that an user administrator is able to take. + + bot_privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): + Privileged actions that a bot administrator is able to take. """ # TODO user_admin_rights, bot_admin_rights def __init__( self, - button_id: int=0, - is_creator: bool=None, - is_bot_participant: bool=None, - is_username: bool=None, - is_forum: bool=None, - max: int=1, - is_name_requested: bool=True, - is_username_requested: bool=True, - is_photo_requested: bool=True + button_id: int = 0, + is_creator: bool = None, + is_bot_participant: bool = None, + is_username: bool = None, + is_forum: bool = None, + max: int = 1, + is_name_requested: bool = True, + is_username_requested: bool = True, + is_photo_requested: bool = True, + user_privileges: "types.ChatPrivileges" = None, + bot_privileges: "types.ChatPrivileges" = None ): super().__init__() @@ -78,3 +88,5 @@ class RequestPeerTypeChat(Object): self.is_name_requested = is_name_requested self.is_username_requested = is_username_requested self.is_photo_requested = is_photo_requested + self.user_privileges = user_privileges + self.bot_privileges = bot_privileges