3.6 KiB
Последовательности сообщений
Реализовано в 0.5.0. Позволяет собирать приветствие (и любые другие наборы) из нескольких сообщений по порядку, с картинками и кнопками.
Модель
bot.message_sequences—key,title,description,updated_at/by.bot.message_sequence_items— сообщения:sequence_key,position,text,enabled,image_name(файл в общем volumemedia/).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 — фолбэк приветствия.