stickers.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import os
  2. import imghdr
  3. from wbb.utils.botinfo import BOT_USERNAME
  4. from wbb import app
  5. from pyrogram import filters
  6. from wbb.utils.errors import capture_err
  7. from wbb.utils.files import resize_file_to_sticker_size, upload_document, get_document_from_file_id
  8. from wbb.utils.stickerset import get_sticker_set_by_name, create_sticker, add_sticker_to_set, create_sticker_set
  9. from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
  10. from pyrogram.errors.exceptions.bad_request_400 import PeerIdInvalid
  11. __MODULE__ = "Stickers"
  12. __HELP__ = """/sticker_id - To Get File ID of A Sticker.
  13. /kang - To Kang A Sticker or Image."""
  14. MAX_STICKERS = 120 # would be better if we could fetch this limit directly from telegram
  15. SUPPORTED_TYPES = ['jpeg', 'png', 'webp']
  16. @app.on_message(filters.command("sticker_id") & ~filters.edited)
  17. @capture_err
  18. async def sticker_id(_, message):
  19. if not message.reply_to_message:
  20. await message.reply_text("Reply to a sticker.")
  21. return
  22. if not message.reply_to_message.sticker:
  23. await message.reply_text("Reply to a sticker.")
  24. return
  25. file_id = message.reply_to_message.sticker.file_id
  26. await message.reply_text(f"`{file_id}`")
  27. @app.on_message(filters.command("kang") & ~filters.edited)
  28. @capture_err
  29. async def kang(client, message):
  30. if not message.reply_to_message:
  31. await message.reply_text("Reply to a sticker/image to kang it.")
  32. return
  33. msg = await message.reply_text("Kanging Sticker..")
  34. # Find the proper emoji
  35. args = message.text.split()
  36. if len(args) > 1:
  37. sticker_emoji = str(args[1])
  38. elif message.reply_to_message.sticker and message.reply_to_message.sticker.emoji:
  39. sticker_emoji = message.reply_to_message.sticker.emoji
  40. else:
  41. sticker_emoji = "🤔"
  42. # Get the corresponding fileid, resize the file if necessary
  43. doc = (message.reply_to_message.photo or message.reply_to_message.document)
  44. if message.reply_to_message.sticker:
  45. sticker = await create_sticker(await get_document_from_file_id(message.reply_to_message.sticker.file_id), sticker_emoji)
  46. elif doc:
  47. temp_file_path = await app.download_media(doc)
  48. image_type = imghdr.what(temp_file_path)
  49. if image_type not in SUPPORTED_TYPES:
  50. await msg.edit("Format not supported! ({})".format(image_type))
  51. return
  52. try:
  53. temp_file_path = await resize_file_to_sticker_size(temp_file_path)
  54. except OSError as e:
  55. await msg.edit_text("Something wrong happened.")
  56. raise Exception(
  57. f"Something went wrong while resizing the sticker (at {temp_file_path}); {e}")
  58. return False
  59. sticker = await create_sticker(await upload_document(client, temp_file_path, message.chat.id), sticker_emoji)
  60. if os.path.isfile(temp_file_path):
  61. os.remove(temp_file_path)
  62. else:
  63. await msg.edit("Nope, can't kang that.")
  64. return
  65. # Find an available pack & add the sticker to the pack; create a new pack if needed
  66. # Would be a good idea to cache the number instead of searching it every single time...
  67. packnum = 0
  68. packname = "f" + str(message.from_user.id) + "_by_" + BOT_USERNAME
  69. try:
  70. while True:
  71. stickerset = await get_sticker_set_by_name(client, packname)
  72. if not stickerset:
  73. stickerset = await create_sticker_set(client, message.from_user.id, f"{message.from_user.first_name[:32]}'s kang pack", packname, [sticker])
  74. elif stickerset.set.count >= MAX_STICKERS:
  75. packnum += 1
  76. packname = "f" + str(packnum) + "_" + \
  77. str(message.from_user.id) + "_by_"+BOT_USERNAME
  78. continue
  79. else:
  80. await add_sticker_to_set(client, stickerset, sticker)
  81. break
  82. await msg.edit("Sticker Kanged To [Pack](t.me/addstickers/{})\nEmoji: {}".format(packname, sticker_emoji))
  83. except PeerIdInvalid:
  84. keyboard = InlineKeyboardMarkup(
  85. [[InlineKeyboardButton(text="Start", url=f"t.me/{BOT_USERNAME}")]])
  86. await msg.edit("Contact Me In Pm First", reply_markup=keyboard)