stickers.py 3.8 KB

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