fix
This commit is contained in:
+175
@@ -0,0 +1,175 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user