stickers.py 6.9 KB

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