Userbot работает от имени вашего аккаунта Telegram (не Bot API). На Bothost нет интерактивного терминала для ввода кода подтверждения — используйте String Session.
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 telethon
Скрипт gen_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())
Для Pyrogram используйте Session / export_session_string() по документации библиотеки — принцип тот же: сессия в env, без input() в контейнере.
Ошибка: EOF when reading a line
Причина: код запрашивает телефон или код через input() — в контейнере Bothost интерактивного ввода нет.
Решение: перейдите на String Session и переменные TELEGRAM_API_ID, TELEGRAM_API_HASH, SESSION_STRING.