warp-beacon 2.0.0__tar.gz → 2.0.1__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 (49) hide show
  1. {warp_beacon-2.0.0/warp_beacon.egg-info → warp_beacon-2.0.1}/PKG-INFO +1 -1
  2. warp_beacon-2.0.1/warp_beacon/__version__.py +2 -0
  3. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/jobs/upload_job.py +1 -0
  4. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/telegram/bot.py +61 -31
  5. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/telegram/handlers.py +8 -1
  6. {warp_beacon-2.0.0 → warp_beacon-2.0.1/warp_beacon.egg-info}/PKG-INFO +1 -1
  7. warp_beacon-2.0.0/warp_beacon/__version__.py +0 -2
  8. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/LICENSE +0 -0
  9. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/MANIFEST.in +0 -0
  10. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/README.md +0 -0
  11. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/assets/placeholder.gif +0 -0
  12. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/etc/.gitignore +0 -0
  13. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/etc/warp_beacon.conf +0 -0
  14. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/etc/warp_beacon.service +0 -0
  15. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/pyproject.toml +0 -0
  16. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/setup.cfg +0 -0
  17. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/setup.py +0 -0
  18. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/__init__.py +0 -0
  19. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/compress/__init__.py +0 -0
  20. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/compress/video.py +0 -0
  21. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/jobs/__init__.py +0 -0
  22. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/jobs/abstract.py +0 -0
  23. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/jobs/download_job.py +0 -0
  24. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/jobs/types.py +0 -0
  25. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/mediainfo/__init__.py +0 -0
  26. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/mediainfo/abstract.py +0 -0
  27. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/mediainfo/audio.py +0 -0
  28. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/mediainfo/silencer.py +0 -0
  29. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/mediainfo/video.py +0 -0
  30. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/__init__.py +0 -0
  31. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/abstract.py +0 -0
  32. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/exceptions.py +0 -0
  33. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/instagram.py +0 -0
  34. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/youtube/__init__.py +0 -0
  35. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/youtube/abstract.py +0 -0
  36. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/youtube/music.py +0 -0
  37. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/youtube/shorts.py +0 -0
  38. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/scraper/youtube/youtube.py +0 -0
  39. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/storage/__init__.py +0 -0
  40. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/telegram/__init__.py +0 -0
  41. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/telegram/placeholder_message.py +0 -0
  42. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/telegram/utils.py +0 -0
  43. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/uploader/__init__.py +0 -0
  44. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon/warp_beacon.py +0 -0
  45. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon.egg-info/SOURCES.txt +0 -0
  46. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon.egg-info/dependency_links.txt +0 -0
  47. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon.egg-info/entry_points.txt +0 -0
  48. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/warp_beacon.egg-info/requires.txt +0 -0
  49. {warp_beacon-2.0.0 → warp_beacon-2.0.1}/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.0.0
3
+ Version: 2.0.1
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.0.1"
2
+
@@ -6,6 +6,7 @@ from warp_beacon.jobs.abstract import AbstractJob, JobSettings
6
6
  class UploadJob(AbstractJob):
7
7
  def __init__(self, **kwargs: Unpack[JobSettings]) -> None:
8
8
  super(UploadJob, self).__init__(**kwargs)
9
+
9
10
  def __del__(self) -> None:
10
11
  pass
11
12
 
@@ -8,7 +8,7 @@ from pyrogram import Client, filters
8
8
  from pyrogram.enums import ParseMode
9
9
  from pyrogram.handlers import MessageHandler
10
10
  from pyrogram.types import Message, InputMedia, InputMediaAudio, InputMediaPhoto, InputMediaVideo, InputMediaAnimation, InputMediaDocument, InlineKeyboardButton, InlineKeyboardMarkup
11
- from pyrogram.errors import RPCError, FloodWait, NetworkMigrate, BadRequest, MultiMediaTooLong
11
+ from pyrogram.errors import RPCError, FloodWait, NetworkMigrate, BadRequest, MultiMediaTooLong, MessageIdInvalid
12
12
 
13
13
  from warp_beacon.__version__ import __version__
14
14
  from warp_beacon.telegram.handlers import Handlers
@@ -123,14 +123,23 @@ class Bot(object):
123
123
  else:
124
124
  args["video"] = job.tg_file_id.replace(":video", '')
125
125
  else:
126
- args["media"] = InputMediaVideo(
127
- media=job.local_media_path,
128
- supports_streaming=True,
129
- width=job.media_info["width"],
130
- height=job.media_info["height"],
131
- duration=int(job.media_info["duration"]),
132
- thumb=job.media_info["thumb"]
133
- )
126
+ if job.placeholder_message_id:
127
+ args["media"] = InputMediaVideo(
128
+ media=job.local_media_path,
129
+ supports_streaming=True,
130
+ width=job.media_info["width"],
131
+ height=job.media_info["height"],
132
+ duration=job.media_info["duration"],
133
+ thumb=job.media_info["thumb"]
134
+ )
135
+ else:
136
+ args["video"] = job.local_media_path
137
+ args["supports_streaming"] = True
138
+ args["width"] = job.media_info["width"]
139
+ args["height"] = job.media_info["height"]
140
+ args["duration"] = job.media_info["duration"]
141
+ args["thumb"] = job.media_info["thumb"]
142
+
134
143
  args["file_name"] = "downloaded_via_warp_beacon_bot%s" % (os.path.splitext(job.local_media_path)[-1])
135
144
  elif job.media_type == JobType.IMAGE:
136
145
  if job.tg_file_id:
@@ -139,9 +148,12 @@ class Bot(object):
139
148
  else:
140
149
  args["photo"] = job.tg_file_id.replace(":image", '')
141
150
  else:
142
- args["media"] = InputMediaPhoto(
143
- media=job.local_media_path
144
- )
151
+ if job.placeholder_message_id:
152
+ args["media"] = InputMediaPhoto(
153
+ media=job.local_media_path
154
+ )
155
+ else:
156
+ args["photo"] = job.local_media_path
145
157
  elif job.media_type == JobType.AUDIO:
146
158
  if job.tg_file_id:
147
159
  if job.placeholder_message_id:
@@ -151,13 +163,20 @@ class Bot(object):
151
163
  else:
152
164
  args["audio"] = job.tg_file_id.replace(":audio", '')
153
165
  else:
154
- args["media"] = InputMediaAudio(
155
- media=job.local_media_path,
156
- performer=job.media_info["performer"],
157
- thumb=job.media_info["thumb"],
158
- duration=job.media_info["duration"],
159
- title=job.canonical_name,
160
- )
166
+ if job.placeholder_message_id:
167
+ args["media"] = InputMediaAudio(
168
+ media=job.local_media_path,
169
+ performer=job.media_info["performer"],
170
+ thumb=job.media_info["thumb"],
171
+ duration=job.media_info["duration"],
172
+ title=job.canonical_name,
173
+ )
174
+ else:
175
+ args["audio"] = job.local_media_path
176
+ args["performer"] = job.media_info["performer"]
177
+ args["thumb"] = job.media_info["thumb"]
178
+ args["duration"] = job.media_info["duration"]
179
+ args["title"] = job.canonical_name
161
180
  #args["file_name"] = "%s%s" % (job.canonical_name, os.path.splitext(job.local_media_path)[-1]),
162
181
  elif job.media_type == JobType.ANIMATION:
163
182
  if job.tg_file_id:
@@ -168,13 +187,20 @@ class Bot(object):
168
187
  else:
169
188
  args["animation"] = job.tg_file_id.replace(":animation", '')
170
189
  else:
171
- args["media"] = InputMediaAudio(
172
- media=job.local_media_path,
173
- performer=job.media_info["performer"],
174
- thumb=job.media_info["thumb"],
175
- duration=job.media_info["duration"],
176
- title=job.canonical_name,
177
- )
190
+ if job.placeholder_message_id:
191
+ args["media"] = InputMediaAnimation(
192
+ media=job.local_media_path,
193
+ thumb=job.media_info["thumb"],
194
+ duration=job.media_info["duration"],
195
+ width=job.media_info["width"],
196
+ height=job.media_info["height"]
197
+ )
198
+ else:
199
+ args["animation"] = job.local_media_path
200
+ args["width"] = job.media_info["width"]
201
+ args["height"] = job.media_info["height"]
202
+ args["duration"] = job.media_info["duration"]
203
+ args["thumb"] = job.media_info["thumb"]
178
204
  elif job.media_type == JobType.COLLECTION:
179
205
  if job.tg_file_id:
180
206
  args["media"] = []
@@ -219,19 +245,18 @@ class Bot(object):
219
245
  args["chat_id"] = job.chat_id
220
246
 
221
247
  # common args
222
- if job.placeholder_message_id and job.media_type != JobType.COLLECTION:
248
+ if job.placeholder_message_id and job.media_type is not JobType.COLLECTION:
223
249
  args["message_id"] = job.placeholder_message_id
224
250
  else:
225
251
  args["disable_notification"] = True
226
252
  args["reply_to_message_id"] = job.message_id
227
253
 
228
- if os.environ.get("ENABLE_DONATES", None) == "true" and job.media_type != JobType.COLLECTION:
254
+ if os.environ.get("ENABLE_DONATES", None) == "true" and job.media_type is not JobType.COLLECTION:
229
255
  args["reply_markup"] = InlineKeyboardMarkup([[InlineKeyboardButton("❤ Donate", url=os.environ.get("DONATE_LINK", "https://pay.cryptocloud.plus/pos/W5BMtNQt5bJFoW2E"))]])
230
256
 
231
257
  return args
232
258
 
233
259
  async def upload_job(self, job: UploadJob) -> list[str]:
234
- timeout = int(os.environ.get("TG_WRITE_TIMEOUT", default=120))
235
260
  tg_file_ids = []
236
261
  try:
237
262
  retry_amount = 0
@@ -241,7 +266,12 @@ class Bot(object):
241
266
  reply_message = None
242
267
  if job.media_type in (JobType.VIDEO, JobType.IMAGE, JobType.AUDIO):
243
268
  if job.placeholder_message_id:
244
- reply_message = await self.client.edit_message_media(**self.build_tg_args(job))
269
+ try:
270
+ reply_message = await self.client.edit_message_media(**self.build_tg_args(job))
271
+ except MessageIdInvalid:
272
+ logging.warning("Placeholder message not found. Looks like placeholder message was deleted by administrator.")
273
+ job.placeholder_message_id = None
274
+ continue
245
275
  else:
246
276
  send_funcs = {
247
277
  JobType.VIDEO: self.client.send_video,
@@ -277,7 +307,7 @@ class Bot(object):
277
307
  sent_messages += messages
278
308
  if job.media_collection:
279
309
  for j, chunk in enumerate(media_chunk):
280
- tg_file_id = Utils.extract_file_id(messages[j])
310
+ tg_file_id = Utils.eƒƒxtract_file_id(messages[j])
281
311
  if tg_file_id:
282
312
  job.media_collection[i][j].tg_file_id = tg_file_id
283
313
  if i == 0 and job.placeholder_message_id:
@@ -31,7 +31,14 @@ class Handlers(object):
31
31
  if not d:
32
32
  await message.reply_text("No random content yet. Try to send link first.")
33
33
  return
34
- await self.bot.upload_job(UploadJob(tg_file_id=d["tg_file_id"], media_type=d["media_type"], message_id=message.id))
34
+ await self.bot.upload_job(
35
+ UploadJob(
36
+ tg_file_id=d["tg_file_id"],
37
+ chat_id=message.chat.id,
38
+ media_type=JobType[d["media_type"].upper()],
39
+ message_id=message.id
40
+ )
41
+ )
35
42
 
36
43
  async def start(self, client: Client, message: Message) -> None:
37
44
  bot_name = await self.bot.client.get_me()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.0.0
3
+ Version: 2.0.1
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.0.0"
2
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes