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.
Files changed (54) hide show
  1. {warp_beacon-2.1.11/warp_beacon.egg-info → warp_beacon-2.1.13}/PKG-INFO +1 -1
  2. warp_beacon-2.1.13/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/abstract.py +1 -1
  4. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/bot.py +41 -21
  5. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/handlers.py +4 -4
  6. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/utils.py +5 -0
  7. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/uploader/__init__.py +1 -2
  8. {warp_beacon-2.1.11 → warp_beacon-2.1.13/warp_beacon.egg-info}/PKG-INFO +1 -1
  9. warp_beacon-2.1.11/warp_beacon/__version__.py +0 -2
  10. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/LICENSE +0 -0
  11. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/MANIFEST.in +0 -0
  12. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/README.md +0 -0
  13. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/assets/placeholder.gif +0 -0
  14. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/.gitignore +0 -0
  15. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/accounts.json +0 -0
  16. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/warp_beacon.conf +0 -0
  17. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/etc/warp_beacon.service +0 -0
  18. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/pyproject.toml +0 -0
  19. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/setup.cfg +0 -0
  20. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/setup.py +0 -0
  21. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/__init__.py +0 -0
  22. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/compress/__init__.py +0 -0
  23. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/compress/video.py +0 -0
  24. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/__init__.py +0 -0
  25. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/download_job.py +0 -0
  26. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/types.py +0 -0
  27. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/jobs/upload_job.py +0 -0
  28. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/__init__.py +0 -0
  29. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/abstract.py +0 -0
  30. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/audio.py +0 -0
  31. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/silencer.py +0 -0
  32. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/mediainfo/video.py +0 -0
  33. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scheduler/__init__.py +0 -0
  34. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scheduler/scheduler.py +0 -0
  35. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/__init__.py +0 -0
  36. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/abstract.py +0 -0
  37. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/account_selector.py +0 -0
  38. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/exceptions.py +0 -0
  39. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/instagram/__init__.py +0 -0
  40. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/instagram/instagram.py +0 -0
  41. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/__init__.py +0 -0
  42. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/abstract.py +0 -0
  43. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/music.py +0 -0
  44. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/shorts.py +0 -0
  45. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/scraper/youtube/youtube.py +0 -0
  46. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/storage/__init__.py +0 -0
  47. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/__init__.py +0 -0
  48. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/telegram/placeholder_message.py +0 -0
  49. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon/warp_beacon.py +0 -0
  50. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/SOURCES.txt +0 -0
  51. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/dependency_links.txt +0 -0
  52. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/entry_points.txt +0 -0
  53. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/requires.txt +0 -0
  54. {warp_beacon-2.1.11 → warp_beacon-2.1.13}/warp_beacon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.1.11
3
+ Version: 2.1.13
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -0,0 +1,2 @@
1
+ __version__ = "2.1.13"
2
+
@@ -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
- source_usename: str = ""
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(media=job.tg_file_id.replace(":video", ''), supports_streaming=True)
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(media=job.tg_file_id.replace(":image", ''))
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.from_user
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.from_user
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.from_user
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.from_user,
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 Optional, Callable, Coroutine
9
+ from typing import Callable
11
10
 
12
11
  from warp_beacon.storage import Storage
13
12
  from warp_beacon.jobs.types import JobType
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.1.11
3
+ Version: 2.1.13
4
4
  Summary: Telegram bot for expanding external media links
5
5
  Home-page: https://github.com/sb0y/warp_beacon
6
6
  Author: Andrey Bagrintsev
@@ -1,2 +0,0 @@
1
- __version__ = "2.1.11"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes