warp-beacon 2.1.11__tar.gz → 2.1.13__tar.gz
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.
- {warp_beacon-2.1.11/warp_beacon.egg-info → warp_beacon-2.1.13}/PKG-INFO +1 -1
- warp_beacon-2.1.13/warp_beacon/__version__.py +2 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/abstract.py +1 -1
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/bot.py +41 -21
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/handlers.py +4 -4
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/utils.py +5 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/uploader/__init__.py +1 -2
- {warp_beacon-2.1.11 → warp_beacon-2.1.13/warp_beacon.egg-info}/PKG-INFO +1 -1
- warp_beacon-2.1.11/warp_beacon/__version__.py +0 -2
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/LICENSE +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/MANIFEST.in +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/README.md +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/assets/placeholder.gif +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/.gitignore +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/accounts.json +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/warp_beacon.conf +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/warp_beacon.service +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/pyproject.toml +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/setup.cfg +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/setup.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/compress/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/compress/video.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/download_job.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/types.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/upload_job.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/abstract.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/audio.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/silencer.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/video.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scheduler/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scheduler/scheduler.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/abstract.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/account_selector.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/exceptions.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/instagram/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/instagram/instagram.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/abstract.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/music.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/shorts.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/youtube.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/storage/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/__init__.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/placeholder_message.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/warp_beacon.py +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/SOURCES.txt +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/dependency_links.txt +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/entry_points.txt +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/requires.txt +0 -0
- {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -65,7 +65,7 @@ class AbstractJob(ABC):
|
|
65
65
|
canonical_name: str = ""
|
66
66
|
is_message_to_admin: bool = False
|
67
67
|
message_text: str = ""
|
68
|
-
|
68
|
+
source_username: str = ""
|
69
69
|
unvailable_error_count: int = 0
|
70
70
|
geoblock_error_count: int = 0
|
71
71
|
account_switches: int = 0
|
@@ -146,12 +146,28 @@ class Bot(object):
|
|
146
146
|
|
147
147
|
return []
|
148
148
|
|
149
|
+
def build_signature_caption(self, job: UploadJob) -> str:
|
150
|
+
caption = ""
|
151
|
+
if job.chat_type in (ChatType.GROUP, ChatType.SUPERGROUP):
|
152
|
+
if job.source_username:
|
153
|
+
caption += f"Requested by **@{job.source_username}**"
|
154
|
+
if job.source_username and job.url:
|
155
|
+
caption += " | "
|
156
|
+
if job.url:
|
157
|
+
caption += f"[Source link]({job.url})"
|
158
|
+
|
159
|
+
return caption
|
160
|
+
|
149
161
|
def build_tg_args(self, job: UploadJob) -> dict:
|
150
162
|
args = {}
|
151
163
|
if job.media_type == JobType.VIDEO:
|
152
164
|
if job.tg_file_id:
|
153
165
|
if job.placeholder_message_id:
|
154
|
-
args["media"] = InputMediaVideo(
|
166
|
+
args["media"] = InputMediaVideo(
|
167
|
+
media=job.tg_file_id.replace(":video", ''),
|
168
|
+
supports_streaming=True,
|
169
|
+
caption=self.build_signature_caption(job)
|
170
|
+
)
|
155
171
|
else:
|
156
172
|
args["video"] = job.tg_file_id.replace(":video", '')
|
157
173
|
else:
|
@@ -162,7 +178,8 @@ class Bot(object):
|
|
162
178
|
width=job.media_info["width"],
|
163
179
|
height=job.media_info["height"],
|
164
180
|
duration=round(job.media_info["duration"]),
|
165
|
-
thumb=job.media_info["thumb"]
|
181
|
+
thumb=job.media_info["thumb"],
|
182
|
+
caption=self.build_signature_caption(job)
|
166
183
|
)
|
167
184
|
else:
|
168
185
|
args["video"] = job.local_media_path
|
@@ -171,18 +188,23 @@ class Bot(object):
|
|
171
188
|
args["height"] = job.media_info["height"]
|
172
189
|
args["duration"] = round(job.media_info["duration"])
|
173
190
|
args["thumb"] = job.media_info["thumb"]
|
191
|
+
args["caption"] = self.build_signature_caption(job)
|
174
192
|
|
175
193
|
args["file_name"] = "downloaded_via_warp_beacon_bot%s" % (os.path.splitext(job.local_media_path)[-1])
|
176
194
|
elif job.media_type == JobType.IMAGE:
|
177
195
|
if job.tg_file_id:
|
178
196
|
if job.placeholder_message_id:
|
179
|
-
args["media"] = InputMediaPhoto(
|
197
|
+
args["media"] = InputMediaPhoto(
|
198
|
+
media=job.tg_file_id.replace(":image", ''),
|
199
|
+
caption=self.build_signature_caption(job)
|
200
|
+
)
|
180
201
|
else:
|
181
202
|
args["photo"] = job.tg_file_id.replace(":image", '')
|
182
203
|
else:
|
183
204
|
if job.placeholder_message_id:
|
184
205
|
args["media"] = InputMediaPhoto(
|
185
|
-
media=job.local_media_path
|
206
|
+
media=job.local_media_path,
|
207
|
+
caption=self.build_signature_caption(job)
|
186
208
|
)
|
187
209
|
else:
|
188
210
|
args["photo"] = job.local_media_path
|
@@ -190,7 +212,8 @@ class Bot(object):
|
|
190
212
|
if job.tg_file_id:
|
191
213
|
if job.placeholder_message_id:
|
192
214
|
args["media"] = InputMediaAudio(
|
193
|
-
media=job.tg_file_id.replace(":audio", '')
|
215
|
+
media=job.tg_file_id.replace(":audio", ''),
|
216
|
+
caption=self.build_signature_caption(job)
|
194
217
|
)
|
195
218
|
else:
|
196
219
|
args["audio"] = job.tg_file_id.replace(":audio", '')
|
@@ -202,6 +225,7 @@ class Bot(object):
|
|
202
225
|
thumb=job.media_info["thumb"],
|
203
226
|
duration=round(job.media_info["duration"]),
|
204
227
|
title=job.canonical_name,
|
228
|
+
caption=self.build_signature_caption(job)
|
205
229
|
)
|
206
230
|
else:
|
207
231
|
args["audio"] = job.local_media_path
|
@@ -209,6 +233,7 @@ class Bot(object):
|
|
209
233
|
args["thumb"] = job.media_info["thumb"]
|
210
234
|
args["duration"] = round(job.media_info["duration"])
|
211
235
|
args["title"] = job.canonical_name
|
236
|
+
args["caption"] = self.build_signature_caption(job)
|
212
237
|
#args["file_name"] = "%s%s" % (job.canonical_name, os.path.splitext(job.local_media_path)[-1]),
|
213
238
|
elif job.media_type == JobType.ANIMATION:
|
214
239
|
if job.tg_file_id:
|
@@ -225,7 +250,8 @@ class Bot(object):
|
|
225
250
|
thumb=job.media_info["thumb"],
|
226
251
|
duration=round(job.media_info["duration"]),
|
227
252
|
width=job.media_info["width"],
|
228
|
-
height=job.media_info["height"]
|
253
|
+
height=job.media_info["height"],
|
254
|
+
caption=self.build_signature_caption(job)
|
229
255
|
)
|
230
256
|
else:
|
231
257
|
args["animation"] = job.local_media_path
|
@@ -233,6 +259,7 @@ class Bot(object):
|
|
233
259
|
args["height"] = job.media_info["height"]
|
234
260
|
args["duration"] = round(job.media_info["duration"])
|
235
261
|
args["thumb"] = job.media_info["thumb"]
|
262
|
+
args["caption"] = self.build_signature_caption(job)
|
236
263
|
elif job.media_type == JobType.COLLECTION:
|
237
264
|
if job.tg_file_id:
|
238
265
|
args["media"] = []
|
@@ -243,11 +270,11 @@ class Bot(object):
|
|
243
270
|
ctype = JobType[mtype.upper()]
|
244
271
|
ptr = None
|
245
272
|
if ctype == JobType.VIDEO:
|
246
|
-
ptr = InputMediaVideo(media=tg_id)
|
273
|
+
ptr = InputMediaVideo(media=tg_id, caption=self.build_signature_caption(job))
|
247
274
|
elif ctype == JobType.IMAGE:
|
248
|
-
ptr = InputMediaPhoto(media=tg_id)
|
275
|
+
ptr = InputMediaPhoto(media=tg_id, caption=self.build_signature_caption(job))
|
249
276
|
elif ctype == JobType.ANIMATION:
|
250
|
-
ptr = InputMediaAnimation(media=tg_id)
|
277
|
+
ptr = InputMediaAnimation(media=tg_id, caption=self.build_signature_caption(job))
|
251
278
|
tg_chunk.append(ptr)
|
252
279
|
|
253
280
|
args["media"].append(tg_chunk)
|
@@ -264,11 +291,13 @@ class Bot(object):
|
|
264
291
|
height=j.media_info["height"],
|
265
292
|
duration=round(j.media_info["duration"]),
|
266
293
|
thumb=j.media_info["thumb"],
|
294
|
+
caption=self.build_signature_caption(job)
|
267
295
|
)
|
268
296
|
tg_chunk.append(vid)
|
269
297
|
elif j.media_type == JobType.IMAGE:
|
270
298
|
photo = InputMediaPhoto(
|
271
|
-
media=j.local_media_path
|
299
|
+
media=j.local_media_path,
|
300
|
+
caption=self.build_signature_caption(job)
|
272
301
|
)
|
273
302
|
tg_chunk.append(photo)
|
274
303
|
mediafs.append(tg_chunk)
|
@@ -276,15 +305,6 @@ class Bot(object):
|
|
276
305
|
|
277
306
|
args["chat_id"] = job.chat_id
|
278
307
|
|
279
|
-
if job.chat_type in (ChatType.GROUP, ChatType.SUPERGROUP):
|
280
|
-
args["caption"] = ""
|
281
|
-
if job.source_usename:
|
282
|
-
args["caption"] += f"Requested by **@{job.source_usename}**"
|
283
|
-
if job.source_usename and job.url:
|
284
|
-
args["caption"] += " | "
|
285
|
-
if job.url:
|
286
|
-
args["caption"] += f"[Source link]({job.url})"
|
287
|
-
|
288
308
|
# common args
|
289
309
|
if job.placeholder_message_id and job.media_type is not JobType.COLLECTION:
|
290
310
|
args["message_id"] = job.placeholder_message_id
|
@@ -343,7 +363,7 @@ class Bot(object):
|
|
343
363
|
messages = await self.client.send_media_group(
|
344
364
|
chat_id=job.chat_id,
|
345
365
|
reply_to_message_id=job.message_id,
|
346
|
-
media=media_chunk
|
366
|
+
media=media_chunk
|
347
367
|
)
|
348
368
|
sent_messages += messages
|
349
369
|
if job.media_collection:
|
@@ -390,7 +410,7 @@ class Bot(object):
|
|
390
410
|
|
391
411
|
if job.chat_type in (ChatType.GROUP, ChatType.SUPERGROUP):
|
392
412
|
try:
|
393
|
-
self.client.delete_messages(job.chat_id, (job.message_id,))
|
413
|
+
await self.client.delete_messages(job.chat_id, (job.message_id,))
|
394
414
|
except Exception as e:
|
395
415
|
logging.warning("Failed to delete source message. Check bot permissions in Telegram chat settings.")
|
396
416
|
logging.exception(e)
|
@@ -39,7 +39,7 @@ class Handlers(object):
|
|
39
39
|
media_type=JobType[d["media_type"].upper()],
|
40
40
|
message_id=message.id,
|
41
41
|
chat_type=message.chat.type,
|
42
|
-
source_username=message
|
42
|
+
source_username=Utils.extract_message_author(message)
|
43
43
|
)
|
44
44
|
)
|
45
45
|
|
@@ -100,7 +100,7 @@ class Handlers(object):
|
|
100
100
|
media_type=JobType.COLLECTION,
|
101
101
|
chat_id=chat.id,
|
102
102
|
chat_type=message.chat.type,
|
103
|
-
source_username=message
|
103
|
+
source_username=Utils.extract_message_author(message)
|
104
104
|
)
|
105
105
|
)
|
106
106
|
elif ent_len:
|
@@ -113,7 +113,7 @@ class Handlers(object):
|
|
113
113
|
media_type=media_type,
|
114
114
|
chat_id=chat.id,
|
115
115
|
chat_type=message.chat.type,
|
116
|
-
source_username=message
|
116
|
+
source_username=Utils.extract_message_author(message)
|
117
117
|
)
|
118
118
|
)
|
119
119
|
else:
|
@@ -164,7 +164,7 @@ class Handlers(object):
|
|
164
164
|
in_process=self.bot.uploader.is_inprocess(uniq_id),
|
165
165
|
uniq_id=uniq_id,
|
166
166
|
job_origin=origin,
|
167
|
-
source_username=message
|
167
|
+
source_username=Utils.extract_message_author(message),
|
168
168
|
chat_type=chat.type
|
169
169
|
))
|
170
170
|
self.bot.uploader.set_inprocess(uniq_id)
|
@@ -85,5 +85,10 @@ class Utils(object):
|
|
85
85
|
def extract_message_author(message: Message) -> str:
|
86
86
|
if message.from_user:
|
87
87
|
return message.from_user
|
88
|
+
if message.sender_chat:
|
89
|
+
if message.sender_chat.username:
|
90
|
+
return message.sender_chat.username
|
91
|
+
if message.sender_chat.title:
|
92
|
+
return message.sender_chat.title
|
88
93
|
return ''
|
89
94
|
|
@@ -2,12 +2,11 @@ import os
|
|
2
2
|
import threading
|
3
3
|
import multiprocessing
|
4
4
|
from warp_beacon.jobs.upload_job import UploadJob
|
5
|
-
#import time
|
6
5
|
import logging
|
7
6
|
|
8
7
|
import asyncio
|
9
8
|
|
10
|
-
from typing import
|
9
|
+
from typing import Callable
|
11
10
|
|
12
11
|
from warp_beacon.storage import Storage
|
13
12
|
from warp_beacon.jobs.types import JobType
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|