bot: точка входа, конфиг, главное меню, FSM-хранилище, healthcheck #4

Closed
opened 2026-10-12 19:32:27 +03:00 by Eleboba · 0 comments
Owner

Описание

Каркас интерфейса по SPEC §4.0 (M-1…M-4) и ARCHITECTURE §2.1: long polling (ADR-002), меню разделов, FSM, переживающий рестарт.

Желаемый результат

  • python -m app запускает бота; главное меню (reply-клавиатура): 📝 Коммит · 🩺 Статус · 📜 Логи · 🚨 Алерты (+ 👥 Участники для админа); разделы пока заглушки.
  • Инлайн-навигация редактирует сообщение раздела; «⬅️ Назад», «✖️ Отмена», /menu из любого состояния.
  • FSM-хранилище в Postgres (fsm_state).
  • Конфиг pydantic-settings по классу на подсистему; healthcheck контейнера.

Подзадачи

  • app/config.py
  • app/main.py — сборка Bot/Dispatcher, роутеры, graceful shutdown
  • app/bot/menu.py — клавиатуры, CallbackData с короткими id
  • app/bot/fsm_storage.py — BaseStorage поверх БД → перенесено в #5 (нужна БД)
  • Тексты — config/texts.yaml
  • Healthcheck: heartbeat-файл + HEALTHCHECK
  • Тесты: конфиг, меню, хранилище FSM

Анализ

Затрагиваемые файлы

Файл Что меняется
app/main.py новый
app/config.py новый
app/bot/menu.py новый
app/bot/fsm_storage.py новый
config/texts.yaml новый

Ограничения и риски

callback_data ≤ 64 байт. Токен бота не логировать. Один экземпляр polling на токен.

Как проверить

make up; меню видно, кнопки разделов открывают заглушки, «Назад»//menu работают; рестарт контейнера посреди сценария — состояние сохранилось.


Лог выполнения

2026-10-13

  • Задача переписана под SPEC v2 (QR-доступ, меню из 4 разделов, командная модель — ADR-011…013).

2026-10-13

  • app/config.py (pydantic-settings по подсистемам, ADMIN_IDS через запятую), config/texts.yaml + app/texts.py (валидация при старте), app/bot/menu.py, app/bot/routers/common.py (/start, /menu, /help, разделы-заглушки, «Назад»/«Отмена» редактируют сообщение на месте), app/health.py + HEALTHCHECK, JSON-логи.
  • Доступ уже сейчас: AccessMiddleware (outer, сообщения и кнопки) пускает только ADMIN_IDS; посторонним — одна фраза в сутки, устаревшие кнопки молча гасятся. В #25 предикат заменится на участников из БД.
  • Изменение разбивки: FSM-хранилище в Postgres перенесено в #5 — таблицы появляются там, а #5 зависит от #4. Сейчас фабрика make_storage() отдаёт MemoryStorage.
  • Каталог конфигов — настройка CONFIG_DIR (по умолчанию config от рабочего каталога): пакет в Docker ставится в site-packages, путь «рядом с кодом» не работает.
  • Тесты: фейковая сессия aiogram, апдейты через настоящий Dispatcher — 20 тестов, покрытие 89 %.
  • Образ: с фиктивным токеном конфиг и тексты грузятся, JSON-логи, Unauthorized → аккуратная остановка; python -m app.health → 1 без heartbeat, 0 со свежим.
  • Не проверено вживую: нет TELEGRAM_BOT_TOKEN — проверю меню в Telegram, как только токен появится в .env.
## Описание Каркас интерфейса по [SPEC](https://gitea.24studbank.ru/HSE/tgit/src/branch/dev/docs/SPEC.md) §4.0 (M-1…M-4) и [ARCHITECTURE](https://gitea.24studbank.ru/HSE/tgit/src/branch/dev/docs/ARCHITECTURE.md) §2.1: long polling (ADR-002), меню разделов, FSM, переживающий рестарт. ## Желаемый результат - `python -m app` запускает бота; главное меню (reply-клавиатура): 📝 Коммит · 🩺 Статус · 📜 Логи · 🚨 Алерты (+ 👥 Участники для админа); разделы пока заглушки. - Инлайн-навигация редактирует сообщение раздела; «⬅️ Назад», «✖️ Отмена», `/menu` из любого состояния. - FSM-хранилище в Postgres (`fsm_state`). - Конфиг `pydantic-settings` по классу на подсистему; healthcheck контейнера. ## Подзадачи - [x] `app/config.py` - [x] `app/main.py` — сборка Bot/Dispatcher, роутеры, graceful shutdown - [x] `app/bot/menu.py` — клавиатуры, `CallbackData` с короткими id - [ ] ~~`app/bot/fsm_storage.py` — `BaseStorage` поверх БД~~ → перенесено в #5 (нужна БД) - [x] Тексты — `config/texts.yaml` - [x] Healthcheck: heartbeat-файл + `HEALTHCHECK` - [x] Тесты: конфиг, меню, хранилище FSM ## Анализ ### Затрагиваемые файлы | Файл | Что меняется | |------|--------------| | `app/main.py` | новый | | `app/config.py` | новый | | `app/bot/menu.py` | новый | | `app/bot/fsm_storage.py` | новый | | `config/texts.yaml` | новый | ### Ограничения и риски callback_data ≤ 64 байт. Токен бота не логировать. Один экземпляр polling на токен. ## Как проверить `make up`; меню видно, кнопки разделов открывают заглушки, «Назад»/`/menu` работают; рестарт контейнера посреди сценария — состояние сохранилось. --- ## Лог выполнения ### 2026-10-13 - Задача переписана под SPEC v2 (QR-доступ, меню из 4 разделов, командная модель — ADR-011…013). ### 2026-10-13 - `app/config.py` (pydantic-settings по подсистемам, `ADMIN_IDS` через запятую), `config/texts.yaml` + `app/texts.py` (валидация при старте), `app/bot/menu.py`, `app/bot/routers/common.py` (`/start`, `/menu`, `/help`, разделы-заглушки, «Назад»/«Отмена» редактируют сообщение на месте), `app/health.py` + `HEALTHCHECK`, JSON-логи. - **Доступ уже сейчас:** `AccessMiddleware` (outer, сообщения и кнопки) пускает только `ADMIN_IDS`; посторонним — одна фраза в сутки, устаревшие кнопки молча гасятся. В #25 предикат заменится на участников из БД. - **Изменение разбивки:** FSM-хранилище в Postgres перенесено в #5 — таблицы появляются там, а #5 зависит от #4. Сейчас фабрика `make_storage()` отдаёт `MemoryStorage`. - Каталог конфигов — настройка `CONFIG_DIR` (по умолчанию `config` от рабочего каталога): пакет в Docker ставится в site-packages, путь «рядом с кодом» не работает. - Тесты: фейковая сессия aiogram, апдейты через настоящий `Dispatcher` — 20 тестов, покрытие 89 %. - Образ: с фиктивным токеном конфиг и тексты грузятся, JSON-логи, `Unauthorized` → аккуратная остановка; `python -m app.health` → 1 без heartbeat, 0 со свежим. - **Не проверено вживую:** нет `TELEGRAM_BOT_TOKEN` — проверю меню в Telegram, как только токен появится в `.env`.
Eleboba added this to the M1 · MVP: загрузка → коммит → CI milestone 2026-10-12 19:32:27 +03:00
Eleboba added the botfeaturesize/1 labels 2026-10-12 19:32:27 +03:00
Eleboba self-assigned this 2026-10-12 19:32:27 +03:00
Eleboba added a new dependency 2026-10-12 19:37:16 +03:00
Eleboba added a new dependency 2026-10-12 19:39:51 +03:00
Eleboba changed title from bot: точка входа, конфиг, /start и /help, healthcheck to bot: точка входа, конфиг, главное меню, FSM-хранилище, healthcheck 2026-10-13 22:52:19 +03:00
Sign in to join this conversation.