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 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 = (
"🔥 <b>Справка по команде /nude:</b>\n\n"
"Получает случайные изображения взрослых женщин из открытых источников.\n"
"• Использует Pornhub API для поиска контента\n"
"• По умолчанию ищет популярные видео с высоким рейтингом\n"
"• Отправляет превью видео как изображение\n\n"
"• Использует прямое сканирование сайтов для поиска контента\n"
"• По умолчанию ищет популярные изображения\n"
"• Отправляет изображения напрямую\n\n"
"<i>Пример:</i> <code>/nude</code>\n"
"<i>По умолчанию:</i> Популярный контент для взрослых"
"<i>По умолчанию:</i> Случайные изображения с популярных сайтов"
)
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'<img[^>]+src="([^"]+)"[^>]+class="thumb"'
matches = re.findall(thumb_pattern, text)
# Ищем URL изображений в HTML
img_patterns = [
r'<img[^>]+src="([^"]+)"',
r'<a[^>]+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
# Убедимся что URL полный
if not thumb_url.startswith('http'):
thumb_url = f"https://thumb.pornhub.com{thumb_url}"
if any(ext in img_url.lower() for ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp']):
valid_imgs.append(img_url)
if not valid_imgs:
await message.reply("Подходящие изображения не найдены :(")
return
final_img_url = random.choice(valid_imgs)
caption = random.choice(CAPTIONS)
# Отправляем как фото
# Отправляем изображение
try:
input_file = types.URLInputFile(thumb_url)
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{thumb_url}")
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("Произошла ошибка при обработке запроса :(")