What's Changed
- Dev by @Fr1ngg in #31
- Dev by @Fr1ngg in #32
- Переключение типа подписки by @Fr1ngg in #33
- Исправление начисления партнерки за первый платеж реферала by @yazhog in #34
- Проверка подписи API ключем для Tribute by @yazhog in #35
- Фикс присылания рефкода сообщением by @yazhog in #36
- Dev by @Fr1ngg in #37
- Сообщения в меню by @Fr1ngg in #38
- Антихлебная валидация HTML разметки при создании сообщения в меню by @Fr1ngg in #39
Full Changelog: v2.2.2...v2.2.3
👀 Управляемые сообщения в главном меню
🎯 Основные изменения
✨ Новые возможности
- Система управляемых сообщений в главном меню: Администраторы теперь могут добавлять пользовательские сообщения, которые отображаются в главном меню между информацией о подписке и кнопками действий
- Случайный показ сообщений: При наличии нескольких активных сообщений система выбирает случайное для показа пользователю
- Поддержка HTML разметки: Сообщения поддерживают HTML теги для красивого оформления текста
- Валидация HTML: Встроенная проверка корректности HTML тегов с подробными сообщениями об ошибках
🔧 Административные инструменты
- Панель управления сообщениями: Новый раздел в админке "📢 Сообщения меню"
- Создание и редактирование: Возможность добавлять, редактировать и удалять сообщения
- Управление статусом: Быстрое включение/отключение сообщений
- Статистика: Подсчет общего количества и активных сообщений
- Предварительный просмотр: Показ сообщений с корректной HTML разметкой
🛡️ Безопасность и валидация
- Проверка HTML тегов: Система блокирует использование неподдерживаемых тегов (br, div, span и др.)
- Проверка парности тегов: Валидация корректной вложенности и закрытия HTML тегов
- Справка по тегам: Встроенная документация по поддерживаемым HTML тегам
- Ограничение длины: Максимальная длина сообщения 4000 символов
🗂️ Технические изменения
База данных
- Новая таблица
user_messagesдля хранения пользовательских сообщений - Поля: текст сообщения, статус активности, порядок сортировки, автор
- Автоматические индексы для оптимизации запросов
Архитектура
- Новый модуль
app/handlers/admin/user_messages.pyс полным набором CRUD операций - Расширенный функционал в
app/utils/validators.pyдля проверки HTML - Обновленная логика формирования главного меню с интеграцией случайных сообщений
- Новые CRUD операции в
app/database/crud/user_message.py
Интеграция
- Централизованная функция
get_main_menu_text()для формирования текста меню - Поддержка HTML разметки во всех сообщениях главного меню
📋 Поддерживаемые HTML теги
<b>,<strong>- жирный текст<i>,<em>- курсив<u>- подчеркнутый<s>,<strike>,<del>- зачеркнутый<code>- моноширинный<pre>- блок кода<a href="url">- ссылки<blockquote>- цитаты
🚀 Как использовать
- Войдите в админ-панель
- Выберите "📢 Сообщения меню"
- Нажмите "📝 Добавить сообщение"
- Введите текст с HTML разметкой
- Сообщение автоматически появится в главном меню пользователей
Сообщения отображаются случайным образом, что позволяет показывать пользователям различную информацию: акции, новости, советы по использованию сервиса.
Совместимость: Обновление полностью обратно совместимо с существующими данными
🔧 Новые возможности система уведомлений о технических работах
Новые возможности
📢 Уведомления в чат/топик
- Автоматические уведомления при включении/выключении технических работ
- Мониторинг API Remnawave с уведомлениями о статусе (восстановление/падение)
- Отслеживание панели Remnawave и автоматические сообщения при изменении статуса
- Ручная отправка уведомлений администраторами о статусе системы
🛠️ Расширенная админ-панель
- Новые кнопки управления: проверка статуса панели Remnawave, отправка ручных уведомлений
- Индикаторы проблем с визуальными предупреждениями при сбоях
- Детальная информация о состоянии системы в реальном времени
🔍 Улучшенный мониторинг
- Комплексная проверка здоровья панели RemnaWave
- Автоматическое включение техработ при критических сбоях API
- Уведомления о восстановлении с детальной статистикой
Типы уведомлений
-
Технические работы
- Включение/выключение с указанием причины и длительности
- Автоматическое/ручное включение с соответствующими метками
-
Статус API Remnawave
- Уведомления о недоступности с деталями ошибок
- Сообщения о восстановлении с временем отклика
-
Мониторинг системы
- Запуск/остановка системы мониторинга
- Статистика проверок и настройки
-
Панель Remnawave
- Изменения статуса (онлайн/офлайн/проблемы/обслуживание)
- Ручные уведомления от администраторов
Настройка
Для работы уведомлений добавьте в .env:
ADMIN_NOTIFICATIONS_ENABLED=true
ADMIN_NOTIFICATIONS_CHAT_ID=-100123456789
ADMIN_NOTIFICATIONS_TOPIC_ID=123Технические улучшения
- Интеграция с AdminNotificationService для централизованной отправки уведомлений
- Кэширование статуса для оптимизации производительности
- Новые методы в RemnaWaveService для мониторинга здоровья панели
- Обновленные клавиатуры с поддержкой новых функций
- Улучшенная обработка ошибок и логирование событий
Все уведомления отправляются с красивым форматированием, эмодзи и временными метками для лучшей читаемости и отслеживания событий.
🔧 Улучшение системы уведомлений
📋 Краткое описание
Исправлена система административных уведомлений с улучшенным отображением информации о рефералах во всех типах уведомлений.
🚀 Основные изменения
✨ Улучшения уведомлений
- Улучшено отображение информации о рефералах: Вместо простого "ID 1" теперь показывается:
@username (ID: 1)- если у реферера есть usernameID 987654321- если username отсутствует (показывается Telegram ID)Нет- если реферер отсутствуетID 1 (не найден)- если реферер не найден в базе данных
🔨 Технические исправления
- Добавлен параметр
db: AsyncSessionво все методыAdminNotificationService - Реализован метод
_get_referrer_info()для получения корректной информации о рефералах - Исправлены вызовы уведомлений в следующих модулях:
subscription.py- 4 исправленияpayment_service.py- 2 исправления для Stars и YooKassa платежейtribute_service.py- 1 исправление
📱 Затронутые типы уведомлений
- Активация триального периода
- Покупка и продление подписок
- Конверсия из триала в платную подписку
- Пополнение баланса (Stars, YooKassa, Tribute)
🛠️ Файлы изменений
app/services/admin_notification_service.py # Основные улучшения
app/handlers/subscription.py # Исправления вызовов
app/services/payment_service.py # Исправления для платежей
app/services/tribute_service.py # Исправления Tribute
📊 Пример улучшения
До:
🔗 Реферер: ID 1
После:
🔗 Реферер: @johndoe (ID: 1)
или
🔗 Реферер: ID 987654321
🐛 Исправленные проблемы
- Исправлена ошибка с отсутствующим параметром
dbв уведомлениях - Устранена проблема с некорректным отображением информации о рефералах
- Исправлены ошибки в уведомлениях о платежах через Stars
🔐 Важное исправление безопасности: Защита вебхуков Tribute by @yazhog in
🚨 Важное обновление безопасности
Исправлена уязвимость
- Проблема: Отсутствовала проверка подписи HMAC-SHA256 для вебхуков Tribute
- Риск: Злоумышленники могли отправлять поддельные запросы для пополнения баланса
- Статус: ❌ Критическая уязвимость → ✅ Исправлена
🛡️ Что добавлено
- Валидация заголовка
trbt-signatureс HMAC-SHA256 - Проверка подлинности всех входящих вебхуков от Tribute
- Защита от replay-атак
- Логирование подозрительных запросов
🔧 Технические изменения
- Обновлен обработчик вебхуков Tribute
- Добавлена криптографическая проверка подписи
- Улучшена обработка ошибок безопасности
Фиксы реф программы by @yazhog in
- При первоначальном заходе в боте юзерам предлагается ввести реферальный код, в случае если они без ссылки зашли в бота. Код там принимался только через /start, но наш новоиспеченный боец все поправил за что ему ♥️
- Исправление начисления партнерки за первый платеж реферала