stickers.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import os
  2. import math
  3. import imghdr
  4. from PIL import Image
  5. from telegram import Bot as tg
  6. from telegram import TelegramError
  7. from wbb.utils.botinfo import BOT_USERNAME
  8. from wbb import BOT_TOKEN
  9. from wbb import app
  10. from pyrogram import filters
  11. from wbb.utils.errors import capture_err
  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. ## Another marie based kang module
  18. @app.on_message(filters.command("sticker_id") & ~filters.edited)
  19. @capture_err
  20. async def sticker_id(_, message):
  21. if not message.reply_to_message:
  22. await message.reply_text("Reply to a sticker.")
  23. return
  24. if not message.reply_to_message.sticker:
  25. await message.reply_text("Reply to a sticker.")
  26. return
  27. file_id = message.reply_to_message.sticker.file_id
  28. await message.reply_text(f"`{file_id}`")
  29. updater = tg(BOT_TOKEN)
  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. kangsticker = f"./{randint(10000, 99999)}.png"
  37. args = message.text.split()
  38. msg = await message.reply_text("Kanging Sticker..")
  39. user = message.from_user
  40. packnum = 0
  41. packname = "f" + str(user.id) + "_by_"+ BOT_USERNAME
  42. packname_found = 0
  43. max_stickers = 120
  44. while packname_found == 0:
  45. try:
  46. stickerset = updater.get_sticker_set(packname)
  47. if len(stickerset.stickers) >= max_stickers:
  48. packnum += 1
  49. packname = "f" + str(packnum) + "_" + \
  50. str(user.id) + "_by_"+BOT_USERNAME
  51. else:
  52. packname_found = 1
  53. except TelegramError as e:
  54. if e.message == "Stickerset_invalid":
  55. packname_found = 1
  56. if message.reply_to_message:
  57. if message.reply_to_message.sticker:
  58. file_id = message.reply_to_message.sticker.file_id
  59. elif message.reply_to_message.photo:
  60. file_id = message.reply_to_message.photo.file_id
  61. elif message.reply_to_message.document:
  62. file_id = message.reply_to_message.document.file_id
  63. else:
  64. await msg.edit("Nope, can't kang that.")
  65. return
  66. await app.download_media(file_id, file_name=kangsticker)
  67. image_type = imghdr.what(kangsticker)
  68. if image_type != 'jpeg' and image_type != 'png' and image_type != 'webp':
  69. await msg.edit("Format not supported! ({})".format(image_type))
  70. return
  71. if len(args) > 1:
  72. sticker_emoji = str(args[1])
  73. elif message.reply_to_message.sticker and message.reply_to_message.sticker.emoji:
  74. sticker_emoji = message.reply_to_message.sticker.emoji
  75. else:
  76. sticker_emoji = "🤔"
  77. try:
  78. im = Image.open(kangsticker)
  79. maxsize = (512, 512)
  80. if (im.width and im.height) < 512:
  81. size1 = im.width
  82. size2 = im.height
  83. if im.width > im.height:
  84. scale = 512/size1
  85. size1new = 512
  86. size2new = size2 * scale
  87. else:
  88. scale = 512/size2
  89. size1new = size1 * scale
  90. size2new = 512
  91. size1new = math.floor(size1new)
  92. size2new = math.floor(size2new)
  93. sizenew = (size1new, size2new)
  94. im = im.resize(sizenew)
  95. else:
  96. im.thumbnail(maxsize)
  97. if not message.reply_to_message.sticker:
  98. im.save(kangsticker, "PNG")
  99. updater.add_sticker_to_set(user_id=user.id, name=packname,
  100. png_sticker=open(kangsticker, 'rb'), emojis=sticker_emoji)
  101. await msg.edit("Sticker Kanged To [Pack](t.me/addstickers/{})\nEmoji: {}".format(packname, sticker_emoji))
  102. except OSError as e:
  103. await message.reply_text("Something wrong happened.")
  104. print(e)
  105. return
  106. except TelegramError as e:
  107. if e.message == "Stickerset_invalid":
  108. await makepack_internal(msg, user, open(kangsticker, 'rb'), sticker_emoji, updater, packname, packnum)
  109. elif e.message == "Sticker_png_dimensions":
  110. im.save(kangsticker, "PNG")
  111. updater.add_sticker_to_set(user_id=user.id, name=packname,
  112. png_sticker=open(kangsticker, 'rb'), emojis=sticker_emoji)
  113. await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
  114. elif e.message == "Invalid sticker emojis":
  115. await msg.edit("Invalid emoji")
  116. elif e.message == "Stickers_too_much":
  117. await msg.edit("Too many stickers")
  118. elif e.message == "Internal Server Error: sticker set not found (500)":
  119. await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
  120. if os.path.isfile(kangsticker):
  121. os.remove(kangsticker)
  122. async def makepack_internal(msg, user, png_sticker, emoji, updater, packname, packnum):
  123. name = user.first_name
  124. name = name[:50]
  125. try:
  126. extra_version = ""
  127. if packnum > 0:
  128. extra_version = " " + str(packnum)
  129. success = updater.create_new_sticker_set(user.id, packname, f"{name}'s wbb pack" + extra_version,
  130. png_sticker=png_sticker,
  131. emojis=emoji)
  132. except TelegramError as e:
  133. if e.message == "Sticker set name is already occupied":
  134. await msg.edit("Your pack can be found [here](t.me/addstickers/%s)" % packname)
  135. elif e.message == "Peer_id_invalid":
  136. await msg.edit("Contact me in PM first.", reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(
  137. text="Start", url=f"t.me/{BOT_USERNAME}")]]))
  138. elif e.message == "Internal Server Error: created sticker set not found (500)":
  139. await msg.edit("Sticker pack successfully created. Get it [here](t.me/addstickers/%s)" % packname)
  140. return
  141. if success:
  142. await msg.edit("Sticker pack successfully created. Get it [here](t.me/addstickers/%s)" % packname)
  143. else:
  144. await msg.edit("Failed to create sticker pack.")