quotly.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from io import BytesIO
  2. from traceback import format_exc
  3. from pyrogram import filters
  4. from pyrogram.types import Message
  5. from wbb import SUDOERS, USERBOT_PREFIX, app, app2, arq
  6. from wbb.core.decorators.errors import capture_err
  7. __MODULE__ = "Quotly"
  8. __HELP__ = """
  9. /q - To quote a message.
  10. /q [INTEGER] - To quote more than 1 messages.
  11. /q r - to quote a message with it's reply
  12. Use .q to quote using userbot
  13. """
  14. async def quotify(messages: list):
  15. response = await arq.quotly(messages)
  16. if not response.ok:
  17. return [False, response.result]
  18. sticker = response.result
  19. sticker = BytesIO(sticker)
  20. sticker.name = "sticker.webp"
  21. return [True, sticker]
  22. def getArg(message: Message) -> str:
  23. arg = message.text.strip().split(None, 1)[1].strip()
  24. return arg
  25. def isArgInt(message: Message) -> bool:
  26. count = getArg(message)
  27. try:
  28. count = int(count)
  29. return [True, count]
  30. except ValueError:
  31. return [False, 0]
  32. @app2.on_message(
  33. filters.command("q", prefixes=USERBOT_PREFIX) & filters.user(SUDOERS)
  34. )
  35. @app.on_message(filters.command("q") & ~filters.private)
  36. @capture_err
  37. async def quotly_func(client, message: Message):
  38. if not message.reply_to_message:
  39. return await message.reply_text("Reply to a message to quote it.")
  40. if not message.reply_to_message.text:
  41. return await message.reply_text(
  42. "Replied message has no text, can't quote it."
  43. )
  44. m = await message.reply_text("Quoting Messages")
  45. if len(message.command) < 2:
  46. messages = [message.reply_to_message]
  47. elif len(message.command) == 2:
  48. arg = isArgInt(message)
  49. if arg[0]:
  50. if arg[1] < 2 or arg[1] > 10:
  51. return await m.edit("Argument must be between 2-10.")
  52. count = arg[1]
  53. messages = await client.get_messages(
  54. message.chat.id,
  55. [
  56. i
  57. for i in range(
  58. message.reply_to_message.message_id,
  59. message.reply_to_message.message_id + count,
  60. )
  61. ],
  62. replies=0,
  63. )
  64. else:
  65. if getArg(message) != "r":
  66. return await m.edit(
  67. "Incorrect Argument, Pass **'r'** or **'INT'**, **EX:** __/q 2__"
  68. )
  69. reply_message = await client.get_messages(
  70. message.chat.id,
  71. message.reply_to_message.message_id,
  72. replies=1,
  73. )
  74. messages = [reply_message]
  75. else:
  76. await m.edit(
  77. "Incorrect argument, check quotly module in help section."
  78. )
  79. return
  80. try:
  81. sticker = await quotify(messages)
  82. if not sticker[0]:
  83. await message.rely_text(sticker[1])
  84. return await m.delete()
  85. sticker = sticker[1]
  86. await message.reply_sticker(sticker)
  87. await m.delete()
  88. sticker.close()
  89. except Exception as e:
  90. await message.reply_text(
  91. "Something wrong happened while quoting messages,"
  92. + " This error usually happens when there's a "
  93. + " message containing something other than text."
  94. )
  95. await m.delete()
  96. e = format_exc()
  97. print(e)