Загрузка данных


import asyncio
import random
import logging
import os
import socket
from dotenv import load_dotenv

from aiogram import Bot, Dispatcher, types, F
from aiogram.client.session.aiohttp import AiohttpSession
from openai import OpenAI
import httpx

load_dotenv()

TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
REQUESTY_API_KEY = os.getenv("REQUESTY_API_KEY")
BASE_URL = "https://router.requesty.ai/v1"
MODEL_NAME = "google/gemma-4-31b-it"

if not TELEGRAM_TOKEN or not REQUESTY_API_KEY:
    exit("Ошибка: TELEGRAM_TOKEN или REQUESTY_API_KEY не найдены в файле .env")

RESPONSE_PROBABILITY = 0.2 
BOT_NAME = "лёха" 

# ============================================
# УМНЫЙ ПОИСК ПРОКСИ
# ============================================

def find_proxy():
    """Автоматически находит работающий прокси"""
    proxy_types = [
        ("socks5", 10808),
        ("socks5", 1080),
        ("socks5", 9050),
        ("socks4", 10808),
        ("socks4", 1080),
        ("http", 10808),
        ("http", 10809),
        ("http", 8080),
        ("http", 3128),
    ]
    
    for proxy_type, port in proxy_types:
        try:
            # Проверяем, открыт ли порт
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(1)
            result = sock.connect_ex(('127.0.0.1', port))
            sock.close()
            
            if result == 0:
                proxy_url = f"{proxy_type}://127.0.0.1:{port}"
                print(f"✅ Найден работающий прокси: {proxy_url}")
                return proxy_url
        except:
            continue
    
    print("⚠️ Прокси не найден, бот будет работать без прокси")
    return None

# Автоматически ищем прокси
PROXY_URL = find_proxy()

# ============================================
# НАСТРОЙКА КЛИЕНТОВ
# ============================================

# Настройка OpenAI
if PROXY_URL:
    http_client = httpx.Client(proxy=PROXY_URL, verify=False)
    client = OpenAI(api_key=REQUESTY_API_KEY, base_url=BASE_URL, http_client=http_client)
    
    # Настройка Telegram
    session = AiohttpSession(proxy=PROXY_URL)
    bot = Bot(token=TELEGRAM_TOKEN, session=session)
else:
    client = OpenAI(api_key=REQUESTY_API_KEY, base_url=BASE_URL)
    bot = Bot(token=TELEGRAM_TOKEN)

dp = Dispatcher()
chat_history = {}

SYSTEM_PROMPT = (
    f"Ты — обычный парень в чате. Твое имя — {BOT_NAME}. "
    "Твоя цель: общаться максимально естественно, как человек. "
    "ПРАВИЛА:\n"
    "1. НИКОГДА не говори, что ты ИИ, бот или языковая модель.\n"
    "2. Пиши с маленькой буквы, используй сленг, сокращения (типа 'ща', 'норм', 'хз').\n"
    "3. Не используй идеальную пунктуацию и сложные списки. Пиши кратко и по делу.\n"
    "4. Шути, иронизируй, используй сарказм. Понимай контекст шуток и отвечай в том же стиле.\n"
    "5. Копируй манеру речи собеседников.\n"
    "6. Не старайся быть полезным помощником. Ты просто участник беседы."
)

async def get_ai_response(chat_id, user_text):
    if chat_id not in chat_history:
        chat_history[chat_id] = [{"role": "system", "content": SYSTEM_PROMPT}]
    
    chat_history[chat_id].append({"role": "user", "content": user_text})
    
    try:
        response = client.chat.completions.create(
            model=MODEL_NAME,
            messages=chat_history[chat_id],
            temperature=0.9,
        )
        answer = response.choices[0].message.content
        chat_history[chat_id].append({"role": "assistant", "content": answer})
        return answer
    except Exception as e:
        logging.error(f"Ошибка API: {e}")
        return "чето я завис, повтори"

@dp.message(F.text)
async def handle_text(message: types.Message):
    is_mentioned = BOT_NAME.lower() in message.text.lower()
    should_respond = is_mentioned or random.random() < RESPONSE_PROBABILITY

    if should_respond:
        await bot.send_chat_action(message.chat.id, "typing")
        await asyncio.sleep(random.randint(2, 6))
        
        response = await get_ai_response(message.chat.id, message.text)
        await message.answer(response)

@dp.message(F.voice | F.video_note)
async def handle_voice(message: types.Message):
    await bot.send_chat_action(message.chat.id, "typing")
    await asyncio.sleep(2)
    await message.answer("я сейчас не могу слушать, напиши текстом плз")

@dp.message(F.photo)
async def handle_photo(message: types.Message):
    await bot.send_chat_action(message.chat.id, "typing")
    await asyncio.sleep(2)
    await message.answer("о, прикольно!")

@dp.message(F.video)
async def handle_video(message: types.Message):
    await bot.send_chat_action(message.chat.id, "typing")
    await asyncio.sleep(2)
    await message.answer("видос заценил, жиза")

async def main():
    logging.basicConfig(level=logging.INFO)
    if PROXY_URL:
        print(f"✅ Бот запущен с прокси: {PROXY_URL}")
    else:
        print("✅ Бот запущен без прокси")
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())