From ed6dad74266b7342c3c0d1b3dd66ea3a4cbcd4c9 Mon Sep 17 00:00:00 2001 From: xiaocai <52635310+X1A0CA1@users.noreply.github.com> Date: Thu, 13 Jun 2024 15:43:35 +0800 Subject: [PATCH 1/2] feat: Can set admin title when promote a chat member. --- pyrogram/methods/chats/promote_chat_member.py | 23 ++++++++++++------- pyrogram/types/user_and_chats/chat.py | 14 ++++++++--- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/pyrogram/methods/chats/promote_chat_member.py b/pyrogram/methods/chats/promote_chat_member.py index 9fe37180..34bb53bb 100644 --- a/pyrogram/methods/chats/promote_chat_member.py +++ b/pyrogram/methods/chats/promote_chat_member.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrofork. If not, see . -from typing import Union +from typing import Union, Optional import pyrogram from pyrogram import raw, types, errors @@ -25,10 +25,11 @@ from pyrogram import raw, types, errors class PromoteChatMember: async def promote_chat_member( - self: "pyrogram.Client", - chat_id: Union[int, str], - user_id: Union[int, str], - privileges: "types.ChatPrivileges" = None, + self: "pyrogram.Client", + chat_id: Union[int, str], + user_id: Union[int, str], + privileges: "types.ChatPrivileges" = None, + title: Optional[str] = None, ) -> bool: """Promote or demote a user in a supergroup or a channel. @@ -50,6 +51,11 @@ class PromoteChatMember: privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): New user privileges. + title: (``str``, *optional*): + A custom title that will be shown to all members instead of "Owner" or "Admin". + Pass None or "" (empty string) will keep the current title. + If you want to delete the custom title, use :meth:`~pyrogram.Client.set_administrator_title()` method. + Returns: ``bool``: True on success. @@ -76,9 +82,10 @@ class PromoteChatMember: except errors.RPCError: raw_chat_member = None - rank = None - if isinstance(raw_chat_member, raw.types.ChannelParticipantAdmin): + if not title and isinstance(raw_chat_member, raw.types.ChannelParticipantAdmin): rank = raw_chat_member.rank + else: + rank = title await self.invoke( raw.functions.channels.EditAdmin( @@ -101,7 +108,7 @@ class PromoteChatMember: delete_stories=privileges.can_delete_stories, other=privileges.can_manage_chat ), - rank=rank or "" + rank=rank ) ) diff --git a/pyrogram/types/user_and_chats/chat.py b/pyrogram/types/user_and_chats/chat.py index 5329ec2c..380f4591 100644 --- a/pyrogram/types/user_and_chats/chat.py +++ b/pyrogram/types/user_and_chats/chat.py @@ -953,7 +953,8 @@ class Chat(Object): async def promote_member( self, user_id: Union[int, str], - privileges: "types.ChatPrivileges" = None + privileges: "types.ChatPrivileges" = None, + title: Optional[str] = None, ) -> bool: """Bound method *promote_member* of :obj:`~pyrogram.types.Chat`. @@ -963,7 +964,8 @@ class Chat(Object): await client.promote_chat_member( chat_id=chat_id, - user_id=user_id + user_id=user_id, + title=admin_title ) Example: @@ -980,6 +982,11 @@ class Chat(Object): privileges (:obj:`~pyrogram.types.ChatPrivileges`, *optional*): New user privileges. + title (``str``, *optional*): + A custom title that will be shown to all members instead of "Owner" or "Admin". + Pass None or "" (empty string) will keep the current title. + If you want to delete the custom title, use :meth:`~pyrogram.Client.set_administrator_title()` method. + Returns: ``bool``: True on success. @@ -990,7 +997,8 @@ class Chat(Object): return await self._client.promote_chat_member( chat_id=self.id, user_id=user_id, - privileges=privileges + privileges=privileges, + title=title ) async def join(self): From d162ee154273479ff93282d7f12c29fe619cd45c Mon Sep 17 00:00:00 2001 From: xiaocai <52635310+X1A0CA1@users.noreply.github.com> Date: Thu, 13 Jun 2024 15:44:28 +0800 Subject: [PATCH 2/2] Docs Fix --- pyrogram/methods/utilities/run.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/methods/utilities/run.py b/pyrogram/methods/utilities/run.py index dee93b4d..addb2202 100644 --- a/pyrogram/methods/utilities/run.py +++ b/pyrogram/methods/utilities/run.py @@ -39,7 +39,7 @@ class Run: operation. This is almost the same as :py:obj:`asyncio.run` except for the fact that Pyrogram's ``run`` uses the current event loop instead of a new one. - If you want to run multiple clients at once, see :meth:`pyrogram.compose`. + If you want to run multiple clients at once, see :meth:`~pyrogram.compose`. Parameters: coroutine (``Coroutine``, *optional*):