Настройка Telegram Userbot
Userbot работает от имени вашего аккаунта Telegram (не Bot API). На Bothost нет интерактивного терминала для ввода кода подтверждения — используйте String Session.Что понадобится
- API ID и API Hash — создайте приложение на my.telegram.org/apps.
- String Session — одна строка, которая заменяет файл
.session(получается локально на своём ПК). - Главный файл бота в репозитории (например
userbot.py).
Переменные окружения на Bothost
В настройках бота добавьте:| Переменная | Описание |
|---|---|
TELEGRAM_API_ID | Числовой API ID |
TELEGRAM_API_HASH | API Hash |
SESSION_STRING | Строка сессии (см. ниже) |
userbot.py), если он не main.py / bot.py.
Получение String Session (Telethon)
Локально на компьютере (один раз):pip install telethongen_session.py:
from telethon.sync import TelegramClient
from telethon.sessions import StringSession
api_id = int(input("API ID: "))
api_hash = input("API Hash: ")
with TelegramClient(StringSession(), api_id, api_hash) as client:
print("\nSESSION_STRING (скопируйте в Bothost):\n")
print(client.session.save())python gen_session.py, войдите по номеру телефона и коду из Telegram. Скопируйте выведенную строку в переменную SESSION_STRING на Bothost.
Не коммитьте session string в Git.
Пример кода (Telethon)
import os
from telethon import TelegramClient
from telethon.sessions import StringSession
api_id = int(os.environ["TELEGRAM_API_ID"])
api_hash = os.environ["TELEGRAM_API_HASH"]
session = os.environ["SESSION_STRING"]
client = TelegramClient(StringSession(session), api_id, api_hash)
async def main():
await client.start()
me = await client.get_me()
print(f"Userbot запущен: {me.username or me.id}")
with client:
client.loop.run_until_complete(main())Session / export_session_string() по документации библиотеки — принцип тот же: сессия в env, без input() в контейнере.
Ошибка: EOF when reading a line
Причина: код запрашивает телефон или код через input() — в контейнере Bothost интерактивного ввода нет.
Решение: перейдите на String Session и переменные TELEGRAM_API_ID, TELEGRAM_API_HASH, SESSION_STRING.