Compare commits

..

No commits in common. "06d97cbff0594729d68e1916270fd30b26bce941" and "361e86c384067b3ca50ac80c3b9d3e5cfde3679f" have entirely different histories.

View file

@ -3,7 +3,7 @@ from aiogram import types
import config
import logging
import random
import re
import json
logger = logging.getLogger(__name__)
@ -19,90 +19,66 @@ async def handle_nude_cmd(message: types.Message):
help_msg = (
"🔥 <b>Справка по команде /nude:</b>\n\n"
"Получает случайные изображения взрослых женщин из открытых источников.\n"
"• Использует прямое сканирование сайтов для поиска контента\n"
"• По умолчанию ищет популярные изображения\n"
"• Отправляет изображения напрямую\n\n"
"• Использует Pornhub API для поиска контента\n"
"• По умолчанию ищет популярные видео с высоким рейтингом\n"
"• Отправляет превью видео как изображение\n\n"
"<i>Пример:</i> <code>/nude</code>\n"
"<i>По умолчанию:</i> Случайные изображения с популярных сайтов"
"<i>По умолчанию:</i> Популярный контент для взрослых"
)
await message.reply(help_msg, parse_mode="HTML")
return
# Список сайтов для сканирования
sites = [
"https://www.imagefap.com/gallery.php?pg=random",
"https://xhamster.com/photos?sort=random",
"https://spankbang.com/random"
]
# Используем Pornhub API для поиска видео
url = "https://www.pornhub.com/webmasters/search"
random_site = random.choice(sites)
params = {
"category": "straight",
"ordering": "mostviewed",
"period": "week",
"thumbsize": "medium"
}
headers = {
"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"
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
try:
async with aiohttp.ClientSession() as session:
async with session.get(random_site, headers=headers) as resp:
async with session.get(url, params=params, headers=headers) as resp:
if resp.status != 200:
logger.error(f"Site access error: {resp.status}")
await message.reply("Не удалось получить доступ к сайту :(")
logger.error(f"Pornhub API Error: {resp.status}")
await message.reply("Не удалось получить контент от сервера :(")
return
html = await resp.text()
# Pornhub API возвращает HTML, нужно парсить
text = await resp.text()
# Ищем URL изображений в HTML
img_patterns = [
r'<img[^>]+src="([^"]+)"',
r'<a[^>]+href="([^"]+\.(jpg|jpeg|png|gif|webp))"',
r'data-src="([^"]+)"'
]
# Ищем URL превью в HTML
import re
thumb_pattern = r'<img[^>]+src="([^"]+)"[^>]+class="thumb"'
matches = re.findall(thumb_pattern, text)
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("Изображения не найдены на странице :(")
if not matches:
await message.reply("Не удалось найти контент :(")
return
# Фильтруем и выбираем случайное изображение
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)
# Берем случайное превью
thumb_url = random.choice(matches)
if not valid_imgs:
await message.reply("Подходящие изображения не найдены :(")
return
# Убедимся что URL полный
if not thumb_url.startswith('http'):
thumb_url = f"https://thumb.pornhub.com{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}")
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}")
except Exception as e:
logger.exception("Error in nude command")
await message.reply("Произошла ошибка при обработке запроса :(")
await message.reply("Произошла ошибка при обращении к API :(")