Настройка 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_HASHAPI 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.

См. также