async def join_group_call( self, chat_id: int, json_join: dict, invite_hash: str, have_video: bool, join_as: TypeInputPeer, ) -> dict: chat_call = await self._cache.get_full_chat(chat_id) if chat_call is not None: result: Updates = await self._app( JoinGroupCallRequest( call=chat_call, params=DataJSON(data=json.dumps(json_join)), muted=False, join_as=join_as, video_stopped=have_video, invite_hash=invite_hash, ), ) for update in result.updates: if isinstance( update, UpdateGroupCallParticipants, ): participants = update.participants for participant in participants: self._cache.set_participants_cache( update.call.id, self.chat_id(participant.peer), participant.muted, participant.volume, participant.can_self_unmute, participant.video is not None or participant.presentation is not None, participant.presentation is not None, participant.video is not None, participant.raise_hand_rating, participant.left, ) if isinstance(update, UpdateGroupCallConnection): transport = json.loads(update.params.data)['transport'] return { 'transport': { 'ufrag': transport['ufrag'], 'pwd': transport['pwd'], 'fingerprints': transport['fingerprints'], 'candidates': transport['candidates'], }, } return {'transport': None}
async def join_call(data): chat = None try: chat = await get_entity(data['chat']) except ValueError: await leave_chat(data, ("😶 設定 Username 😡 後,可以給您和朋友們帶來許多方便喔 😐")) return try: full_chat = await client(GetFullChannelRequest(chat)) except: return if not full_chat.full_chat.call: await leave_chat(data, ("😡 please 😐 start 😡 @GroupCall 😡 " "first, before using 😡😡 commands 😶")) return call = await client(GetGroupCallRequest(full_chat.full_chat.call)) result = await client( JoinGroupCallRequest( call=call.call, muted=False, params=DataJSON(data=json.dumps({ 'ufrag': data['ufrag'], 'pwd': data['pwd'], 'fingerprints': [{ 'hash': data['hash'], 'setup': data['setup'], 'fingerprint': data['fingerprint'], }], 'ssrc': data['source'], }), ), ), ) transport = json.loads(result.updates[0].call.params.data)['transport'] return { '_': 'get_join', 'data': { 'chat_id': data['chat']['id'], 'transport': { 'ufrag': transport['ufrag'], 'pwd': transport['pwd'], 'fingerprints': transport['fingerprints'], 'candidates': transport['candidates'], }, }, }
async def join_group_call(self, invite_hash: str, params: str, muted: bool, pre_update_processing: Callable): try: response = await self.client( functions.phone.JoinGroupCallRequest( call=self.group_call, join_as=self.join_as, invite_hash=invite_hash, params=DataJSON(data=params), muted=muted, )) pre_update_processing() # it is here cuz we need to associate params for connection with group call for update in response.updates: if isinstance(update, UpdateGroupCallConnection): await self._process_group_call_connection(update) self.client._handle_update(response) except TelethonGroupcallSsrcDuplicateMuchError as e: raise GroupcallSsrcDuplicateMuch(e)
async def join_call(data): chat = await get_entity(data['chat']) full_chat = await client(GetFullChannelRequest(chat)) call = await client(GetGroupCallRequest(full_chat.full_chat.call)) result = await client( JoinGroupCallRequest( call=call.call, muted=False, params=DataJSON(data=json.dumps({ 'ufrag': data['ufrag'], 'pwd': data['pwd'], 'fingerprints': [{ 'hash': data['hash'], 'setup': data['setup'], 'fingerprint': data['fingerprint'], }], 'ssrc': data['source'], }), ), ), ) transport = json.loads(result.updates[0].call.params.data)['transport'] return { '_': 'get_join', 'data': { 'chat_id': data['chat']['id'], 'transport': { 'ufrag': transport['ufrag'], 'pwd': transport['pwd'], 'fingerprints': transport['fingerprints'], 'candidates': transport['candidates'], }, }, }
async def join_call(data): try: chat = await get_entity(data["chat"]) except ValueError: stree = (await vcbot.get_me()).first_name return await bot.send_message( data["chat"]["id"], f"`Please add {stree} in this group.`" ) except Exception as ex: return await bot.send_message(data["chat"]["id"], "`" + str(ex) + "`") try: full_chat = await vcbot(GetFullChannelRequest(chat)) except ValueError: stree = (await vcbot.get_me()).first_name return await bot.send_message( data["chat"]["id"], f"`Please add {stree} in this group.`" ) except Exception as ex: return await bot.send_message(data["chat"]["id"], "`" + str(ex) + "`") try: call = await vcbot(GetGroupCallRequest(full_chat.full_chat.call)) except: call = None if not call: return await bot.send_message( data["chat"]["id"], "`I can't access voice chat.`", ) try: result = await vcbot( JoinGroupCallRequest( call=call.call, muted=False, join_as="me", params=DataJSON( data=json.dumps( { "ufrag": data["ufrag"], "pwd": data["pwd"], "fingerprints": [ { "hash": data["hash"], "setup": data["setup"], "fingerprint": data["fingerprint"], }, ], "ssrc": data["source"], }, ), ), ), ) await bot.send_message( Var.LOG_CHANNEL, f"`Joined Voice Chat in {(await bot.get_entity(data['chat']['id'])).title}`", ) except Exception as ex: return await bot.send_message(data["chat"]["id"], "`" + str(ex) + "`") transport = json.loads(result.updates[0].call.params.data)["transport"] return { "_": "get_join", "data": { "chat_id": data["chat"]["id"], "transport": { "ufrag": transport["ufrag"], "pwd": transport["pwd"], "fingerprints": transport["fingerprints"], "candidates": transport["candidates"], }, }, }