Spaces:
Running
Running
File size: 4,712 Bytes
eebbd4e ec03066 3547fa0 eebbd4e ec03066 eebbd4e 3547fa0 bf800b1 eebbd4e bf800b1 eebbd4e 7d60737 eebbd4e 7d60737 ec03066 0147678 bf800b1 ccfe779 bf800b1 6157f17 eebbd4e 52ec611 eebbd4e 67d1535 42717ba eebbd4e 42717ba eebbd4e 42717ba 7d60737 eebbd4e 864a0ae eebbd4e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import os
import time
import json
import asyncio
import io
import os
import re
import logging
import string
import random
from pyrogram import *
from pyrogram.types import *
from pyrogram.errors import *
from database import db
from logger import LOGS
from pyrogram import Client, filters
from pyrogram.enums import ChatMemberStatus, ChatMembersFilter, ChatType
from pyrogram.types import (
CallbackQuery,
InlineKeyboardMarkup,
InlineKeyboardButton,
Message
)
from PIL import Image, ImageDraw, ImageFont
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
user_list = []
captcha_texts = {}
def generate_captcha():
letters = string.ascii_uppercase + string.digits
captcha_text = ''.join(random.choice(letters) for _ in range(5))
img = Image.new('RGB', (150, 60), color = (255, 255, 255))
d = ImageDraw.Draw(img)
try:
font = ImageFont.truetype("arial.ttf", 40)
except IOError:
font = ImageFont.load_default()
d.text((10,10), captcha_text, font=font, fill=(0,0,0))
img_path = f"captcha_{captcha_text}.png"
img.save(img_path)
return captcha_text, img_path
@Client.on_chat_join_request(filters.chat("KillerXSupport"))
async def join_request(client: Client, event: ChatJoinRequest):
member = await client.get_chat_member(event.chat.id, "me")
if member.status != ChatMemberStatus.ADMINISTRATOR:
return await client.send_message(event.chat.id, text="I am not an administrator in this group.")
async for m in client.get_chat_members(event.chat.id, filter=ChatMembersFilter.ADMINISTRATORS):
if not m.user.is_bot:
user_list.append(m.user.id)
captcha_text, img_path = generate_captcha()
captcha_texts[event.from_user.id] = captcha_text
captcha_texts["chat_id"] = event.chat.id
keyboard = InlineKeyboardMarkup(
[
[InlineKeyboardButton("π Refresh CAPTCHA", callback_data="refresh_captcha")],
[InlineKeyboardButton("β
Verify", callback_data="verify_captcha")]
]
)
if event.chat.type == ChatType.SUPERGROUP:
try:
await client.send_photo(
event.from_user.id,
photo=img_path,
caption=f"βοΈ **Verify that you are human!**\n\nβ Please enter the CAPTCHA text below the image.",
reply_markup=keyboard
)
os.remove(img_path)
except Exception as e:
await client.send_message(
event.chat.id,
text=str(e)
)
logger.error(str(e))
@Client.on_callback_query(filters.regex("^refresh_captcha$"))
async def refresh_captcha_callback(client: Client, cb: CallbackQuery):
user_id = cb.from_user.id
if user_id in captcha_texts:
del captcha_texts[user_id]
captcha_text, img_path = generate_captcha()
captcha_texts[user_id] = captcha_text
keyboard = InlineKeyboardMarkup(
[
[InlineKeyboardButton("π Refresh CAPTCHA", callback_data="refresh_captcha")],
[InlineKeyboardButton("β
Verify", callback_data="verify_captcha")]
]
)
await cb.edit_message_media(
media=InputMediaPhoto(img_path),
reply_markup=keyboard
)
os.remove(img_path)
await cb.answer("CAPTCHA refreshed!", show_alert=False)
@Client.on_callback_query(filters.regex("^verify_captcha$"))
async def verify_captcha_callback(client: Client, cb: CallbackQuery):
user_id = cb.from_user.id
if user_id not in captcha_texts:
await cb.answer("βοΈ Please start the CAPTCHA verification first by join request.", show_alert=True)
return
await cb.message.reply_text("π **Please enter the CAPTCHA text:**")
await cb.answer()
@Client.on_message(filters.text & filters.private)
async def handle_captcha_response(client: Client, message: Message):
user_id = message.from_user.id
user_response = message.text.strip().upper()
if user_id not in captcha_texts:
return
correct_captcha = captcha_texts.get(user_id)
if user_response == correct_captcha:
await message.reply("β
CAPTCHA verification successful!")
await client.approve_chat_join_request(
chat_id=captcha_texts.get("chat_id"),
user_id=user_id
)
del captcha_texts[user_id]
del captcha_texts["chat_id"]
else:
await message.reply("β Incorrect CAPTCHA. Please try again by join request again.")
await client.decline_chat_join_request(
chat_id=captcha_texts.get("chat_id"),
user_id=user_id
)
del captcha_texts[user_id]
del captcha_texts["chat_id"] |