arq_storage.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from asyncio import Lock
  2. from os import remove
  3. from pyrogram import filters
  4. from pyrogram.types import Message
  5. from wbb import app, arq
  6. from wbb.core.decorators.errors import capture_err
  7. from wbb.utils.functions import get_file_id_from_message
  8. __MODULE__ = "Storage"
  9. __HELP__ = """
  10. Upload unlimited files smaller than 100MB
  11. And get a download link
  12. **Usage:**
  13. /upload [url|Reply to a file]
  14. """
  15. UPLOAD_LOCK = Lock()
  16. async def upload(m: Message, file: str = None, url: str = None):
  17. err = "Something went wrong"
  18. try:
  19. resp = await arq.upload(file=file, url=url)
  20. except Exception:
  21. await m.edit(err)
  22. if file:
  23. remove(file)
  24. return
  25. if file:
  26. remove(file)
  27. if not resp:
  28. return await m.edit(err)
  29. if not resp.ok:
  30. return await m.edit(err)
  31. await m.edit(
  32. f"**Download Link:** {resp.result}",
  33. disable_web_page_preview=True,
  34. )
  35. @app.on_message(filters.command("upload"))
  36. async def arq_upload(_, message):
  37. if message.reply_to_message:
  38. if UPLOAD_LOCK.locked():
  39. return await message.reply(
  40. "One upload is already in progress, please try again later"
  41. )
  42. async with UPLOAD_LOCK:
  43. r = message.reply_to_message
  44. file_id = get_file_id_from_message(r, 100000000, None)
  45. if not file_id:
  46. return await message.reply("Unsupported media.")
  47. m = await message.reply("Downloading...")
  48. file = await app.download_media(file_id)
  49. await m.edit("Uploading...")
  50. return await upload(m, file=file)
  51. if len(message.command) != 2:
  52. return await message.reply("Not enough arguments")
  53. url = message.text.split(None, 1)[1]
  54. m = await message.reply("Uploading...")
  55. await upload(m, url=url)