import asyncio import aiohttp import sys from aiohttp_socks import ProxyConnector import re PROXY_URL = "socks5://FYqj9n:n4br4L@185.168.251.163:8000" TOKEN = "8460953229:AAFZ_1iYLsCTRWR-glNumHxoHXMxTe2-A84" async def check_updates(): """Проверка получения обновлений""" print("\n" + "=" * 60) print("🔍 ДИАГНОСТИКА ПОЛУЧЕНИЯ ОБНОВЛЕНИЙ") print("=" * 60) # Парсим прокси match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL) if not match: print("❌ Не удалось распарсить прокси") return username = match.group(1) password = match.group(2) host = match.group(3) port = int(match.group(4)) connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}") async with aiohttp.ClientSession(connector=connector) as session: # 1. Проверка базового подключения print("\n1️⃣ Проверка базового подключения...") url = f"https://api.telegram.org/bot{TOKEN}/getMe" async with session.get(url, timeout=10) as resp: data = await resp.json() if data.get('ok'): print(f" ✅ Бот найден: @{data['result']['username']}") else: print(f" ❌ Ошибка: {data}") return # 2. Сброс offset (чтобы получить все новые сообщения) print("\n2️⃣ Сброс offset...") url = f"https://api.telegram.org/bot{TOKEN}/getUpdates?offset=-1" async with session.get(url, timeout=10) as resp: await resp.json() print(" ✅ Offset сброшен") # 3. Проверка получения сообщений (короткий опрос) print("\n3️⃣ Проверка получения сообщений (короткий опрос)...") url = f"https://api.telegram.org/bot{TOKEN}/getUpdates?timeout=1" async with session.get(url, timeout=5) as resp: data = await resp.json() if data.get('result'): print(f" ✅ Найдено {len(data['result'])} сообщений!") for update in data['result']: msg = update.get('message', {}) text = msg.get('text', 'нет текста') print(f" 📨 Сообщение: {text}") else: print(" ⚠️ Нет новых сообщений") # 4. ТЕСТ LONG POLLING (30 секунд) print("\n4️⃣ ТЕСТ LONG POLLING (будет ждать 30 секунд)...") print(" ⏰ Отправьте команду /test боту в Telegram прямо СЕЙЧАС!") print(" Ожидание...") url = f"https://api.telegram.org/bot{TOKEN}/getUpdates?timeout=30&offset=-1" try: async with session.get(url, timeout=35) as resp: data = await resp.json() if data.get('result'): print(f" ✅✅✅ ПОЛУЧЕНО СООБЩЕНИЕ! ✅✅✅") for update in data['result']: msg = update.get('message', {}) text = msg.get('text', 'нет текста') print(f" 📨 Текст: {text}") return True else: print(" ❌ Нет сообщений за 30 секунд") return False except asyncio.TimeoutError: print(" ❌ ТАЙМАУТ! Long polling не работает через этот прокси") return False except Exception as e: print(f" ❌ Ошибка: {e}") return False async def test_different_methods(): """Тест разных методов подключения""" print("\n" + "=" * 60) print("🔧 ТЕСТ РАЗНЫХ МЕТОДОВ ПОДКЛЮЧЕНИЯ") print("=" * 60) match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL) if not match: return username = match.group(1) password = match.group(2) host = match.group(3) port = int(match.group(4)) methods = [ ("SOCKS5 с авторизацией", f"socks5://{username}:{password}@{host}:{port}"), ("SOCKS5 без авторизации", f"socks5://{host}:{port}"), ("SOCKS5h с авторизацией", f"socks5h://{username}:{password}@{host}:{port}"), ] for name, proxy_url in methods: print(f"\n📡 Тестируем: {name}") try: connector = ProxyConnector.from_url(proxy_url) async with aiohttp.ClientSession(connector=connector) as session: url = f"https://api.telegram.org/bot{TOKEN}/getMe" async with session.get(url, timeout=10) as resp: if resp.status == 200: data = await resp.json() if data.get('ok'): print(f" ✅ РАБОТАЕТ! Бот: @{data['result']['username']}") # Проверяем long polling print(f" 🔄 Проверяем long polling...") get_url = f"https://api.telegram.org/bot{TOKEN}/getUpdates?timeout=5" async with session.get(get_url, timeout=8) as resp2: print(f" ✅ Long polling тоже работает") return True else: print(f" ❌ Ошибка: статус {resp.status}") except Exception as e: print(f" ❌ Ошибка: {str(e)[:50]}") return False async def main(): print("\n" + "=" * 60) print("🐛 ДИАГНОСТИКА ПРОБЛЕМЫ С БОТОМ") print("=" * 60) # Тест разных методов method_works = await test_different_methods() # Тест получения обновлений updates_work = await check_updates() print("\n" + "=" * 60) print("📊 РЕЗУЛЬТАТЫ ДИАГНОСТИКИ") print("=" * 60) if not updates_work: print("\n❌ ПРОБЛЕМА: Long polling НЕ РАБОТАЕТ через этот прокси!") print("\n🔍 Это означает, что:") print(" - Бот может отправлять сообщения (исходящие запросы работают)") print(" - Но НЕ МОЖЕТ получать команды (входящие запросы не работают)") print("\n💡 РЕШЕНИЯ:") print(" 1. Использовать Webhook вместо Polling (нужен HTTPS сервер)") print(" 2. Найти другой прокси, который поддерживает длительные соединения") print(" 3. Использовать VPN вместо прокси") print(" 4. Настроить свой собственный прокси (3proxy, Squid)") print("\n📌 Быстрое решение для теста:") print(" Временно отключите прокси и запустите бота без него") print(" (если в вашем регионе Telegram не заблокирован)") elif method_works: print("\n✅ Найден рабочий метод подключения!") print(" Используйте соответствующий PROXY_URL в .env") print("\n" + "=" * 60) if __name__ == "__main__": asyncio.run(main())