stickers.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. __MODULE__ = "Stickers"
  14. __HELP__ = """/sticker_id - To Get File ID of A Sticker.
  15. /kang - To Kang A Sticker or Image."""
  16. ## Another marie based kang module
  17. @app.on_message(filters.command("sticker_id") & ~filters.edited)
  18. @capture_err
  19. async def sticker_id(_, message):
  20. if not message.reply_to_message:
  21. await message.reply_text("Reply to a sticker.")
  22. return
  23. if not message.reply_to_message.sticker:
  24. await message.reply_text("Reply to a sticker.")
  25. return
  26. file_id = message.reply_to_message.sticker.file_id
  27. await message.reply_text(f"`{file_id}`")
  28. updater = tg(BOT_TOKEN)
  29. @app.on_message(filters.command("kang") & ~filters.edited)
  30. @capture_err
  31. async def kang(client, message):
  32. if not message.reply_to_message:
  33. await message.reply_text("Reply to a sticker/image to kang it.")
  34. return
  35. kangsticker = f"{randint(10000, 99999)}.png"
  36. args = message.text.split()
  37. msg = await message.reply_text("Kanging Sticker..")
  38. user = message.from_user
  39. packnum = 0
  40. packname = "f" + str(user.id) + "_by_"+ BOT_USERNAME
  41. packname_found = 0
  42. max_stickers = 120
  43. while packname_found == 0:
  44. try:
  45. stickerset = updater.get_sticker_set(packname)
  46. if len(stickerset.stickers) >= max_stickers:
  47. packnum += 1
  48. packname = "f" + str(packnum) + "_" + \
  49. str(user.id) + "_by_"+BOT_USERNAME
  50. else:
  51. packname_found = 1
  52. except TelegramError as e:
  53. if e.message == "Stickerset_invalid":
  54. packname_found = 1
  55. if message.reply_to_message:
  56. if message.reply_to_message.sticker:
  57. file_id = message.reply_to_message.sticker.file_id
  58. elif message.reply_to_message.photo:
  59. file_id = message.reply_to_message.photo.file_id
  60. elif message.reply_to_message.document:
  61. file_id = message.reply_to_message.document.file_id
  62. else:
  63. await msg.edit("Nope, can't kang that.")
  64. return
  65. await app.download_media(file_id, file_name=kangsticker)
  66. image_type = imghdr.what(kangsticker)
  67. if image_type != 'jpeg' and image_type != 'png' and image_type != 'webp':
  68. await msg.edit("Format not supported! ({})".format(image_type))
  69. return
  70. if len(args) > 1:
  71. sticker_emoji = str(args[1])
  72. elif message.reply_to_message.sticker and message.reply_to_message.sticker.emoji:
  73. sticker_emoji = message.reply_to_message.sticker.emoji
  74. else:
  75. sticker_emoji = "🤔"
  76. try:
  77. im = Image.open(kangsticker)
  78. maxsize = (512, 512)
  79. if (im.width and im.height) < 512:
  80. size1 = im.width
  81. size2 = im.height
  82. if im.width > im.height:
  83. scale = 512/size1
  84. size1new = 512
  85. size2new = size2 * scale
  86. else:
  87. scale = 512/size2
  88. size1new = size1 * scale
  89. size2new = 512
  90. size1new = math.floor(size1new)
  91. size2new = math.floor(size2new)
  92. sizenew = (size1new, size2new)
  93. im = im.resize(sizenew)
  94. else:
  95. im.thumbnail(maxsize)
  96. if not message.reply_to_message.sticker:
  97. im.save(kangsticker, "PNG")
  98. updater.add_sticker_to_set(user_id=user.id, name=packname,
  99. png_sticker=open(kangsticker, 'rb'), emojis=sticker_emoji)
  100. await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
  101. except OSError as e:
  102. await message.reply_text("Something wrong happened.")
  103. print(e)
  104. return
  105. except TelegramError as e:
  106. if e.message == "Stickerset_invalid":
  107. await makepack_internal(msg, user, open(kangsticker, 'rb'), sticker_emoji, updater, packname, packnum)
  108. elif e.message == "Sticker_png_dimensions":
  109. im.save(kangsticker, "PNG")
  110. updater.add_sticker_to_set(user_id=user.id, name=packname,
  111. png_sticker=open(kangsticker, 'rb'), emojis=sticker_emoji)
  112. await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
  113. elif e.message == "Invalid sticker emojis":
  114. await msg.edit("Invalid emoji")
  115. elif e.message == "Stickers_too_much":
  116. await msg.edit("Too many stickers")
  117. elif e.message == "Internal Server Error: sticker set not found (500)":
  118. await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
  119. if os.path.isfile(kangsticker):
  120. os.remove(kangsticker)
  121. async def makepack_internal(msg, user, png_sticker, emoji, updater, packname, packnum):
  122. name = user.first_name
  123. name = name[:50]
  124. try:
  125. extra_version = ""
  126. if packnum > 0:
  127. extra_version = " " + str(packnum)
  128. success = updater.create_new_sticker_set(user.id, packname, f"{name}'s wbb pack" + extra_version,
  129. png_sticker=png_sticker,
  130. emojis=emoji)
  131. except TelegramError as e:
  132. print(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.")