stickers.py 6.9 KB

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