예제 #1
0
 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}
예제 #2
0
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'],
            },
        },
    }
예제 #3
0
    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)
예제 #4
0
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'],
            },
        },
    }
예제 #5
0
    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"],
                },
            },
        }