From 0786ff3c4146f31a8f9520c4a108c426df65461b Mon Sep 17 00:00:00 2001 From: Zaid _ Date: Fri, 7 Jun 2024 19:57:36 +0300 Subject: [PATCH] Add invite_member_to_group_call method --- pyrogram/methods/phone/__init__.py | 4 +- .../phone/invite_member_to_group_call.py | 86 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 pyrogram/methods/phone/invite_member_to_group_call.py diff --git a/pyrogram/methods/phone/__init__.py b/pyrogram/methods/phone/__init__.py index 3787ed06dd..a71c2ffee5 100644 --- a/pyrogram/methods/phone/__init__.py +++ b/pyrogram/methods/phone/__init__.py @@ -18,9 +18,11 @@ # along with Pyrogram. If not, see . from .load_group_call_participants import LoadGroupCallParticipants +from .invite_member_to_group_call import InviteMemberToGroupCall class Phone( - LoadGroupCallParticipants + LoadGroupCallParticipants, + InviteMemberToGroupCall ): pass diff --git a/pyrogram/methods/phone/invite_member_to_group_call.py b/pyrogram/methods/phone/invite_member_to_group_call.py new file mode 100644 index 0000000000..50d78862ea --- /dev/null +++ b/pyrogram/methods/phone/invite_member_to_group_call.py @@ -0,0 +1,86 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-present Dan +# +# 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 . + +from typing import Union, List + +import pyrogram +from pyrogram import types, raw + + +class InviteMemberToGroupCall: + async def invite_member_to_group_call( + self: "pyrogram.Client", + chat_id: Union[int, str], + user_ids: Union[Union[int, str], List[Union[int, str]]], + ) -> "types.Message": + """Invite member to group call in a chat. + + .. include:: /_includes/usable-by/users.rst + + Parameters: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. A chat can be either a basic group or a supergroup. + + user_ids (``int`` | ``str`` | List of ``int`` or ``str``): + Users to invite to group call in the chat + You can pass an ID (int) or username (str). + Multiple users can be added by passing a list of IDs or usernames + + Returns: + :obj:`~pyrogram.types.Message`: On success, the sent service message is returned. + + Example: + .. code-block:: python + + await app.invite_member_to_group_call(chat_id, user_id) + + """ + peer = await self.resolve_peer(chat_id) + + if isinstance(peer, raw.types.InputPeerChannel): + r = await self.invoke(raw.functions.channels.GetFullChannel(channel=peer)) + elif isinstance(peer, raw.types.InputPeerChat): + r = await self.invoke( + raw.functions.messages.GetFullChat(chat_id=peer.chat_id) + ) + else: + raise ValueError("Target chat should be group, supergroup or channel.") + + call = r.full_chat.call + + if call is None: + raise pyrogram.errors.CallPeerInvalid("No active group call at this chat.") + + user_ids = [user_ids] if not isinstance(user_ids, list) else user_ids + + r = await self.invoke( + raw.functions.phone.InviteToGroupCall( + call=call, users=[await self.resolve_peer(i) for i in user_ids] + ) + ) + + for i in r.updates: + if isinstance( + i, (raw.types.UpdateNewChannelMessage, raw.types.UpdateNewMessage) + ): + return await types.Message._parse( + self, + i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats}, + )