py-tgcalls 2.2.5__py3-none-any.whl → 2.2.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-tgcalls
3
- Version: 2.2.5
3
+ Version: 2.2.7
4
4
  Summary: Async client API for the Telegram Calls.
5
5
  Author-email: Laky-64 <iraci.matteo@gmail.com>
6
6
  Project-URL: Homepage, https://pytgcalls.github.io/
@@ -20,7 +20,7 @@ Requires-Python: >=3.9
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
22
  Requires-Dist: aiohttp>=3.9.3
23
- Requires-Dist: ntgcalls<3.0.0,>=2.0.5
23
+ Requires-Dist: ntgcalls<3.0.0,>=2.0.6
24
24
  Requires-Dist: deprecation
25
25
  Provides-Extra: pyrogram
26
26
  Requires-Dist: pyrogram>=1.2.20; extra == "pyrogram"
@@ -1,10 +1,10 @@
1
- py_tgcalls-2.2.5.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
1
+ py_tgcalls-2.2.7.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
2
2
  pytgcalls/__init__.py,sha256=qbfwN7rYwIdCegMOzdcbvwazeNjDzgmowgcqLFNqKIM,308
3
- pytgcalls/__version__.py,sha256=btKTVVdL8jf2J-q4jm7Otknf3xzOoPGoGVBFald8zts,22
3
+ pytgcalls/__version__.py,sha256=_a_I7cjpwo5jHaXCQYkNQgSKbe2WWcxvqM6NIPlZ27w,22
4
4
  pytgcalls/chat_lock.py,sha256=u3t0G3EQ20zn89Sn5s-GWFFX9Xmu4gYWkAgzHJOk0Mc,762
5
5
  pytgcalls/environment.py,sha256=ctCHACvG6l8SdpPewSBhOvc70kbwpv18maC0TwLvZ08,1924
6
6
  pytgcalls/exceptions.py,sha256=Rijc-8T93WEWJxNW9jncU8_M6mYZZZcs8F2bqitEIeI,3787
7
- pytgcalls/ffmpeg.py,sha256=CZvSyuztc-TGKbKI9_2G7CLITe1ITf315YPyprWu_Pg,8645
7
+ pytgcalls/ffmpeg.py,sha256=DkP-Xj9O1sohGR8TjIcCbv-oYJjnkGKYxhu7Sg6V0KY,8645
8
8
  pytgcalls/filters.py,sha256=8Fq_gvHHdqhIk_XwMJ9wneeZOwrvBkSOKaMJ60r3bZU,6157
9
9
  pytgcalls/list_to_cmd.py,sha256=rGJLsejbAQdDb8pctMbLnwea5NkitlfVKc3IpoGi4V4,240
10
10
  pytgcalls/mtproto_required.py,sha256=6B-31p5qH_6oekUgypV4nK3hqPS6Nr-pA8S81wjnbaY,630
@@ -31,11 +31,11 @@ pytgcalls/methods/__init__.py,sha256=KKnG3uI_3oKKBByQ96kHJiabjxk2J6YLs4HDfOKvQ0A
31
31
  pytgcalls/methods/calls/__init__.py,sha256=xg4DZZClEnxwaj-DAq3e8gSR-g-MiYBdUEBth64lSXA,214
32
32
  pytgcalls/methods/calls/change_volume_call.py,sha256=xMUszg44Gs1RgTXGCwcWEESnwu3XVkW8Kx9HGLDGSEo,842
33
33
  pytgcalls/methods/calls/get_participants.py,sha256=HDEMwZwNZM7KSb76P5XVH46qNONvBEVg4x_e-rgJscI,716
34
- pytgcalls/methods/calls/leave_call.py,sha256=XiaKrnSgaItbAIUpdGXCo1HgXY7V7FcDjRsi5OwNweY,1609
34
+ pytgcalls/methods/calls/leave_call.py,sha256=KRwT1XGFvBeBZWzvfnEUWLXExKYGWIwOGDCa-qgH7go,1518
35
35
  pytgcalls/methods/decorators/__init__.py,sha256=TCGaEVZnHjtOwv-3PNfaCVm0kyFhJApUPUNntt6MwyM,78
36
36
  pytgcalls/methods/decorators/on_update.py,sha256=ZTL4YcQk0N4Ru56a5WItUvkSN5SAqr6_RDZvXmZMIHs,316
37
37
  pytgcalls/methods/internal/__init__.py,sha256=fcgIxUJKT6QJD30ltnOfzKsLhzTTTklD2qxKlwCvyv0,1057
38
- pytgcalls/methods/internal/clear_cache.py,sha256=IbcDOGiBJbmqOnGJWkIe8c6P_Y6e0YPkui4Hg4PAZlA,334
38
+ pytgcalls/methods/internal/clear_cache.py,sha256=PpY91nAHlsl05eL_t8yhHmDrJ2ZINkEs-umPbv44QuA,380
39
39
  pytgcalls/methods/internal/clear_call.py,sha256=r9v2oPGrDfplxqlfKxT95JjOijm6daIpQjisOyKDBrA,542
40
40
  pytgcalls/methods/internal/connect_call.py,sha256=wgRtcY-YxGDFCJcLkSIqgc81DdoA9osQ_iEErqbBH7E,5770
41
41
  pytgcalls/methods/internal/emit_sig_data.py,sha256=ucIsknhJHB-0x7lcymXvwQ647AJQ852zH2W6MdlC3ws,216
@@ -73,10 +73,10 @@ pytgcalls/methods/utilities/stream_params.py,sha256=PUnctLhdCeBAg52v95vpxj-42Le5
73
73
  pytgcalls/mtproto/__init__.py,sha256=X4zvzFG7km7qHyE0fdvA550WcOVO_xl_p__gvIfDGmw,130
74
74
  pytgcalls/mtproto/bridged_client.py,sha256=Qb9-9FrUdh3g_sx-JOcvkzv3kJtS_pz2Qaos85DgVPI,8280
75
75
  pytgcalls/mtproto/client_cache.py,sha256=5unu8sjLRaIKoEgJGaIRjhA4P3U2lFpfakTKFxKLzAM,5591
76
- pytgcalls/mtproto/hydrogram_client.py,sha256=P2YpeIBYXzBHWLXyk9pGiO_TsIBuzDQ7LvorGZFFM-o,28974
76
+ pytgcalls/mtproto/hydrogram_client.py,sha256=Fzg2JCAozadQA3KdkN2psHxW7vyps_SGhYfbpegTV-4,29525
77
77
  pytgcalls/mtproto/mtproto_client.py,sha256=9SIG3DNeICIXvggyVE8DQWtToPtxV0t9ZKr6dEMnEMg,8783
78
- pytgcalls/mtproto/pyrogram_client.py,sha256=CI9uPMdwwE3UGSNfenqIKUl-UD_caVZpCzYR1PB4drY,28970
79
- pytgcalls/mtproto/telethon_client.py,sha256=w9PuqE_gsDKFYVpF5o_ULMSsYf5sAK8VgImVxbNz2Bc,27106
78
+ pytgcalls/mtproto/pyrogram_client.py,sha256=gu2Aru9jwXy2GkgfVTh2kRKHi6CzAEJdFr5rD_D67uQ,29512
79
+ pytgcalls/mtproto/telethon_client.py,sha256=NQk4aB0l2G5t1pJ7f6YvW3cvw9ykhuVYDSXsykPqQXA,27845
80
80
  pytgcalls/types/__init__.py,sha256=GlgBBXAwbNopXSeTTmiXktrEJhhN_rMBtuAllTBbN3k,1189
81
81
  pytgcalls/types/browsers.py,sha256=47Kr5q96n4Q4WvVhA6IUlS2egEcA9GRLlDeFcQYyc9M,9545
82
82
  pytgcalls/types/cache.py,sha256=nJh6B7xnvAiLh0mDJYS9sYhnRvj0BqxrQBLXs4WEUMs,1235
@@ -117,7 +117,7 @@ pytgcalls/types/stream/record_stream.py,sha256=f4VQ6MY8HtOxt7vz0hWBFmbbAIvTRHpAI
117
117
  pytgcalls/types/stream/stream_ended.py,sha256=xR_kZwFf03hA6rw_nvI7Be7GwoCKzQf_1MKaGpPDXqY,716
118
118
  pytgcalls/types/stream/stream_frames.py,sha256=028ZhNV-mN3BGqMlmxusAV1xDQpXRYCeM0WXBZhRUhA,446
119
119
  pytgcalls/types/stream/video_quality.py,sha256=eMCBFPwh5meX3UVEaozcGlwmgaujfpiTa3vBVSBBP_8,275
120
- py_tgcalls-2.2.5.dist-info/METADATA,sha256=z5H1ZrBVTaaYMqaL4L__jniTrocWWAkdUcnF-FOCEPs,5280
121
- py_tgcalls-2.2.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
- py_tgcalls-2.2.5.dist-info/top_level.txt,sha256=IUDUwn0KkcbUYZbCe9R5AUb2Ob-lmllNUGQqyeXXd8A,10
123
- py_tgcalls-2.2.5.dist-info/RECORD,,
120
+ py_tgcalls-2.2.7.dist-info/METADATA,sha256=xFDEczlK5psCyUuWXkUzpmvFbjvdlM8CT7eceK-5SCk,5280
121
+ py_tgcalls-2.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
+ py_tgcalls-2.2.7.dist-info/top_level.txt,sha256=IUDUwn0KkcbUYZbCe9R5AUb2Ob-lmllNUGQqyeXXd8A,10
123
+ py_tgcalls-2.2.7.dist-info/RECORD,,
pytgcalls/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = '2.2.5'
1
+ __version__ = '2.2.7'
pytgcalls/ffmpeg.py CHANGED
@@ -63,7 +63,7 @@ async def check_stream(
63
63
  raise
64
64
 
65
65
  have_video = False
66
- is_image = False
66
+ is_image = True
67
67
  have_audio = False
68
68
  have_valid_video = False
69
69
 
@@ -107,7 +107,7 @@ async def check_stream(
107
107
  stream_parameters.height = new_h
108
108
  stream_parameters.width = new_w
109
109
  if is_image:
110
- stream_parameters.frame_rate = 1
110
+ stream_parameters.frame_rate = 10
111
111
  raise ImageSourceFound(path)
112
112
 
113
113
  if isinstance(stream_parameters, AudioParameters) and not have_audio:
@@ -46,9 +46,7 @@ class LeaveCall(Scaffold):
46
46
  self._p2p_configs.pop(chat_id)
47
47
  return
48
48
  if chat_id < 0: # type: ignore
49
- self._need_unmute.discard(chat_id)
50
- self._presentations.discard(chat_id)
51
- self._call_sources.pop(chat_id, None)
49
+ self._clear_cache(chat_id) # type: ignore
52
50
 
53
51
  if chat_id < 0 and close: # type: ignore
54
52
  await self._app.close_voice_chat(chat_id)
@@ -7,4 +7,5 @@ class ClearCache(Scaffold):
7
7
  self._cache_user_peer.pop(chat_id)
8
8
  self._need_unmute.discard(chat_id)
9
9
  self._presentations.discard(chat_id)
10
+ self._call_sources.pop(chat_id, None)
10
11
  self._pending_connections.pop(chat_id, None)
@@ -10,6 +10,7 @@ from hydrogram.errors import AuthBytesInvalid
10
10
  from hydrogram.errors import BadRequest
11
11
  from hydrogram.errors import FileMigrate
12
12
  from hydrogram.errors import FloodWait
13
+ from hydrogram.errors.exceptions import GroupcallForbidden
13
14
  from hydrogram.raw.base import InputPeer
14
15
  from hydrogram.raw.base import InputUser
15
16
  from hydrogram.raw.functions.auth import ExportAuthorization
@@ -70,6 +71,7 @@ from hydrogram.raw.types import Updates
70
71
  from hydrogram.raw.types.messages import DhConfig
71
72
  from hydrogram.session import Auth
72
73
  from hydrogram.session import Session
74
+ from hydrogram.types import PeerChannel
73
75
  from ntgcalls import MediaSegmentQuality
74
76
  from ntgcalls import Protocol
75
77
 
@@ -260,28 +262,31 @@ class HydrogramClient(BridgedClient):
260
262
  update.message.action,
261
263
  MessageActionInviteToGroupCall,
262
264
  ):
263
- if isinstance(
264
- update.message.peer_id,
265
- PeerChat,
266
- ):
267
- await self._propagate(
268
- ChatUpdate(
269
- chat_id,
270
- ChatUpdate.Status.INVITED_VOICE_CHAT,
271
- update.message.action,
272
- ),
273
- )
265
+ await self._propagate(
266
+ ChatUpdate(
267
+ chat_id,
268
+ ChatUpdate.Status.INVITED_VOICE_CHAT,
269
+ update.message.action,
270
+ ),
271
+ )
272
+
274
273
  if isinstance(
275
274
  update.message.action,
276
275
  MessageActionChatDeleteUser,
277
276
  ):
278
277
  if isinstance(
279
278
  update.message.peer_id,
280
- PeerChat,
279
+ (
280
+ PeerChat,
281
+ PeerChannel,
282
+ ),
281
283
  ):
282
284
  if isinstance(
283
285
  chats[update.message.peer_id.chat_id],
284
- ChatForbidden,
286
+ (
287
+ ChatForbidden,
288
+ ChannelForbidden,
289
+ ),
285
290
  ):
286
291
  self._cache.drop_cache(chat_id)
287
292
  await self._propagate(
@@ -414,33 +419,43 @@ class HydrogramClient(BridgedClient):
414
419
  video_stopped: bool,
415
420
  join_as: InputPeer,
416
421
  ) -> str:
417
- chat_call = await self._cache.get_full_chat(chat_id)
418
- if chat_call is not None:
419
- result: Updates = await self._invoke(
420
- JoinGroupCall(
421
- call=chat_call,
422
- params=DataJSON(data=json_join),
423
- muted=False,
424
- join_as=join_as,
425
- video_stopped=video_stopped,
426
- invite_hash=invite_hash,
427
- ),
422
+ try:
423
+ chat_call = await self._cache.get_full_chat(chat_id)
424
+ if chat_call is not None:
425
+ result: Updates = await self._invoke(
426
+ JoinGroupCall(
427
+ call=chat_call,
428
+ params=DataJSON(data=json_join),
429
+ muted=False,
430
+ join_as=join_as,
431
+ video_stopped=video_stopped,
432
+ invite_hash=invite_hash,
433
+ ),
434
+ )
435
+ for update in result.updates:
436
+ if isinstance(
437
+ update,
438
+ UpdateGroupCallParticipants,
439
+ ):
440
+ participants = update.participants
441
+ for participant in participants:
442
+ self._cache.set_participants_cache(
443
+ chat_id,
444
+ update.call.id,
445
+ self.parse_participant_action(participant),
446
+ self.parse_participant(participant),
447
+ )
448
+ if isinstance(update, UpdateGroupCallConnection):
449
+ return update.params.data
450
+ except GroupcallForbidden:
451
+ self._cache.drop_cache(chat_id)
452
+ return await self.join_group_call(
453
+ chat_id,
454
+ json_join,
455
+ invite_hash,
456
+ video_stopped,
457
+ join_as,
428
458
  )
429
- for update in result.updates:
430
- if isinstance(
431
- update,
432
- UpdateGroupCallParticipants,
433
- ):
434
- participants = update.participants
435
- for participant in participants:
436
- self._cache.set_participants_cache(
437
- chat_id,
438
- update.call.id,
439
- self.parse_participant_action(participant),
440
- self.parse_participant(participant),
441
- )
442
- if isinstance(update, UpdateGroupCallConnection):
443
- return update.params.data
444
459
 
445
460
  return json.dumps({'transport': None})
446
461
 
@@ -12,6 +12,7 @@ from pyrogram.errors import AuthBytesInvalid
12
12
  from pyrogram.errors import BadRequest
13
13
  from pyrogram.errors import FileMigrate
14
14
  from pyrogram.errors import FloodWait
15
+ from pyrogram.errors import GroupcallForbidden
15
16
  from pyrogram.raw.base import InputPeer
16
17
  from pyrogram.raw.base import InputUser
17
18
  from pyrogram.raw.functions.auth import ExportAuthorization
@@ -50,6 +51,7 @@ from pyrogram.raw.types import InputPhoneCall
50
51
  from pyrogram.raw.types import MessageActionChatDeleteUser
51
52
  from pyrogram.raw.types import MessageActionInviteToGroupCall
52
53
  from pyrogram.raw.types import MessageService
54
+ from pyrogram.raw.types import PeerChannel
53
55
  from pyrogram.raw.types import PeerChat
54
56
  from pyrogram.raw.types import PhoneCall
55
57
  from pyrogram.raw.types import PhoneCallAccepted
@@ -261,28 +263,31 @@ class PyrogramClient(BridgedClient):
261
263
  update.message.action,
262
264
  MessageActionInviteToGroupCall,
263
265
  ):
264
- if isinstance(
265
- update.message.peer_id,
266
- PeerChat,
267
- ):
268
- await self._propagate(
269
- ChatUpdate(
270
- chat_id,
271
- ChatUpdate.Status.INVITED_VOICE_CHAT,
272
- update.message.action,
273
- ),
274
- )
266
+ await self._propagate(
267
+ ChatUpdate(
268
+ chat_id,
269
+ ChatUpdate.Status.INVITED_VOICE_CHAT,
270
+ update.message.action,
271
+ ),
272
+ )
273
+
275
274
  if isinstance(
276
275
  update.message.action,
277
276
  MessageActionChatDeleteUser,
278
277
  ):
279
278
  if isinstance(
280
279
  update.message.peer_id,
281
- PeerChat,
280
+ (
281
+ PeerChat,
282
+ PeerChannel,
283
+ ),
282
284
  ):
283
285
  if isinstance(
284
286
  chats[update.message.peer_id.chat_id],
285
- ChatForbidden,
287
+ (
288
+ ChatForbidden,
289
+ ChannelForbidden,
290
+ ),
286
291
  ):
287
292
  self._cache.drop_cache(chat_id)
288
293
  await self._propagate(
@@ -415,33 +420,43 @@ class PyrogramClient(BridgedClient):
415
420
  video_stopped: bool,
416
421
  join_as: InputPeer,
417
422
  ) -> str:
418
- chat_call = await self._cache.get_full_chat(chat_id)
419
- if chat_call is not None:
420
- result: Updates = await self._invoke(
421
- JoinGroupCall(
422
- call=chat_call,
423
- params=DataJSON(data=json_join),
424
- muted=False,
425
- join_as=join_as,
426
- video_stopped=video_stopped,
427
- invite_hash=invite_hash,
428
- ),
423
+ try:
424
+ chat_call = await self._cache.get_full_chat(chat_id)
425
+ if chat_call is not None:
426
+ result: Updates = await self._invoke(
427
+ JoinGroupCall(
428
+ call=chat_call,
429
+ params=DataJSON(data=json_join),
430
+ muted=False,
431
+ join_as=join_as,
432
+ video_stopped=video_stopped,
433
+ invite_hash=invite_hash,
434
+ ),
435
+ )
436
+ for update in result.updates:
437
+ if isinstance(
438
+ update,
439
+ UpdateGroupCallParticipants,
440
+ ):
441
+ participants = update.participants
442
+ for participant in participants:
443
+ self._cache.set_participants_cache(
444
+ chat_id,
445
+ update.call.id,
446
+ self.parse_participant_action(participant),
447
+ self.parse_participant(participant),
448
+ )
449
+ if isinstance(update, UpdateGroupCallConnection):
450
+ return update.params.data
451
+ except GroupcallForbidden:
452
+ self._cache.drop_cache(chat_id)
453
+ return await self.join_group_call(
454
+ chat_id,
455
+ json_join,
456
+ invite_hash,
457
+ video_stopped,
458
+ join_as,
429
459
  )
430
- for update in result.updates:
431
- if isinstance(
432
- update,
433
- UpdateGroupCallParticipants,
434
- ):
435
- participants = update.participants
436
- for participant in participants:
437
- self._cache.set_participants_cache(
438
- chat_id,
439
- update.call.id,
440
- self.parse_participant_action(participant),
441
- self.parse_participant(participant),
442
- )
443
- if isinstance(update, UpdateGroupCallConnection):
444
- return update.params.data
445
460
 
446
461
  return json.dumps({'transport': None})
447
462
 
@@ -10,6 +10,7 @@ from telethon.errors import BadRequestError
10
10
  from telethon.errors import ChannelPrivateError
11
11
  from telethon.errors import FileMigrateError
12
12
  from telethon.errors import FloodWaitError
13
+ from telethon.errors import GroupcallForbiddenError
13
14
  from telethon.events import Raw
14
15
  from telethon.tl.functions.channels import GetFullChannelRequest
15
16
  from telethon.tl.functions.messages import GetDhConfigRequest
@@ -30,6 +31,7 @@ from telethon.tl.functions.phone import LeaveGroupCallRequest
30
31
  from telethon.tl.functions.phone import RequestCallRequest
31
32
  from telethon.tl.functions.phone import SendSignalingDataRequest
32
33
  from telethon.tl.functions.upload import GetFileRequest
34
+ from telethon.tl.types import ChannelForbidden
33
35
  from telethon.tl.types import ChatForbidden
34
36
  from telethon.tl.types import DataJSON
35
37
  from telethon.tl.types import GroupCall
@@ -283,11 +285,17 @@ class TelethonClient(BridgedClient):
283
285
  ):
284
286
  if isinstance(
285
287
  update.message.peer_id,
286
- PeerChat,
288
+ (
289
+ PeerChat,
290
+ PeerChannel,
291
+ ),
287
292
  ):
288
293
  if isinstance(
289
294
  await self._app.get_entity(chat_id),
290
- ChatForbidden,
295
+ (
296
+ ChatForbidden,
297
+ ChannelForbidden,
298
+ ),
291
299
  ):
292
300
  self._cache.drop_cache(chat_id)
293
301
  await self._propagate(
@@ -401,33 +409,43 @@ class TelethonClient(BridgedClient):
401
409
  video_stopped: bool,
402
410
  join_as: TypeInputPeer,
403
411
  ) -> str:
404
- chat_call = await self._cache.get_full_chat(chat_id)
405
- if chat_call is not None:
406
- result: Updates = await self._invoke(
407
- JoinGroupCallRequest(
408
- call=chat_call,
409
- params=DataJSON(data=json_join),
410
- muted=False,
411
- join_as=join_as,
412
- video_stopped=video_stopped,
413
- invite_hash=invite_hash,
414
- ),
412
+ try:
413
+ chat_call = await self._cache.get_full_chat(chat_id)
414
+ if chat_call is not None:
415
+ result: Updates = await self._invoke(
416
+ JoinGroupCallRequest(
417
+ call=chat_call,
418
+ params=DataJSON(data=json_join),
419
+ muted=False,
420
+ join_as=join_as,
421
+ video_stopped=video_stopped,
422
+ invite_hash=invite_hash,
423
+ ),
424
+ )
425
+ for update in result.updates:
426
+ if isinstance(
427
+ update,
428
+ UpdateGroupCallParticipants,
429
+ ):
430
+ participants = update.participants
431
+ for participant in participants:
432
+ self._cache.set_participants_cache(
433
+ chat_id,
434
+ update.call.id,
435
+ self.parse_participant_action(participant),
436
+ self.parse_participant(participant),
437
+ )
438
+ if isinstance(update, UpdateGroupCallConnection):
439
+ return update.params.data
440
+ except GroupcallForbiddenError:
441
+ self._cache.drop_cache(chat_id)
442
+ return await self.join_group_call(
443
+ chat_id,
444
+ json_join,
445
+ invite_hash,
446
+ video_stopped,
447
+ join_as,
415
448
  )
416
- for update in result.updates:
417
- if isinstance(
418
- update,
419
- UpdateGroupCallParticipants,
420
- ):
421
- participants = update.participants
422
- for participant in participants:
423
- self._cache.set_participants_cache(
424
- chat_id,
425
- update.call.id,
426
- self.parse_participant_action(participant),
427
- self.parse_participant(participant),
428
- )
429
- if isinstance(update, UpdateGroupCallConnection):
430
- return update.params.data
431
449
 
432
450
  return json.dumps({'transport': None})
433
451