Cxops commited on
Commit
336710f
Β·
verified Β·
1 Parent(s): 4ab04de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -17
app.py CHANGED
@@ -338,7 +338,6 @@ async def do_download_job(chat_id, enc_path, orig_name, job_id, cancel_event, st
338
 
339
  # --------------- DELETE FUNCTIONS ---------------
340
  async def delete_user_file(chat_id, user_id, enc_path, token, query):
341
- """Delete a single file from HF and DB, then refresh the list."""
342
  try:
343
  hf.delete_file(
344
  path_in_repo=enc_path,
@@ -353,13 +352,11 @@ async def delete_user_file(chat_id, user_id, enc_path, token, query):
353
  await query.answer(f"Error: {e}", show_alert=True)
354
 
355
  async def delete_all_user_files(chat_id, user_id, query):
356
- """Delete all files of a user from HF and DB, then refresh."""
357
  user_files = db_get_user_files(user_id)
358
  if not user_files:
359
  await query.answer("No files to delete.", show_alert=True)
360
  return
361
 
362
- # Delete from HF
363
  for enc_path, _, _ in user_files:
364
  try:
365
  hf.delete_file(
@@ -368,12 +365,10 @@ async def delete_all_user_files(chat_id, user_id, query):
368
  repo_type="dataset",
369
  )
370
  except Exception:
371
- pass # skip if not found
372
 
373
- # Clear DB
374
  db_remove_all_user_files(user_id)
375
 
376
- # Clear callback tokens for this user
377
  tokens_to_delete = [tok for tok, path in file_callback_map.items() if path.startswith(get_encrypted_folder(user_id))]
378
  for tok in tokens_to_delete:
379
  file_callback_map.pop(tok, None)
@@ -382,7 +377,6 @@ async def delete_all_user_files(chat_id, user_id, query):
382
  await refresh_file_list(chat_id, user_id, query.message)
383
 
384
  async def refresh_file_list(chat_id, user_id, message):
385
- """Re‑fetch user files and edit the message with updated buttons."""
386
  user_files = db_get_user_files(user_id)
387
  if not user_files:
388
  return await message.edit_text("You have no uploaded files.", reply_markup=None)
@@ -396,7 +390,6 @@ async def refresh_file_list(chat_id, user_id, message):
396
  InlineKeyboardButton("πŸ—‘ Delete", callback_data=f"delete:{token}")
397
  ])
398
 
399
- # Add "Delete All" button as a separate row
400
  buttons.append([InlineKeyboardButton("⚠️ Delete All Files", callback_data=f"delete_all:{user_id}")])
401
 
402
  await message.edit_text(
@@ -415,7 +408,6 @@ async def process_album_group(media_group_id: str):
415
  messages = group_data['messages'] # list of (message_id, filename)
416
 
417
  if len(messages) == 1:
418
- # single file – normal prompt
419
  msg_id, filename = messages[0]
420
  token = make_token()
421
  upload_prompt_map[token] = [(user_id, msg_id, filename)]
@@ -425,7 +417,6 @@ async def process_album_group(media_group_id: str):
425
  ])
426
  await app.send_message(chat_id, f"Do you want to upload `{filename}`?", reply_markup=kb)
427
  else:
428
- # multiple files – combined prompt
429
  files_list = "\n".join(f"β€’ {fname}" for _, fname in messages)
430
  token = make_token()
431
  upload_prompt_map[token] = [(user_id, msg_id, fname) for msg_id, fname in messages]
@@ -473,7 +464,7 @@ async def upload_worker():
473
  @app.on_message(filters.command("start"))
474
  async def start_cmd(_, message):
475
  await message.reply_text(
476
- "Send me a file to upload it to the dataset.\n"
477
  "/files – list your uploaded files"
478
  )
479
 
@@ -482,7 +473,6 @@ async def list_files_cmd(_, message):
482
  user_id = message.from_user.id
483
  user_files = db_get_user_files(user_id)
484
 
485
- # Fallback scan if DB empty
486
  if not user_files:
487
  enc_folder = get_encrypted_folder(user_id)
488
  try:
@@ -517,7 +507,6 @@ async def list_files_cmd(_, message):
517
  InlineKeyboardButton("πŸ—‘ Delete", callback_data=f"delete:{token}")
518
  ])
519
 
520
- # Add "Delete All" button
521
  buttons.append([InlineKeyboardButton("⚠️ Delete All Files", callback_data=f"delete_all:{user_id}")])
522
 
523
  await message.reply_text(
@@ -641,19 +630,40 @@ async def upload_all_callback(_, query):
641
  async def cancel_upload_prompt(_, query):
642
  await query.message.delete()
643
 
644
- # ----------- RECEIVING FILES (with album grouping) -----------
645
- @app.on_message(filters.document | filters.video | filters.audio | filters.photo)
 
 
 
646
  async def on_file(_, message):
 
647
  if message.document:
648
  filename = message.document.file_name
649
  elif message.video:
650
  filename = message.video.file_name or f"{message.video.file_unique_id}.mp4"
651
  elif message.audio:
652
  filename = message.audio.file_name or f"{message.audio.file_unique_id}.mp3"
653
- else:
654
  filename = f"{message.photo.file_unique_id}.jpg"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
 
656
- if message.media_group_id:
 
657
  group_id = str(message.media_group_id)
658
  chat_id = message.chat.id
659
  user_id = message.from_user.id
 
338
 
339
  # --------------- DELETE FUNCTIONS ---------------
340
  async def delete_user_file(chat_id, user_id, enc_path, token, query):
 
341
  try:
342
  hf.delete_file(
343
  path_in_repo=enc_path,
 
352
  await query.answer(f"Error: {e}", show_alert=True)
353
 
354
  async def delete_all_user_files(chat_id, user_id, query):
 
355
  user_files = db_get_user_files(user_id)
356
  if not user_files:
357
  await query.answer("No files to delete.", show_alert=True)
358
  return
359
 
 
360
  for enc_path, _, _ in user_files:
361
  try:
362
  hf.delete_file(
 
365
  repo_type="dataset",
366
  )
367
  except Exception:
368
+ pass
369
 
 
370
  db_remove_all_user_files(user_id)
371
 
 
372
  tokens_to_delete = [tok for tok, path in file_callback_map.items() if path.startswith(get_encrypted_folder(user_id))]
373
  for tok in tokens_to_delete:
374
  file_callback_map.pop(tok, None)
 
377
  await refresh_file_list(chat_id, user_id, query.message)
378
 
379
  async def refresh_file_list(chat_id, user_id, message):
 
380
  user_files = db_get_user_files(user_id)
381
  if not user_files:
382
  return await message.edit_text("You have no uploaded files.", reply_markup=None)
 
390
  InlineKeyboardButton("πŸ—‘ Delete", callback_data=f"delete:{token}")
391
  ])
392
 
 
393
  buttons.append([InlineKeyboardButton("⚠️ Delete All Files", callback_data=f"delete_all:{user_id}")])
394
 
395
  await message.edit_text(
 
408
  messages = group_data['messages'] # list of (message_id, filename)
409
 
410
  if len(messages) == 1:
 
411
  msg_id, filename = messages[0]
412
  token = make_token()
413
  upload_prompt_map[token] = [(user_id, msg_id, filename)]
 
417
  ])
418
  await app.send_message(chat_id, f"Do you want to upload `{filename}`?", reply_markup=kb)
419
  else:
 
420
  files_list = "\n".join(f"β€’ {fname}" for _, fname in messages)
421
  token = make_token()
422
  upload_prompt_map[token] = [(user_id, msg_id, fname) for msg_id, fname in messages]
 
464
  @app.on_message(filters.command("start"))
465
  async def start_cmd(_, message):
466
  await message.reply_text(
467
+ "Send me any file (document, video, audio, photo, animation, sticker, video note, voice) to upload.\n"
468
  "/files – list your uploaded files"
469
  )
470
 
 
473
  user_id = message.from_user.id
474
  user_files = db_get_user_files(user_id)
475
 
 
476
  if not user_files:
477
  enc_folder = get_encrypted_folder(user_id)
478
  try:
 
507
  InlineKeyboardButton("πŸ—‘ Delete", callback_data=f"delete:{token}")
508
  ])
509
 
 
510
  buttons.append([InlineKeyboardButton("⚠️ Delete All Files", callback_data=f"delete_all:{user_id}")])
511
 
512
  await message.reply_text(
 
630
  async def cancel_upload_prompt(_, query):
631
  await query.message.delete()
632
 
633
+ # ----------- RECEIVING ALL FILE TYPES (including animations, stickers, video notes, voice) -----------
634
+ @app.on_message(
635
+ filters.document | filters.video | filters.audio | filters.photo |
636
+ filters.animation | filters.sticker | filters.video_note | filters.voice
637
+ )
638
  async def on_file(_, message):
639
+ # Determine filename for every possible type
640
  if message.document:
641
  filename = message.document.file_name
642
  elif message.video:
643
  filename = message.video.file_name or f"{message.video.file_unique_id}.mp4"
644
  elif message.audio:
645
  filename = message.audio.file_name or f"{message.audio.file_unique_id}.mp3"
646
+ elif message.photo:
647
  filename = f"{message.photo.file_unique_id}.jpg"
648
+ elif message.animation:
649
+ filename = message.animation.file_name or f"{message.animation.file_unique_id}.mp4"
650
+ elif message.sticker:
651
+ # Stickers can be .webp, .tgs, .webm
652
+ if message.sticker.is_animated:
653
+ filename = f"{message.sticker.file_unique_id}.tgs"
654
+ elif message.sticker.is_video:
655
+ filename = f"{message.sticker.file_unique_id}.webm"
656
+ else:
657
+ filename = f"{message.sticker.file_unique_id}.webp"
658
+ elif message.video_note:
659
+ filename = f"{message.video_note.file_unique_id}.mp4"
660
+ elif message.voice:
661
+ filename = f"{message.voice.file_unique_id}.ogg"
662
+ else:
663
+ return # should never happen
664
 
665
+ # Album grouping (for photos, videos, documents that belong to an album)
666
+ if message.media_group_id and (message.photo or message.video or message.document):
667
  group_id = str(message.media_group_id)
668
  chat_id = message.chat.id
669
  user_id = message.from_user.id