# Session Status Bot Бот на `aiogram 3` для управления статусами персонажей через кнопки и автоматического обновления одного сообщения в канале. ## Что умеет - показывает пользователю только его кнопку, если он привязан по `operator_user_id` или `operator_user_ids` - позволяет админам видеть все кнопки - после выбора персонажа предлагает статус: `open`, `backstage`, `delay`, `rest` - после выбора статуса все основные действия доступны кнопками: шаблон, без фразы, своя фраза, назад - обновляет заданное сообщение в канале через `edit_message_text` - рендерит пост как HTML с кликабельными ссылками - хранит текущее состояние в `data/state.json` ## Настройка 1. Установите зависимости: ```powershell uv sync ``` 2. Заполните `.env` по примеру из `[.env.example](/c:/Users/admin/Desktop/pidoras/.env.example)`. Обязательные переменные: - `BOT_TOKEN` — токен бота - `CHANNEL_ID` — ID канала, где лежит обновляемое сообщение - `CHANNEL_MESSAGE_ID` — ID сообщения в канале - `ADMIN_IDS` — список Telegram user id через запятую 3. Отредактируйте `[config/actors.json](/c:/Users/admin/Desktop/pidoras/config/actors.json)`. Для каждого участника задаются: - `key` — внутренний ключ - `button_text` — текст на кнопке - `display_name` — имя в посте - `link` — ссылка на бота - `operator_user_id` или `operator_user_ids` — Telegram user id человека, который может менять этот статус - `phrases` — шаблонные фразы под каждый статус ## Запуск ```powershell uv run python main.py ``` ## Команды - `/start` или `/panel` — открыть панель - `/help` — показать справку - `/refresh` — принудительно перерисовать сообщение канала - `/cancel` — сбросить текущий ввод и вернуться к панели ## Как это работает 1. Пользователь пишет `/start`. 2. Бот показывает доступные кнопки персонажей. 3. После выбора персонажа бот показывает кнопки статусов. 4. После выбора статуса бот показывает кнопки вариантов фразы. 5. Если выбрать `Своя фраза`, бот ждет одно текстовое сообщение. 6. После выбора бот редактирует сообщение в канале. ## Проверка Тест рендера: ```powershell uv run --with pytest python -m pytest ```