<!-- Bothost docs | HTML: https://bothost.ru/docs/telegram-userbot-setup | Markdown: https://bothost.ru/docs/telegram-userbot-setup.md | Index: https://bothost.ru/llms.txt -->

# Настройка Telegram Userbot

Userbot работает от имени **вашего аккаунта** Telegram (не Bot API). На Bothost нет интерактивного терминала для ввода кода подтверждения — используйте **String Session**.

---

## Что понадобится

1. **API ID** и **API Hash** — создайте приложение на [my.telegram.org/apps](https://my.telegram.org/apps).
2. **String Session** — одна строка, которая заменяет файл `.session` (получается локально на своём ПК).
3. Главный файл бота в репозитории (например `userbot.py`).

## Переменные окружения на Bothost

В настройках бота добавьте:

| Переменная | Описание |
|------------|----------|
| `TELEGRAM_API_ID` | Числовой API ID |
| `TELEGRAM_API_HASH` | API Hash |
| `SESSION_STRING` | Строка сессии (см. ниже) |

Подробнее о переменных: [Переменные окружения](environment-variables).

При создании бота укажите **главный файл** (например `userbot.py`), если он не `main.py` / `bot.py`.

---

## Получение String Session (Telethon)

Локально на компьютере (один раз):

```bash
pip install telethon
```

Скрипт `gen_session.py`:

```python
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)

```python
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`.

---

## См. также

- [Переменные окружения](environment-variables)
- [FAQ](faq)
- [Быстрый старт](getting-started)
