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.
- {py_tgcalls-2.2.5.dist-info → py_tgcalls-2.2.7.dist-info}/METADATA +2 -2
- {py_tgcalls-2.2.5.dist-info → py_tgcalls-2.2.7.dist-info}/RECORD +12 -12
- pytgcalls/__version__.py +1 -1
- pytgcalls/ffmpeg.py +2 -2
- pytgcalls/methods/calls/leave_call.py +1 -3
- pytgcalls/methods/internal/clear_cache.py +1 -0
- pytgcalls/mtproto/hydrogram_client.py +54 -39
- pytgcalls/mtproto/pyrogram_client.py +54 -39
- pytgcalls/mtproto/telethon_client.py +46 -28
- {py_tgcalls-2.2.5.dist-info → py_tgcalls-2.2.7.dist-info}/WHEEL +0 -0
- {py_tgcalls-2.2.5.dist-info → py_tgcalls-2.2.7.dist-info}/licenses/LICENSE +0 -0
- {py_tgcalls-2.2.5.dist-info → py_tgcalls-2.2.7.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: py-tgcalls
|
|
3
|
-
Version: 2.2.
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
79
|
-
pytgcalls/mtproto/telethon_client.py,sha256=
|
|
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.
|
|
121
|
-
py_tgcalls-2.2.
|
|
122
|
-
py_tgcalls-2.2.
|
|
123
|
-
py_tgcalls-2.2.
|
|
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.
|
|
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 =
|
|
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 =
|
|
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.
|
|
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)
|
|
@@ -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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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
|
-
|
|
279
|
+
(
|
|
280
|
+
PeerChat,
|
|
281
|
+
PeerChannel,
|
|
282
|
+
),
|
|
281
283
|
):
|
|
282
284
|
if isinstance(
|
|
283
285
|
chats[update.message.peer_id.chat_id],
|
|
284
|
-
|
|
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
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
-
|
|
280
|
+
(
|
|
281
|
+
PeerChat,
|
|
282
|
+
PeerChannel,
|
|
283
|
+
),
|
|
282
284
|
):
|
|
283
285
|
if isinstance(
|
|
284
286
|
chats[update.message.peer_id.chat_id],
|
|
285
|
-
|
|
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
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
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
|
-
|
|
288
|
+
(
|
|
289
|
+
PeerChat,
|
|
290
|
+
PeerChannel,
|
|
291
|
+
),
|
|
287
292
|
):
|
|
288
293
|
if isinstance(
|
|
289
294
|
await self._app.get_entity(chat_id),
|
|
290
|
-
|
|
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
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|