Задать вопрос
@Dasoa

Telethon отказывается соединятся с серверами Telegram, как это обойти?

Решил начать делать телеграмм-ботов, мне нужен был бот с использованием Telethon, я создал виртуальное пространство, вставил необходимые данные, но когда потом запускаю сам скрипт, то телетон отказывается подключаться к серверам телеграмма. Сижу я с впном, но всё равно не даёт доступ.

Вот мой код для примера:

import  os, logging
from dotenv import load_dotenv
from telethon import TelegramClient, events

logging.basicConfig(level=logging.INFO)

load_dotenv()

api_id    = int(os.getenv("API_ID"))
api_hash  = os.getenv("API_HASH")
bot_token = os.getenv("BOT_TOKEN")

bot = TelegramClient('soul_bot', api_id, api_hash).start(bot_token=bot_token)

print("Бот запущен!")
  • Вопрос задан
  • 797 просмотров
Подписаться 1 Средний 5 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
opium
@opium
Просто люблю качественно работать
TelegramClient принимает proxy параметром:

import socks
bot = TelegramClient('soul_bot', api_id, api_hash, proxy=(socks.SOCKS5, '127.0.0.1', 1080))


1080 — порт локального SOCKS5 твоего VPN. Нужен pip install PySocks.
Ответ написан
Комментировать
Slotly
@Slotly
Python, Telegram-боты записи, бэкенд для сайтов
Дополню про прокси, потому что на этой строчке многие спотыкаются.

127.0.0.1:1080 сработает только если на этом порту у вас реально
кто-то слушает. Большинство VPN-клиентов (WireGuard, OpenVPN и почти все
десктопные приложения) работают на уровне TUN-интерфейса и заворачивают
весь системный трафик — локальный SOCKS5 они при этом не поднимают.
Скопируете строку как есть и получите ConnectionRefusedError, после чего
будете думать, что дело в Telethon.

Проверить за секунду:

curl --socks5 127.0.0.1:1080 -s -o /dev/null -w "%{http_code}\n" https://api.telegram.org
ss -ltn | grep 1080 # на Linux
netstat -ano | findstr 1080 # на Windows

Пусто — значит SOCKS5 у вас нет. Локальный SOCKS5 дают: ssh -D 1080
на свой сервер, Tor (порт 9050), xray/v2ray, Shadowsocks. Обычный
VPN-клиент — нет.

Теперь главное. Судя по логам, у вас есть bot_token — то есть вы делаете
бота, а не юзербота. Тогда MTProto вам, скорее всего, не нужен вообще.

Telethon ходит по MTProto, и для DPI этот протокол выглядит характерно,
поэтому режется охотнее. Bot API работает по обычному HTTPS на
api.telegram.org. С той же машины, где Telethon даёт TcpFull и таймауты,
Bot API часто отвечает без всяких прокси. Проверяется одной командой:

curl https://api.telegram.org/bot/getMe

Ответил — значит канал живой, и проблема была в протоколе, а не в сети.
Тогда берите aiogram или python-telegram-bot, и вопрос с прокси
закрывается сам.

Telethon оправдан, только если нужны функции обычного аккаунта, которых
в Bot API нет: читать чужие чаты, работать от лица пользователя,
доставать историю. Если этого в задаче нет — переезд решает проблему,
а не обходит её.

Если всё-таки остаётесь на Telethon с прокси, учтите: прокси становится
единственной точкой отказа. Упал — упал бот. Ставьте явные таймауты,
автопереподключение и проверку прокси перед использованием, иначе
клиент будет висеть молча.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы