60 lines
3.6 KiB
Markdown
60 lines
3.6 KiB
Markdown
# Последовательности сообщений
|
||
|
||
Реализовано в 0.5.0. Позволяет собирать приветствие (и любые другие наборы) из
|
||
нескольких сообщений по порядку, с картинками и кнопками.
|
||
|
||
## Модель
|
||
|
||
- `bot.message_sequences` — `key`, `title`, `description`, `updated_at/by`.
|
||
- `bot.message_sequence_items` — сообщения: `sequence_key`, `position`, `text`,
|
||
`enabled`, `image_name` (файл в общем volume `media/`).
|
||
- `bot.message_sequence_buttons` — кнопки конкретного сообщения: `item_id`,
|
||
`position`, `text`, `url`. Кнопок может быть несколько, каждая на своей строке.
|
||
- `bot.message_sequence_history` — JSON-снимок последовательности при каждом изменении.
|
||
|
||
Картинки не лежат в Postgres: они в Docker-volume `media`, который монтируется в
|
||
`/app/media` и боту, и админке. При старте админка копирует туда встроенное
|
||
`images/welcome_image.jpg`, если файла ещё нет.
|
||
|
||
## Отправка ботом
|
||
|
||
`bot/services/sequences.py` читает включённые сообщения по `position` и отправляет:
|
||
|
||
- с картинкой → `send_photo` (текст подписью, если ≤ 1024 символов; иначе фото без
|
||
подписи и отдельное сообщение);
|
||
- без картинки → `send_message`;
|
||
- кнопки — `InlineKeyboardMarkup`, по одной в ряд.
|
||
|
||
Для `welcome` при отсутствии/пустоте последовательности остаётся фолбэк на старые
|
||
шаблоны `welcome.text*` из кода.
|
||
|
||
## Админка
|
||
|
||
`/sequences` — список и создание; `/sequences/{key}` — редактор:
|
||
|
||
- параметры последовательности;
|
||
- сообщения по порядку: текст, картинка (загрузка/удаление), вкл/выкл, кнопки,
|
||
перемещение вверх/вниз, удаление;
|
||
- предпросмотр и история изменений.
|
||
|
||
Текст редактируется в textarea с тулбаром: жирный `<b>`, курсив `<i>`,
|
||
подчёркивание `<u>`, зачёркивание `<s>`, код `<code>`, блок `<pre>`,
|
||
цитата `<blockquote>`, спойлер `<tg-spoiler>`, ссылка `<a href>`. Есть счётчик
|
||
символов (1024 для подписи к фото, 4096 для обычного сообщения) и предпросмотр
|
||
через тот же `render()`, что использует бот.
|
||
|
||
Картинки отдаются по `/sequences/media/{filename}` (только после входа).
|
||
|
||
## Миграции
|
||
|
||
- `V20__message_sequences.sql` — таблицы и история.
|
||
- `V21__seed_welcome_sequence.sql` — перенос текущего приветствия в `welcome`
|
||
(подпись к фото + остальной текст с кнопкой «Канал») и удаление старых
|
||
шаблонов `welcome.text*` из `message_templates`.
|
||
|
||
## Проверки
|
||
|
||
`tests/test_admin_sequences.py` — список, редактор, создание, параметры, добавление,
|
||
сохранение текста/кнопок, лимиты, загрузка картинки, порядок и удаление;
|
||
`tests/test_welcome_split.py` — фолбэк приветствия.
|