Загрузка данных
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())