Бэкапы
Автоматические бэкапы
Бот автоматически создаёт резервные копии базы данных по расписанию.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 с автоматическим включением/выключением:- Фоновая задача проверяет доступность API каждые
MAINTENANCE_CHECK_INTERVALсекунд - При каждой проверке пытается подключиться к RemnaWave (до
MAINTENANCE_RETRY_ATTEMPTSпопыток) - API доступен: сбрасывает счётчик ошибок. Если техработы были автовключены — автоотключает
- API недоступен: увеличивает счётчик. После 3 последовательных сбоев — автовключает техработы
Панель администратора
Настройка
Система бан-интеграции (BedolagaBan)
Интеграция с внешней системой мониторинга BedolagaBan для контроля злоупотреблений.Типы уведомлений
Уведомления приходят через FastAPI endpoint
POST /ban-notifications/send и пересылаются пользователю.
Шаблоны сообщений
Все шаблоны настраиваются через переменные окружения с плейсхолдерами:Настройка
Чёрный список
Глобальный чёрный список Telegram ID, загружаемый из GitHub.Как работает
BlacklistMiddlewareпроверяет каждый запрос- Если пользователь в списке — показывается “Доступ запрещён” с причиной
- Результаты кэшируются в памяти на 5 минут
- Список автообновляется с GitHub каждые
BLACKLIST_UPDATE_INTERVAL_HOURS
Формат файла
Настройка
Защита имён (Banwords)
DisplayNameRestrictionMiddleware блокирует пользователей с подозрительными именами:
Очистка неактивных пользователей
Бот автоматически удаляет пользователей, которые не проявляли активность дольшеINACTIVE_USER_DELETE_MONTHS месяцев.
При определении неактивности учитываются два фактора:
- Дата последней активности — последнее взаимодействие с ботом
- Дата окончания подписки (
end_date) — пользователь с активной или недавно истёкшей подпиской не будет удалён, даже если давно не заходил в бота
Пользователь считается неактивным только если и дата последней активности, и дата окончания подписки старше порога. Это предотвращает удаление пользователей с действующими подписками.
Сканер заблокированных пользователей
Массовая проверка пользователей, заблокировавших бота:- Отправляет тестовый запрос каждому пользователю
- Определяет заблокировавших бот
- Действия: удалить из БД, из RemnaWave, отметить как заблокированного
Массовый бан
Массовая блокировка по списку Telegram ID:- Ввод ID (по одному на строку, через запятую или пробел)
- Максимум 1000 ID за раз
- Каждому отправляется уведомление
- Результаты: заблокировано / ошибки
Ротация логов
Автоматическая ротация
- Сброс всех обработчиков логов
- Сбор непустых файлов:
info.log,warning.log,error.log,payments.log,bot.log - Создание архива
logs_YYYY-MM-DD.tar.gz - Очистка текущих файлов
- Удаление старых архивов (>
LOG_ROTATION_KEEP_DAYS) - Опционально — отправка в Telegram
Отправка в Telegram
Просмотр логов (админ)
Из админ-панели:- Последние 2300 символов лога в раскрывающемся блоке
- Кнопка обновления
- Скачивание полного файла как Telegram-документ
