warp-beacon 2.0.0__py3-none-any.whl → 2.0.2__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,2 +1,2 @@
1
- __version__ = "2.0.0"
1
+ __version__ = "2.0.2"
2
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
 
@@ -146,7 +146,7 @@ class AsyncDownloader(object):
146
146
  logging.info("Detected big file. Starting compressing with ffmpeg ...")
147
147
  self.uploader.queue_task(job.to_upload_job(
148
148
  job_warning=True,
149
- job_warning_msg="Downloaded file size is bigger than Telegram limits\! Performing video compression\. This may take a while\.")
149
+ job_warning_msg="Downloaded file size is bigger than Telegram limits! Performing video compression. This may take a while.")
150
150
  )
151
151
  ffmpeg = VideoCompress(file_path=item["local_media_path"])
152
152
  new_filepath = ffmpeg.generate_filepath(base_filepath=item["local_media_path"])
@@ -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()
@@ -177,7 +177,8 @@ class PlaceholderMessage(object):
177
177
  await self.bot.client.edit_message_caption(
178
178
  chat_id=chat_id,
179
179
  message_id=placeholder_message_id,
180
- caption=" ⚠️ *%s*" % placeholder_text
180
+ caption=" ⚠️ **%s**" % placeholder_text,
181
+ parse_mode=ParseMode.MARKDOWN
181
182
  )
182
183
  except Exception as e:
183
184
  logging.error("Failed to update placeholder message!")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp_beacon
3
- Version: 2.0.0
3
+ Version: 2.0.2
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
@@ -2,7 +2,7 @@ etc/warp_beacon/warp_beacon.conf,sha256=xihOuNBqVXGNdmMO14wwYNrqSQ4Z1wlAjp-xJk5S
2
2
  lib/systemd/system/warp_beacon.service,sha256=lPmHqLqcI2eIV7nwHS0qcALQrznixqJuwwPfa2mDLUA,372
3
3
  var/warp_beacon/placeholder.gif,sha256=cE5CGJVaop4Sx21zx6j4AyoHU0ncmvQuS2o6hJfEH88,6064
4
4
  warp_beacon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- warp_beacon/__version__.py,sha256=qOioaGGl5NerFveysRg4FBs-w1ZS2KuRyW5CW5zOmU8,23
5
+ warp_beacon/__version__.py,sha256=XEXLtIQFYJucVx5iyUIJQDghcXS4pP7zm10F2Q_kYTE,23
6
6
  warp_beacon/warp_beacon.py,sha256=7KEtZDj-pdhtl6m-zFLsSojs1ZR4o7L0xbqtdmYPvfE,342
7
7
  warp_beacon/compress/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  warp_beacon/compress/video.py,sha256=_PDMVYCyzLYxHv1uZmmzGcG_8rjaZr7BTXsXTTy_oS4,2846
@@ -10,13 +10,13 @@ warp_beacon/jobs/__init__.py,sha256=ED8_tPle4iL4kqNW0apAVkgNQtRRTnYfAJwBjO1g0JY,
10
10
  warp_beacon/jobs/abstract.py,sha256=kvPTxnzf8bYtggJgVZRYV3DVMCpfSia2pFrHLKhn7lY,2358
11
11
  warp_beacon/jobs/download_job.py,sha256=5HiPcnJppFMhO14___3eSkoMygM3y-vhpGkMAuNhK7s,854
12
12
  warp_beacon/jobs/types.py,sha256=Ae8zINgbs7cOcYkYoOCOACA7duyhnIGMQAJ_SJB1QRQ,176
13
- warp_beacon/jobs/upload_job.py,sha256=Vaogc4vbpAfyaT4VkIHEPLFRELmM44TDqkmnPYh3Ymc,740
13
+ warp_beacon/jobs/upload_job.py,sha256=_ul4psPej1jLEs-BMcMR80GbXDSmm38jE9yoZtecclY,741
14
14
  warp_beacon/mediainfo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  warp_beacon/mediainfo/abstract.py,sha256=ZR2JMuRpoh7nDNov9a8YkAfr6BI2HXnXzQtVrLgDxjs,1185
16
16
  warp_beacon/mediainfo/audio.py,sha256=ous88kwQj4bDIChN5wnGil5LqTs0IQHH0d-nyrL0-ZM,651
17
17
  warp_beacon/mediainfo/silencer.py,sha256=yn9w1LVHG8JQy_D45_RzrlEWID1zbj3ecx7nYGUP4ZE,1647
18
18
  warp_beacon/mediainfo/video.py,sha256=AIRy_op_BvehsjarM1rvT5Qo0QWwf-Q6xVVd_aCnbJ4,2505
19
- warp_beacon/scraper/__init__.py,sha256=Gv5XxSuvPeJgMTrJrnYAtf3xviXyK6QAX0n6Ml6dIvI,9863
19
+ warp_beacon/scraper/__init__.py,sha256=Ef24SqcD-dV12coPcSJaQC-fN2oOjH47S1nwsKTrtI4,9860
20
20
  warp_beacon/scraper/abstract.py,sha256=cxQxt5eQkieCZsgQwz425iF69pgCrWZ69ItlikPsWHc,1036
21
21
  warp_beacon/scraper/exceptions.py,sha256=9VJBK5ufokyUpT_q7XVFBYC8lK_BSBfo-S1pd6re9VY,1094
22
22
  warp_beacon/scraper/instagram.py,sha256=YDFdrSB1ghw9f43004lFyk2S5QTopFvpyoUYN-qOVdw,8335
@@ -27,14 +27,14 @@ warp_beacon/scraper/youtube/shorts.py,sha256=co4lpNTnncIEScVB9htAT2Hy4fvx56z5xgD
27
27
  warp_beacon/scraper/youtube/youtube.py,sha256=xIrGe2ElPo3889_w5128xCnkdgwG1u6lA-QoachMUfc,1104
28
28
  warp_beacon/storage/__init__.py,sha256=8XsJXq9X7GDlTaWREF4W1PDX9PH5utwhjf5c5M8Bb7o,3378
29
29
  warp_beacon/telegram/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- warp_beacon/telegram/bot.py,sha256=W2RuhHTTs7OW1uuDsplhyeRrFauPba0dBTTcrjanshk,10899
31
- warp_beacon/telegram/handlers.py,sha256=4C0Z-u6Kw-9tYmgXlK92PSV2HzZpl0GMpu5DblZZzM8,5708
32
- warp_beacon/telegram/placeholder_message.py,sha256=wLMoiDdQGMxRF4R9vbGDjP9awyODheLEasSVKsP4Mvg,6381
30
+ warp_beacon/telegram/bot.py,sha256=PVTXud908Q0f8q33ter6l372Z2EKGeOvk8BbQ9WIcYY,12066
31
+ warp_beacon/telegram/handlers.py,sha256=U6wZdIvZnIugxy98JhgZV51Px_F0NcOXWBH5brGM0Sc,5778
32
+ warp_beacon/telegram/placeholder_message.py,sha256=u5kVfTjGmVYkwA5opniRltHXGpsdSxI41WEde8J5os0,6418
33
33
  warp_beacon/telegram/utils.py,sha256=3MNlRoYvdoiYU7uBWu4x10QynSW_rE6Ei4GDyZxwVFs,1793
34
34
  warp_beacon/uploader/__init__.py,sha256=chX9oOrwO05O7DFmUfskTAnoKse66r3sY2s4NFF7bmM,4442
35
- warp_beacon-2.0.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
36
- warp_beacon-2.0.0.dist-info/METADATA,sha256=GgqPqUtUgZlblRv-shLeO2nTxYa_Cz5V4lX86bGuz0M,18279
37
- warp_beacon-2.0.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
38
- warp_beacon-2.0.0.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
39
- warp_beacon-2.0.0.dist-info/top_level.txt,sha256=pu6xG8OO_nCGllnOfAZ6QpVfivtmHVxPlYK8SZzUDqA,840
40
- warp_beacon-2.0.0.dist-info/RECORD,,
35
+ warp_beacon-2.0.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
36
+ warp_beacon-2.0.2.dist-info/METADATA,sha256=y84HK_a9c_k3QluWxyEusbvdwhL0dYhnec6ZJuHseG0,18279
37
+ warp_beacon-2.0.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
38
+ warp_beacon-2.0.2.dist-info/entry_points.txt,sha256=eSB61Rb89d56WY0O-vEIQwkn18J-4CMrJcLA_R_8h3g,119
39
+ warp_beacon-2.0.2.dist-info/top_level.txt,sha256=pu6xG8OO_nCGllnOfAZ6QpVfivtmHVxPlYK8SZzUDqA,840
40
+ warp_beacon-2.0.2.dist-info/RECORD,,