Skip to main content

Бэкапы

Автоматические бэкапы

Бот автоматически создаёт резервные копии базы данных по расписанию.
При запуске бот рассчитывает следующее время бэкапа от BACKUP_TIME, далее повторяет каждые BACKUP_INTERVAL_HOURS.

Содержимое бэкапа

Формат: .tar.gz (или .tar без сжатия). Архив содержит: Покрывает 70+ таблиц в порядке зависимостей foreign key.

Ручные бэкапы

Из админ-панели: “Бэкап-панель”“Создать бэкап”.

Отправка в Telegram

Если указан BACKUP_ARCHIVE_PASSWORD, бэкап оборачивается в AES-шифрованный ZIP.

Восстановление

Два режима:
  • Восстановление (merge) — данные добавляются/обновляются (upsert по PK)
  • Полная замена — существующие данные удаляются, затем импорт
Поддерживается загрузка файла бэкапа (.json, .json.gz, .tar.gz) через Telegram (до 50 МБ). После восстановления PostgreSQL последовательности автоматически синхронизируются (sync_postgres_sequences()).

Настройки бэкапов

Режим техработ

Принцип работы

Глобальный MaintenanceMiddleware перехватывает все запросы:
  • Если техработы активны — пользователь видит сообщение, запрос блокируется
  • Администраторы обходят блокировку

Ручное управление

Из админ-панели: включение с указанием причины (или без — /skip).

Автоматический режим

Мониторинг API RemnaWave с автоматическим включением/выключением:
  1. Фоновая задача проверяет доступность API каждые MAINTENANCE_CHECK_INTERVAL секунд
  2. При каждой проверке пытается подключиться к RemnaWave (до MAINTENANCE_RETRY_ATTEMPTS попыток)
  3. API доступен: сбрасывает счётчик ошибок. Если техработы были автовключены — автоотключает
  4. API недоступен: увеличивает счётчик. После 3 последовательных сбоев — автовключает техработы

Панель администратора

Настройка

Система бан-интеграции (BedolagaBan)

Интеграция с внешней системой мониторинга BedolagaBan для контроля злоупотреблений.

Типы уведомлений

Уведомления приходят через FastAPI endpoint POST /ban-notifications/send и пересылаются пользователю.

Шаблоны сообщений

Все шаблоны настраиваются через переменные окружения с плейсхолдерами:

Настройка

Чёрный список

Глобальный чёрный список Telegram ID, загружаемый из GitHub.

Как работает

  1. BlacklistMiddleware проверяет каждый запрос
  2. Если пользователь в списке — показывается “Доступ запрещён” с причиной
  3. Результаты кэшируются в памяти на 5 минут
  4. Список автообновляется с GitHub каждые BLACKLIST_UPDATE_INTERVAL_HOURS

Формат файла

Настройка

Защита имён (Banwords)

DisplayNameRestrictionMiddleware блокирует пользователей с подозрительными именами:

Очистка неактивных пользователей

Бот автоматически удаляет пользователей, которые не проявляли активность дольше INACTIVE_USER_DELETE_MONTHS месяцев. При определении неактивности учитываются два фактора:
  • Дата последней активности — последнее взаимодействие с ботом
  • Дата окончания подписки (end_date) — пользователь с активной или недавно истёкшей подпиской не будет удалён, даже если давно не заходил в бота
Пользователь считается неактивным только если и дата последней активности, и дата окончания подписки старше порога. Это предотвращает удаление пользователей с действующими подписками.

Сканер заблокированных пользователей

Массовая проверка пользователей, заблокировавших бота:
  1. Отправляет тестовый запрос каждому пользователю
  2. Определяет заблокировавших бот
  3. Действия: удалить из БД, из RemnaWave, отметить как заблокированного

Массовый бан

Массовая блокировка по списку Telegram ID:
  • Ввод ID (по одному на строку, через запятую или пробел)
  • Максимум 1000 ID за раз
  • Каждому отправляется уведомление
  • Результаты: заблокировано / ошибки

Ротация логов

Автоматическая ротация

Ежедневно в указанное время:
  1. Сброс всех обработчиков логов
  2. Сбор непустых файлов: info.log, warning.log, error.log, payments.log, bot.log
  3. Создание архива logs_YYYY-MM-DD.tar.gz
  4. Очистка текущих файлов
  5. Удаление старых архивов (> LOG_ROTATION_KEEP_DAYS)
  6. Опционально — отправка в Telegram

Отправка в Telegram

Просмотр логов (админ)

Из админ-панели:
  • Последние 2300 символов лога в раскрывающемся блоке
  • Кнопка обновления
  • Скачивание полного файла как Telegram-документ

Настройки логирования