# Widget Telega/MAX — сборщик канала (MVP)

Забирает посты Telegram-канала и отдаёт их встраиваемому виджету-галерее.
Работает в двух режимах одновременно:

- **Backfill** — при старте подтягивает последние посты из публичной ленты `t.me/s/<канал>` (Bot API историю не отдаёт, поэтому первичное наполнение берём отсюда).
- **Live** — бот-администратор ловит новые публикации канала в реальном времени.

Под капотом: `app.py` (сборщик + API на aiohttp + SQLite), `widget.js` (встраиваемый виджет в Shadow DOM), `demo.html` (пример сайта).

---

## ⚡ Быстрый локальный старт (реальные фото/видео, без бота)

macOS / Linux — одной командой:

```bash
cd furgonlab-bot
bash run.sh
```

Затем открой **http://localhost:8000/demo.html** — увидишь настоящие фото и видео постов канала (их подтянул backfill из t.me/s). Бот и токен для этого не нужны.

Windows / вручную:

```bash
pip install -r requirements.txt
set CHANNEL=furgonlab          # macOS/Linux: export CHANNEL=furgonlab
python app.py
```

Чтобы включить обновление в реальном времени и приём новых постов — добавь бота (Шаги 1–3 ниже) и переменную `BOT_TOKEN`.

## ☁️ Публичный деплой на Render (для реального сайта)

В папке есть `render.yaml`. Кратко: залей `furgonlab-bot` в репозиторий на GitHub → на **render.com** → *New → Blueprint* → выбери репозиторий → Render сам поднимет сервис по `render.yaml`. Получишь адрес вида `https://furgonlab-widget.onrender.com`. Впиши его в `data-api` виджета на сайте. Для live-режима добавь `BOT_TOKEN` в Environment сервиса.

---

## Шаг 1. Создать бота

1. В Telegram напиши **@BotFather** → `/newbot` → задай имя и username.
2. Скопируй **токен** вида `123456:AA...`.

## Шаг 2. Добавить бота админом канала

Канал **@furgonlab** → *Управление* → *Администраторы* → *Добавить* → выбери своего бота.
Достаточно прав на чтение (постинг не нужен). Без прав администратора бот не увидит новые посты.

> Live-бот получает только посты, опубликованные **после** его добавления. Старые посты берёт backfill из `t.me/s/`.

## Шаг 3. Установить и запустить

```bash
cd furgonlab-bot
python3 -m venv .venv && source .venv/bin/activate      # опционально
pip install -r requirements.txt

export BOT_TOKEN="ВСТАВЬ_ТОКЕН"      # Windows: set BOT_TOKEN=...
export CHANNEL="furgonlab"           # username канала без @
python app.py
```

Увидишь:
```
[backfill] загружено постов: N
[api] http://localhost:8000  (demo.html · /api/posts)
[live] бот запущен, слушаю новые посты канала…
```

## Шаг 4. Проверить

- Открой **http://localhost:8000/demo.html** — виджет с реальными постами канала.
- API отдаёт JSON: **http://localhost:8000/api/posts**
- Опубликуй новый пост в канале — он появится в виджете (обнови страницу).

Без токена (`BOT_TOKEN` пустой) сервис всё равно поднимется: только backfill + API, без live-обновлений — удобно для быстрой проверки.

---

## Реальные фото и видео — что нужно

Ничего сверх запуска `app.py`:

- **Фото и видео уже опубликованных постов** приходят на этапе **backfill** прямо из `t.me/s/<канал>` — это публичные ссылки Telegram CDN, виджет показывает их сразу. Бот для этого даже не обязателен: запусти `python app.py` без `BOT_TOKEN`, открой `demo.html` — увидишь настоящие фото и видео канала.
- **Новые посты в реальном времени** (и их медиа) подхватывает **live-бот** — для этого нужен `BOT_TOKEN` и бот-администратор канала (Шаги 1–2). Фото и видео он скачивает локально в `media/` (Telegram Bot API отдаёт файлы до 20 МБ; более тяжёлые видео показываются постером со ссылкой «Смотреть в Telegram»).
- **На боевом сайте** размести `app.py` на сервере/VPS с публичным адресом и укажи его в `data-api` виджета — тогда виджет на сайте берёт медиа с твоего API.

Каждый пост в API имеет поле `media: [{type:"photo"|"video", url, poster}]` — карточка показывает первое медиа, попап крутит все в слайдере (видео — со встроенным плеером).

## Встраивание на реальный сайт

```html
<div id="tmw"></div>
<script src="https://ВАШ_ДОМЕН/widget.js"
        data-api="https://ВАШ_ДОМЕН"
        data-cols="3" data-accent="#229ED9" data-limit="9"></script>
```

Параметры: `data-cols` — колонки, `data-accent` — акцентный цвет, `data-limit` — число постов.

## Переменные окружения

| Переменная | По умолчанию | Смысл |
|---|---|---|
| `BOT_TOKEN` | — | токен бота от BotFather (для live-режима) |
| `CHANNEL` | `furgonlab` | username канала без `@` |
| `PORT` | `8000` | порт API |
| `MAX_POSTS` | `30` | сколько постов храним и отдаём |

## Что дальше (за рамками MVP)

- Кэш/CDN перед `/api/posts`, вебхук вместо long-polling, докеризация.
- Медиа-галереи (альбомы), видео-превью, порядок медиа внутри поста.
- Мультиканальность и мультиарендность (много виджетов/клиентов), личный кабинет, тарифы.
- Адаптер источника **MAX** по тому же контракту `Post`.
