Compare commits

..

2 commits

Author SHA1 Message Date
q
06d97cbff0 Merge pull request 'suki' (#20) from jeffrey228/bot_tg:main into main
Reviewed-on: #20
2026-04-10 07:58:06 +00:00
itexpert228
6433d9c11e
suki 2026-04-10 10:56:19 +03:00

View file

@ -3,7 +3,7 @@ from aiogram import types
import config import config
import logging import logging
import random import random
import json import re
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -19,66 +19,90 @@ async def handle_nude_cmd(message: types.Message):
help_msg = ( help_msg = (
"🔥 <b>Справка по команде /nude:</b>\n\n" "🔥 <b>Справка по команде /nude:</b>\n\n"
"Получает случайные изображения взрослых женщин из открытых источников.\n" "Получает случайные изображения взрослых женщин из открытых источников.\n"
"• Использует Pornhub API для поиска контента\n" "• Использует прямое сканирование сайтов для поиска контента\n"
"• По умолчанию ищет популярные видео с высоким рейтингом\n" "• По умолчанию ищет популярные изображения\n"
"• Отправляет превью видео как изображение\n\n" "• Отправляет изображения напрямую\n\n"
"<i>Пример:</i> <code>/nude</code>\n" "<i>Пример:</i> <code>/nude</code>\n"
"<i>По умолчанию:</i> Популярный контент для взрослых" "<i>По умолчанию:</i> Случайные изображения с популярных сайтов"
) )
await message.reply(help_msg, parse_mode="HTML") await message.reply(help_msg, parse_mode="HTML")
return 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 = { random_site = random.choice(sites)
"category": "straight",
"ordering": "mostviewed",
"period": "week",
"thumbsize": "medium"
}
headers = { 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: try:
async with aiohttp.ClientSession() as session: 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: if resp.status != 200:
logger.error(f"Pornhub API Error: {resp.status}") logger.error(f"Site access error: {resp.status}")
await message.reply("Не удалось получить контент от сервера :(") await message.reply("Не удалось получить доступ к сайту :(")
return return
# Pornhub API возвращает HTML, нужно парсить html = await resp.text()
text = await resp.text()
# Ищем URL превью в HTML # Ищем URL изображений в HTML
import re img_patterns = [
thumb_pattern = r'<img[^>]+src="([^"]+)"[^>]+class="thumb"' r'<img[^>]+src="([^"]+)"',
matches = re.findall(thumb_pattern, text) r'<a[^>]+href="([^"]+\.(jpg|jpeg|png|gif|webp))"',
r'data-src="([^"]+)"'
]
if not matches: img_urls = []
await message.reply("Не удалось найти контент :(") for pattern in img_patterns:
matches = re.findall(pattern, html, re.IGNORECASE)
img_urls.extend(matches)
if not img_urls:
await message.reply("Изображения не найдены на странице :(")
return 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 valid_imgs:
if not thumb_url.startswith('http'): await message.reply("Подходящие изображения не найдены :(")
thumb_url = f"https://thumb.pornhub.com{thumb_url}" return
caption = random.choice(CAPTIONS) final_img_url = random.choice(valid_imgs)
caption = random.choice(CAPTIONS)
# Отправляем как фото
try: # Отправляем изображение
input_file = types.URLInputFile(thumb_url) try:
await message.answer_photo(photo=input_file, caption=caption) input_file = types.URLInputFile(final_img_url)
except Exception as e: await message.answer_photo(photo=input_file, caption=caption)
logger.error(f"Error sending photo: {e}") except Exception as e:
await message.answer(f"{caption}\n{thumb_url}") logger.error(f"Error sending photo: {e}")
await message.answer(f"{caption}\n{final_img_url}")
except Exception as e: except Exception as e:
logger.exception("Error in nude command") logger.exception("Error in nude command")
await message.reply("Произошла ошибка при обращении к API :(") await message.reply("Произошла ошибка при обработке запроса :(")