175 lines
7.7 KiB
Python
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()) |