Your Name 5 年 前
親
コミット
fc95b7cb57
3 ファイル変更、160 行追加、12 行削除
  1. 1 0
      .gitignore
  2. 12 9
      wbb/modules/greetings.py
  3. 147 3
      wbb/modules/stickers.py

+ 1 - 0
.gitignore

@@ -2,6 +2,7 @@
 __pycache__/
 *.py[cod]
 *$py.class
+*.mp3
 .
 # C extensions
 *.so

+ 12 - 9
wbb/modules/greetings.py

@@ -8,7 +8,7 @@ from datetime import datetime
 from pyrogram import filters
 from wbb import app, WELCOME_DELAY_KICK_SEC
 from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton, ChatPermissions, User
-from pyrogram.errors.exceptions.bad_request_400 import UserNotParticipant
+from pyrogram.errors.exceptions.bad_request_400 import UserNotParticipant, ChatAdminRequired
 from wbb.utils.errors import capture_err
 from wbb.utils.dbfunctions import is_gbanned_user
 
@@ -18,15 +18,18 @@ from wbb.utils.dbfunctions import is_gbanned_user
 async def welcome(_, message: Message):
     """Mute new member and send message with button"""
     for member in message.new_chat_members:
-        if member.is_bot:
-            continue  # ignore bots
-        if await is_gbanned_user(member.id):
-            await message.chat.kick_member(member.id)
+        try:
+            if member.is_bot:
+                continue  # ignore bots
+            if await is_gbanned_user(member.id):
+                await message.chat.kick_member(member.id)
+                continue
+            text = (f"Welcome, {(member.mention())}\n**Are you human?**\n"
+                    "You will be removed from this chat if you are not verified "
+                    f"in {WELCOME_DELAY_KICK_SEC} seconds")
+            await message.chat.restrict_member(member.id, ChatPermissions())
+        except ChatAdminRequired:
             continue
-        text = (f"Welcome, {(member.mention())}\n**Are you human?**\n"
-                "You will be removed from this chat if you are not verified "
-                f"in {WELCOME_DELAY_KICK_SEC} seconds")
-        await message.chat.restrict_member(member.id, ChatPermissions())
         button_message = await message.reply(
             text,
             reply_markup=InlineKeyboardMarkup(

+ 147 - 3
wbb/modules/stickers.py

@@ -1,11 +1,19 @@
-from pyrogram import filters
+import os
+import math
+import imghdr
+from PIL import Image
+from telegram import Bot as tg
+from telegram import TelegramError
+from wbb.utils.botinfo import BOT_USERNAME
+from wbb import BOT_TOKEN
 from wbb import app
+from pyrogram import filters
 from wbb.utils.errors import capture_err
 
 __MODULE__ = "Stickers"
-__HELP__ = """/sticker_id - To Get File ID of A Sticker."""
+__HELP__ = """/sticker_id - To Get File ID of A Sticker.
+/kang - To Kang A Sticker or Image."""
 
-# TODO Need to add /kang here
 
 
 @app.on_message(filters.command("sticker_id") & ~filters.edited)
@@ -19,3 +27,139 @@ async def sticker_id(_, message):
         return
     file_id = message.reply_to_message.sticker.file_id
     await message.reply_text(f"`{file_id}`")
+
+
+updater = tg(BOT_TOKEN)
+
+
+@app.on_message(filters.command("kang") & ~filters.edited)
+@capture_err
+async def kang(client, message):
+    args = message.text.split()
+    msg = await message.reply_text("Kanging Sticker..")
+    user = message.from_user
+    packnum = 0
+    packname = "f" + str(user.id) + "_by_"+ BOT_USERNAME
+    packname_found = 0
+    max_stickers = 120
+    while packname_found == 0:
+        try:
+            stickerset = updater.get_sticker_set(packname)
+            if len(stickerset.stickers) >= max_stickers:
+                packnum += 1
+                packname = "f" + str(packnum) + "_" + \
+                    str(user.id) + "_by_"+BOT_USERNAME
+            else:
+                packname_found = 1
+        except TelegramError as e:
+            if e.message == "Stickerset_invalid":
+                packname_found = 1
+    kangsticker = "images/kangsticker.png"
+    if message.reply_to_message:
+        if message.reply_to_message.sticker:
+            file_id = message.reply_to_message.sticker.file_id
+        elif message.reply_to_message.photo:
+            file_id = message.reply_to_message.photo.file_id
+        elif message.reply_to_message.document:
+            file_id = message.reply_to_message.document.file_id
+        else:
+            await msg.edit("Nope.")
+            return
+        await msg.edit("Kanging.....")
+        await app.download_media(file_id, file_name='images/kangsticker.png')
+        image_type = imghdr.what(kangsticker)
+        if image_type != 'jpeg' and image_type != 'png' and image_type != 'webp':
+            await msg.edit("Format not supported! ({})".format(image_type))
+            return
+        if len(args) > 1:
+            sticker_emoji = str(args[1])
+        elif message.reply_to_message.sticker and message.reply_to_message.sticker.emoji:
+            sticker_emoji = message.reply_to_message.sticker.emoji
+        else:
+            sticker_emoji = "🤔"
+        try:
+            im = Image.open(kangsticker)
+            maxsize = (512, 512)
+            if (im.width and im.height) < 512:
+                size1 = im.width
+                size2 = im.height
+                if im.width > im.height:
+                    scale = 512/size1
+                    size1new = 512
+                    size2new = size2 * scale
+                else:
+                    scale = 512/size2
+                    size1new = size1 * scale
+                    size2new = 512
+                size1new = math.floor(size1new)
+                size2new = math.floor(size2new)
+                sizenew = (size1new, size2new)
+                im = im.resize(sizenew)
+            else:
+                im.thumbnail(maxsize)
+            if not message.reply_to_message.sticker:
+                im.save(kangsticker, "PNG")
+            updater.add_sticker_to_set(user_id=user.id, name=packname,
+                                       png_sticker=open('images/kangsticker.png', 'rb'), emojis=sticker_emoji)
+            await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
+        except OSError as e:
+            await message.reply_text("Something wrong happened.")
+            print(e)
+            return
+        except TelegramError as e:
+            if e.message == "Stickerset_invalid":
+                await msg.edit("Kanging")
+                await makepack_internal(msg, user, open('images/kangsticker.png', 'rb'), sticker_emoji, updater, packname, packnum)
+            elif e.message == "Sticker_png_dimensions":
+                im.save(kangsticker, "PNG")
+                updater.add_sticker_to_set(user_id=user.id, name=packname,
+                                           png_sticker=open('images/kangsticker.png', 'rb'), emojis=sticker_emoji)
+                await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
+            elif e.message == "Invalid sticker emojis":
+                await msg.edit("Invalid emoji")
+            elif e.message == "Stickers_too_much":
+                await msg.edit("Too much stickers")
+            elif e.message == "Internal Server Error: sticker set not found (500)":
+                await msg.edit("Sticker Kanged [pack](t.me/addstickers/{})\nEmoji: ```{}```".format(packname, sticker_emoji))
+            print(e)
+    else:
+        packs = "Please reply to a sticker\nhere is your pack:\n"
+        if packnum > 0:
+            firstpackname = "c" + str(user.id) + "_by_"+ BOT_USERNAME
+            for i in range(0, packnum + 1):
+                if i == 0:
+                    packs += f"[pack](t.me/addstickers/{firstpackname})\n"
+                else:
+                    packs += f"[pack{i}](t.me/addstickers/{packname})\n"
+        else:
+            packs += f"[pack](t.me/addstickers/{packname})"
+            await msg.edit(packs)
+    if os.path.isfile("images/kangsticker.png"):
+        os.remove("images/kangsticker.png")
+
+
+async def makepack_internal(msg, user, png_sticker, emoji, updater, packname, packnum):
+    name = user.first_name
+    name = name[:50]
+    try:
+        extra_version = ""
+        if packnum > 0:
+            extra_version = " " + str(packnum)
+        success = updater.create_new_sticker_set(user.id, packname, f"{name}'s wbb pack" + extra_version,
+                                                 png_sticker=png_sticker,
+                                                 emojis=emoji)
+    except TelegramError as e:
+        print(e)
+        if e.message == "Sticker set name is already occupied":
+            await msg.edit("Your pack can be found [here](t.me/addstickers/%s)" % packname)
+        elif e.message == "Peer_id_invalid":
+            await msg.edit("Contact me in PM first.", reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(
+                text="Start", url=f"t.me/{bot_username}")]]))
+        elif e.message == "Internal Server Error: created sticker set not found (500)":
+            await msg.edit("Sticker pack successfully created. Get it [here](t.me/addstickers/%s)" % packname)
+        return
+
+    if success:
+        await msg.edit("Sticker pack successfully created. Get it [here](t.me/addstickers/%s)" % packname)
+    else:
+        await msg.edit("Failed to create sticker pack.")