DispelEvilBot/docs/message-sequences.md

60 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Последовательности сообщений
Реализовано в 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` — фолбэк приветствия.