diff --git a/games/nude.py b/games/nude.py index 5dfe692..280bbf4 100644 --- a/games/nude.py +++ b/games/nude.py @@ -3,7 +3,7 @@ from aiogram import types import config import logging import random -import json +import re logger = logging.getLogger(__name__) @@ -19,66 +19,90 @@ async def handle_nude_cmd(message: types.Message): help_msg = ( "🔥 Справка по команде /nude:\n\n" "Получает случайные изображения взрослых женщин из открытых источников.\n" - "• Использует Pornhub API для поиска контента\n" - "• По умолчанию ищет популярные видео с высоким рейтингом\n" - "• Отправляет превью видео как изображение\n\n" + "• Использует прямое сканирование сайтов для поиска контента\n" + "• По умолчанию ищет популярные изображения\n" + "• Отправляет изображения напрямую\n\n" "Пример: /nude\n" - "По умолчанию: Популярный контент для взрослых" + "По умолчанию: Случайные изображения с популярных сайтов" ) await message.reply(help_msg, parse_mode="HTML") return - # Используем Pornhub API для поиска видео - url = "https://www.pornhub.com/webmasters/search" + # Список сайтов для сканирования + sites = [ + "https://www.imagefap.com/gallery.php?pg=random", + "https://xhamster.com/photos?sort=random", + "https://spankbang.com/random" + ] - params = { - "category": "straight", - "ordering": "mostviewed", - "period": "week", - "thumbsize": "medium" - } + random_site = random.choice(sites) headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.5", + "Accept-Encoding": "gzip, deflate", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1" } try: async with aiohttp.ClientSession() as session: - async with session.get(url, params=params, headers=headers) as resp: + async with session.get(random_site, headers=headers) as resp: if resp.status != 200: - logger.error(f"Pornhub API Error: {resp.status}") - await message.reply("Не удалось получить контент от сервера :(") + logger.error(f"Site access error: {resp.status}") + await message.reply("Не удалось получить доступ к сайту :(") return - # Pornhub API возвращает HTML, нужно парсить - text = await resp.text() + html = await resp.text() - # Ищем URL превью в HTML - import re - thumb_pattern = r']+src="([^"]+)"[^>]+class="thumb"' - matches = re.findall(thumb_pattern, text) + # Ищем URL изображений в HTML + img_patterns = [ + r']+src="([^"]+)"', + r']+href="([^"]+\.(jpg|jpeg|png|gif|webp))"', + r'data-src="([^"]+)"' + ] - if not matches: - await message.reply("Не удалось найти контент :(") + img_urls = [] + for pattern in img_patterns: + matches = re.findall(pattern, html, re.IGNORECASE) + img_urls.extend(matches) + + if not img_urls: + await message.reply("Изображения не найдены на странице :(") return - # Берем случайное превью - thumb_url = random.choice(matches) + # Фильтруем и выбираем случайное изображение + valid_imgs = [] + for img_url in img_urls: + if img_url.startswith('//'): + img_url = 'https:' + img_url + elif img_url.startswith('/'): + if 'imagefap.com' in random_site: + img_url = 'https://www.imagefap.com' + img_url + elif 'xhamster.com' in random_site: + img_url = 'https://xhamster.com' + img_url + elif 'spankbang.com' in random_site: + img_url = 'https://spankbang.com' + img_url + + if any(ext in img_url.lower() for ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp']): + valid_imgs.append(img_url) - # Убедимся что URL полный - if not thumb_url.startswith('http'): - thumb_url = f"https://thumb.pornhub.com{thumb_url}" + if not valid_imgs: + await message.reply("Подходящие изображения не найдены :(") + return - caption = random.choice(CAPTIONS) - - # Отправляем как фото - try: - input_file = types.URLInputFile(thumb_url) - await message.answer_photo(photo=input_file, caption=caption) - except Exception as e: - logger.error(f"Error sending photo: {e}") - await message.answer(f"{caption}\n{thumb_url}") + final_img_url = random.choice(valid_imgs) + caption = random.choice(CAPTIONS) + + # Отправляем изображение + try: + input_file = types.URLInputFile(final_img_url) + await message.answer_photo(photo=input_file, caption=caption) + except Exception as e: + logger.error(f"Error sending photo: {e}") + await message.answer(f"{caption}\n{final_img_url}") except Exception as e: logger.exception("Error in nude command") - await message.reply("Произошла ошибка при обращении к API :(") + await message.reply("Произошла ошибка при обработке запроса :(")