import aiohttp from aiogram import types import config import logging import random import re logger = logging.getLogger(__name__) CAPTIONS = [ "Hot stuff πŸ”₯", "Sexy content 😏" ] async def handle_nude_cmd(message: types.Message): args = message.text.split(maxsplit=1) if len(args) > 1 and args[1].strip() == "-h": help_msg = ( "πŸ”₯ Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ /nude:\n\n" "ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ случайныС изобраТСния взрослых ΠΆΠ΅Π½Ρ‰ΠΈΠ½ ΠΈΠ· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… источников.\n" "β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прямоС сканированиС сайтов для поиска ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°\n" "β€’ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡ‰Π΅Ρ‚ популярныС изобраТСния\n" "β€’ ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ изобраТСния Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ\n\n" "ΠŸΡ€ΠΈΠΌΠ΅Ρ€: /nude\n" "По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹Π΅ изобраТСния с популярных сайтов" ) 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" ] random_site = random.choice(sites) 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" } try: async with aiohttp.ClientSession() as session: async with session.get(random_site, headers=headers) as resp: if resp.status != 200: logger.error(f"Site access error: {resp.status}") await message.reply("НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ сайту :(") return html = await resp.text() # Π˜Ρ‰Π΅ΠΌ URL ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² HTML img_patterns = [ r']+src="([^"]+)"', r']+href="([^"]+\.(jpg|jpeg|png|gif|webp))"', r'data-src="([^"]+)"' ] 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 # Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ случайноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 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) if not valid_imgs: await message.reply("ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ изобраТСния Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ :(") return 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("ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запроса :(")