1
0
Fork 0
forked from zovos/bot_tg

Merge pull request 'suki' (#20) from jeffrey228/bot_tg:main into main

Reviewed-on: zovos/bot_tg#20
This commit is contained in:
q 2026-04-10 07:58:06 +00:00
commit 06d97cbff0

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
# Убедимся что URL полный if any(ext in img_url.lower() for ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp']):
if not thumb_url.startswith('http'): valid_imgs.append(img_url)
thumb_url = f"https://thumb.pornhub.com{thumb_url}"
caption = random.choice(CAPTIONS) if not valid_imgs:
await message.reply("Подходящие изображения не найдены :(")
return
# Отправляем как фото final_img_url = random.choice(valid_imgs)
try: caption = random.choice(CAPTIONS)
input_file = types.URLInputFile(thumb_url)
await message.answer_photo(photo=input_file, caption=caption) # Отправляем изображение
except Exception as e: try:
logger.error(f"Error sending photo: {e}") input_file = types.URLInputFile(final_img_url)
await message.answer(f"{caption}\n{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{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("Произошла ошибка при обработке запроса :(")