github BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot v2.5.8

latest releases: v3.20.1, v3.20.0, v3.19.0...
3 months ago

🚀 Release v2.5.8: Система промогрупп, отображение скидок и улучшения стабильности

GitHub release
Status

👥 Участники разработки

  • @reshifter1 — Система промогрупп, UI/UX улучшения, исправление багов, переработка тестов
  • @Gy9vin — Оптимизация синхронизации Remnawave, массовые рассылки, производительность БД

✨ Основные изменения

🎨 Новая система промогрупп (@reshifter1)

Приоритеты и множественные промогруппы

  • ✅ Введена система приоритетов для промогрупп
  • ✅ Пользователь может быть участником нескольких промогрупп одновременно
  • ✅ Активной считается только промогруппа с наивысшим приоритетом
  • ✅ Автоматическое разрешение конфликтов при пересечении групп

Промокоды с промогруппами

  • 🎟️ Возможность привязать промокод к промогруппе
  • 🎟️ Автоматическое добавление пользователя в группу при активации
  • 🎟️ Гибкая настройка условий применения скидок

Трекинг и аналитика

  • 📊 Персональные ссылки для каждого пользователя с промогруппой
  • 📊 Отслеживание "сливов" промокодов через индивидуальные ссылки
  • 📊 Расширенная информация о пользователях во всех разделах админки

💰 Улучшенное отображение скидок (@reshifter1)

Красивые кнопки со скидками

  • 🎨 Визуальное отображение скидок прямо на кнопках выбора тарифов
  • 🎨 Зачёркнутая старая цена и яркая финальная цена
  • 🎨 Процент скидки в понятном формате
  • 🎨 Корректная обработка нулевых цен

🐛 Исправленные баги (@reshifter1)

Критические исправления

  • Исчезновение триалки при пополнении — пробная подписка корректно сохраняется после пополнения баланса
  • "Пользователь не найден" при изменении промогруппы — исправлена логика поиска и обновления
  • Некорректное отображение трафика — "Трафик: 0 ГБ" → "Трафик: Безлимит" в тестовых подписках

Улучшения стабильности

  • Корректное отображение цен в различных сценариях
  • Улучшенная валидация HTML-разметки в приветственном тексте
  • Безопасная обработка edge-cases при работе с балансом

🧪 Тестирование (@reshifter1)

Масштабная переработка тестов

  • ♻️ Исправлены все падающие тесты
  • ➕ Добавлены новые тесты для системы промогрупп
  • ➕ Покрытие тестами логики приоритетов
  • ➕ Тесты для промокодов с промогруппами
  • ➕ Валидация корректности отображения скидок

Статус: ✅ Все тесты проходят успешно


⚡ Оптимизации производительности (@Gy9vin)

Синхронизация с Remnawave

  • 🚀 Пакетная обработка: create_user_no_commit и create_subscription_no_commit
  • 🚀 Bulk-загрузка пользователей и подписок одним запросом (selectinload)
  • 🚀 Batch commits (размер пакета: 50) вместо транзакции на каждую операцию
  • 🚀 Детализированный парсер описания пользователей панели
  • 🚀 Система отката изменений UUID при конфликтах

Массовые рассылки

  • ⚙️ Семафоры для контроля параллелизма (20-30 одновременных операций)
  • ⚙️ Пакетная отправка сообщений (batch_size = 100)
  • ⚙️ Изоляция транзакций БД для каждой отправки
  • ⚙️ Корректная обработка ошибок Telegram (bot blocked, chat not found)
  • ⚙️ Задержки между пакетами для снижения нагрузки на API

Работа с базой данных

  • 📦 Предзагрузка связанных сущностей (promo_group, subscription, referrer)
  • 📦 Устранение N+1 запросов
  • 📦 Оптимизация запросов в сервисах рассылок и опросов
  • 📦 Улучшенное управление пулом соединений

🔧 Технические улучшения

API и схемы (@Gy9vin)

  • 📡 Полный набор схем для управления серверами через Web API
  • 📡 Новые маршруты для CRUD-операций с серверами
  • 📡 Расширенная документация API

Безопасность и валидация

  • 🔒 Валидация HTML-тегов в приветственном тексте
  • 🔒 Проверка парности тегов и безопасных схем URL (http(s)://, tg://)
  • 🔒 Защита от некорректной разметки с подробными сообщениями об ошибках

Логирование

  • 📝 Снижение уровня "шумных" логов (aiohttp, aiogram, uvicorn)
  • 📝 Детализированное логирование изменений UUID и подписок
  • 📝 Информативные сообщения о конфликтах и ошибках

Примеры логов:

⚠️  Конфликт UUID: "♻️ Обнаружен конфликт UUID <uuid> между пользователями..."
ℹ️  Обновление:   "🔁 Обновлен Remnawave UUID пользователя <id>: <old> → <new>"
✅  Успех:        "🔄 Обновлены поля [...] для пользователя <id>"
❌  Ошибка:       "❌ Ошибка коммита после обработки N пользователей"

📊 Влияние на производительность

Улучшения

  • ⬇️ -60-70% SQL-запросов при синхронизации
  • ⬇️ -40-50% времени массовых рассылок
  • ⬇️ Снижение нагрузки на БД за счёт пакетных операций
  • ⬆️ Повышение стабильности при высокой нагрузке

Требования к ресурсам

  • Рекомендуется увеличить размер пула подключений к БД
  • При большом количестве пользователей может потребоваться больше RAM

📋 Миграция и развертывание

⚠️ Перед обновлением

  1. Создайте резервную копию базы данных (обязательно!)
  2. Убедитесь, что в модели PromoGroup есть поле priority
  3. Проверьте наличие связи many-to-many между User и PromoGroup

🚀 Обновление до v2.5.8

# 1. Переключитесь в директорию проекта
cd /path/to/remnawave-bedolaga-telegram-bot

# 2. Получите последние изменения
git pull origin main

# 3. Перезапустите контейнеры
make reload

Альтернативный способ (с логами):

# Если нужно видеть логи в реальном времени
make reload-follow

Что происходит при make reload:

  • 🛑 Остановка и удаление текущих контейнеров (docker compose down)
  • 🚀 Пересборка и запуск контейнеров в фоновом режиме (docker compose up -d --build)

📝 После обновления

  1. Проверьте работу системы промогрупп в тестовом окружении
  2. Протестируйте создание промокодов с промогруппами
  3. Убедитесь в корректности отображения скидок
  4. Проверьте массовые рассылки с небольшой группой пользователей
  5. Установите приоритеты для существующих промогрупп

⚙️ Рекомендации по настройке

Приоритеты промогрупп:

  • Группа с меньшим числом = выше приоритет
  • Рекомендуемая схема:
    • VIP = 1 (наивысший приоритет)
    • Premium = 2
    • Standard = 3
    • По умолчанию = 10

Мониторинг и производительность:

  • Мониторьте логи на предмет конфликтов UUID
  • При распределённой системе избегайте параллельных sync-jobs
  • Деплойте в окно с минимальной активностью
  • При высокой нагрузке рассмотрите увеличение пула подключений к БД в настройках вашего проекта

🔍 Проверка логов после обновления

# Просмотр логов всех контейнеров
docker compose logs -f

# Просмотр логов только бота
docker compose logs -f bot

# Последние 100 строк логов
docker compose logs --tail=100

🧪 Тестирование перед продакшеном

Обязательные проверки

Функциональность

  • Создание и применение промокодов с промогруппами
  • Корректность работы приоритетов при множественных группах
  • Отображение скидок на кнопках в различных сценариях
  • Сохранение триалки при пополнении баланса
  • Изменение промогруппы пользователя через админку

Производительность

  • Массовые рассылки (broadcast, опросы, промо-предложения)
  • Синхронизация с панелью Remnawave (created, updated, deleted)
  • Работа простой покупки подписки при наличии активной
  • Обнаружение и разрешение конфликтов UUID

Нагрузочное тестирование

  • Массовые рассылки на 1000+ пользователей
  • Синхронизация большого количества пользователей из панели
  • Одновременная работа нескольких админов
  • Симуляция ошибок БД ("too many clients")

Запуск тестов:

make test

🔄 Обратная совместимость

✅ Сохранена полностью

  • Существующие промогруппы продолжат работать
  • Старые промокоды остаются функциональными
  • API endpoints не изменились (только добавлены новые)
  • Все данные пользователей сохраняются

⚠️ Требуют внимания

  • Пользователи с несколькими промогруппами — применится группа с наивысшим приоритетом
  • Необходимо установить приоритеты для существующих промогрупп (по умолчанию: 0)
  • Рекомендуется пересмотреть логику применения скидок

📝 Известные ограничения

  • Изменения карты UUID работают только в рамках процесса (при краше требуется перезапуск)
  • Массовые операции требуют мониторинга пула соединений БД
  • При одновременном выполнении sync-jobs из разных инстансов возможны конфликты

🎯 Следующие шаги

  1. ⚙️ Настроить приоритеты для всех промогрупп
  2. 🎟️ Создать промокоды для тестирования новой функциональности
  3. 📊 Провести A/B тестирование нового отображения скидок
  4. 📈 Собрать аналитику по использованию персональных ссылок
  5. 🔍 Оптимизировать запросы на основе логов производительности

📚 Доступные команды Makefile

make help           # Показать список всех команд
make up             # Поднять контейнеры (detached)
make up-follow      # Поднять контейнеры с логами
make down           # Остановить и удалить контейнеры
make reload         # Перезапустить контейнеры (detached)
make reload-follow  # Перезапустить контейнеры с логами
make test           # Запустить тесты

📚 Подробная документация изменений

Детальный список изменений по файлам

Промогруппы и промокоды

  • app/models/promo_group.py — добавлено поле priority
  • app/models/user.py — связь many-to-many с промогруппами
  • app/handlers/admin/promo_groups.py — управление приоритетами
  • app/handlers/admin/promo_codes.py — привязка к промогруппам
  • app/utils/promo_helpers.py — логика выбора активной группы

Отображение цен

  • app/utils/price_display.py — функции format_price_button, format_price_text
  • app/handlers/subscription/pricing.py — улучшенная детализация
  • app/handlers/balance/main.py — расчёт стоимости продления

Синхронизация Remnawave

  • app/services/remnawave_service.py — полная переработка sync логики
  • app/database/crud/user.pycreate_user_no_commit
  • app/database/crud/subscription.pycreate_subscription_no_commit

Массовые рассылки

  • app/services/broadcast_service.py — семафоры и пакетная обработка
  • app/handlers/admin/messages.py — оптимизация confirm_broadcast
  • app/handlers/admin/promo_offers.py — изоляция транзакций
  • app/services/poll_service.py — предотвращение гонок БД

API и схемы

  • app/webapi/schemas/servers.py — новые схемы для серверов
  • app/webapi/routes/servers.py — CRUD-маршруты
  • app/webapi/app.py — регистрация роутера

Тесты

  • tests/ — переработаны все тестовые модули
  • Добавлены тесты для промогрупп, приоритетов, промокодов
  • Исправлены падающие тесты синхронизации и рассылок

💬 Обратная связь и поддержка

При обнаружении проблем:

  1. 📝 Создайте [issue](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues/new) с подробным описанием
  2. 📋 Приложите логи (особенно при ошибках синхронизации)
  3. 🔖 Укажите версию, с которой обновлялись
  4. 🖼️ По возможности приложите скриншоты

Полезные ссылки:


🔙 Откат (Rollback)

В случае критических проблем:

# 1. Откатиться на предыдущую версию
git checkout v2.5.7

# 2. Перезапустить контейнеры
make reload

# 3. Восстановить БД из бэкапа (если необходимо)
# Инструкции зависят от вашей СУБД

📊 Статистика релиза

  • Файлов изменено: 65+
  • Добавлено строк: ~5,500
  • Удалено строк: ~1,200
  • Новых функций: 20+
  • Исправленных багов: 8+
  • Новых тестов: 25+

Версия: 2.5.8
Дата релиза: 6 ноября 2025
Тип обновления: Minor (рекомендуется для всех)
Статус: ✅ Stable


Сделано с ❤️ командой Remnawave Bedolaga для сообщества

⭐ Star us on GitHub

Don't miss a new remnawave-bedolaga-telegram-bot release

NewReleases is sending notifications on new releases.