2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-29 13:27:47 +00:00

Merge develop -> asyncio

This commit is contained in:
Dan 2019-09-07 17:10:28 +02:00
commit c163f16d7b
5 changed files with 107 additions and 4 deletions

View File

@ -126,3 +126,5 @@ WEBDOCUMENT_MIME_INVALID The web document mime type is invalid
BUTTON_URL_INVALID The button url is invalid BUTTON_URL_INVALID The button url is invalid
AUTH_BYTES_INVALID The authorization bytes are invalid AUTH_BYTES_INVALID The authorization bytes are invalid
CHANNELS_TOO_MUCH You have joined too many channels or supergroups CHANNELS_TOO_MUCH You have joined too many channels or supergroups
ADMIN_RANK_INVALID The custom administrator title is invalid or is longer than 16 characters
ADMIN_RANK_EMOJI_NOT_ALLOWED Emojis are not allowed in custom administrator titles
1 id message
126 BUTTON_URL_INVALID The button url is invalid
127 AUTH_BYTES_INVALID The authorization bytes are invalid
128 CHANNELS_TOO_MUCH You have joined too many channels or supergroups
129 ADMIN_RANK_INVALID The custom administrator title is invalid or is longer than 16 characters
130 ADMIN_RANK_EMOJI_NOT_ALLOWED Emojis are not allowed in custom administrator titles

View File

@ -31,6 +31,7 @@ from .get_chat_members import GetChatMembers
from .get_chat_members_count import GetChatMembersCount from .get_chat_members_count import GetChatMembersCount
from .get_dialogs import GetDialogs from .get_dialogs import GetDialogs
from .get_dialogs_count import GetDialogsCount from .get_dialogs_count import GetDialogsCount
from .get_nearby_chats import GetNearbyChats
from .iter_chat_members import IterChatMembers from .iter_chat_members import IterChatMembers
from .iter_dialogs import IterDialogs from .iter_dialogs import IterDialogs
from .join_chat import JoinChat from .join_chat import JoinChat
@ -43,11 +44,11 @@ from .set_chat_description import SetChatDescription
from .set_chat_permissions import SetChatPermissions from .set_chat_permissions import SetChatPermissions
from .set_chat_photo import SetChatPhoto from .set_chat_photo import SetChatPhoto
from .set_chat_title import SetChatTitle from .set_chat_title import SetChatTitle
from .set_custom_title import SetCustomTitle
from .unarchive_chats import UnarchiveChats from .unarchive_chats import UnarchiveChats
from .unban_chat_member import UnbanChatMember from .unban_chat_member import UnbanChatMember
from .unpin_chat_message import UnpinChatMessage from .unpin_chat_message import UnpinChatMessage
from .update_chat_username import UpdateChatUsername from .update_chat_username import UpdateChatUsername
from .get_nearby_chats import GetNearbyChats
class Chats( class Chats(
@ -82,6 +83,7 @@ class Chats(
AddChatMembers, AddChatMembers,
DeleteChannel, DeleteChannel,
DeleteSupergroup, DeleteSupergroup,
GetNearbyChats GetNearbyChats,
SetCustomTitle
): ):
pass pass

View File

@ -97,7 +97,8 @@ class PromoteChatMember(BaseClient):
invite_users=can_invite_users or None, invite_users=can_invite_users or None,
pin_messages=can_pin_messages or None, pin_messages=can_pin_messages or None,
add_admins=can_promote_members or None, add_admins=can_promote_members or None,
) ),
rank=""
) )
) )

View File

@ -0,0 +1,90 @@
# Pyrogram - Telegram MTProto API Client Library for Python
# Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>
#
# This file is part of Pyrogram.
#
# Pyrogram is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Pyrogram is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from typing import Union
from pyrogram.api import functions, types
from ...ext import BaseClient
class SetCustomTitle(BaseClient):
async def set_custom_title(
self,
chat_id: Union[int, str],
user_id: Union[int, str],
title: str,
) -> bool:
"""Set a custom title to administrators or owners of a supergroup.
Parameters:
chat_id (``int`` | ``str``):
Unique identifier (int) or username (str) of the target chat.
user_id (``int`` | ``str``):
Unique identifier (int) or username (str) of the target user.
For a contact that exists in your Telegram address book you can use his phone number (str).
title (``str``, *optional*):
A custom title that will be shown to all members instead of "Owner" or "Admin".
Pass None or "" (empty string) to remove the custom title.
Returns:
``bool``: True on success.
Example:
.. code-block:: python
# Set custom titles to owners or administrators of supergroups
app.set_custom_title(chat_id, user_id, "Custom Title")
"""
chat_id = await self.resolve_peer(chat_id)
user_id = await self.resolve_peer(user_id)
r = (await self.send(
functions.channels.GetParticipant(
channel=chat_id,
user_id=user_id
)
)).participant
if isinstance(r, types.ChannelParticipantCreator):
admin_rights = types.ChatAdminRights(
change_info=True,
post_messages=True,
edit_messages=True,
delete_messages=True,
ban_users=True,
invite_users=True,
pin_messages=True,
add_admins=True,
)
elif isinstance(r, types.ChannelParticipantAdmin):
admin_rights = r.admin_rights
else:
raise ValueError("Custom titles can only be applied to owners or administrators of supergroups")
await self.send(
functions.channels.EditAdmin(
channel=chat_id,
user_id=user_id,
admin_rights=admin_rights,
rank=title
)
)
return True

View File

@ -33,6 +33,10 @@ class ChatMember(Object):
The member's status in the chat. The member's status in the chat.
Can be "creator", "administrator", "member", "restricted", "left" or "kicked". Can be "creator", "administrator", "member", "restricted", "left" or "kicked".
title (``str``, *optional*):
A custom title that will be shown to all members instead of "Owner" or "Admin".
Creator (owner) and administrators only. Can be None in case there's no custom title set.
until_date (``int``, *optional*): until_date (``int``, *optional*):
Restricted and kicked only. Restricted and kicked only.
Date when restrictions will be lifted for this user; unix time. Date when restrictions will be lifted for this user; unix time.
@ -119,6 +123,7 @@ class ChatMember(Object):
client: "pyrogram.BaseClient" = None, client: "pyrogram.BaseClient" = None,
user: "pyrogram.User", user: "pyrogram.User",
status: str, status: str,
title: str = None,
until_date: int = None, until_date: int = None,
joined_date: int = None, joined_date: int = None,
invited_by: "pyrogram.User" = None, invited_by: "pyrogram.User" = None,
@ -148,6 +153,7 @@ class ChatMember(Object):
self.user = user self.user = user
self.status = status self.status = status
self.title = title
self.until_date = until_date self.until_date = until_date
self.joined_date = joined_date self.joined_date = joined_date
self.invited_by = invited_by self.invited_by = invited_by
@ -193,6 +199,7 @@ class ChatMember(Object):
return ChatMember( return ChatMember(
user=user, user=user,
status="creator", status="creator",
title=getattr(member, "rank", None),
client=client client=client
) )
@ -211,6 +218,7 @@ class ChatMember(Object):
return ChatMember( return ChatMember(
user=user, user=user,
status="administrator", status="administrator",
title=member.rank,
joined_date=member.date, joined_date=member.date,
invited_by=invited_by, invited_by=invited_by,
promoted_by=pyrogram.User._parse(client, users[member.promoted_by]), promoted_by=pyrogram.User._parse(client, users[member.promoted_by]),