Files
9may/debug_bot.py
T
2026-05-03 23:33:47 +03:00

175 lines
7.7 KiB
Python

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())