DispelEvilBot/docs/message-sequences.md

3.6 KiB
Raw Blame History

Последовательности сообщений

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