HELPER BACKUP РЕЗЕРВНЫЙ КОНТУР FULL ZIP / GUILD EXPORT / OWNER DM / AUTO MODE
Модуль резервного копирования — это закрытая owner-система HELPER. Он создаёт архивы data / banners / backgrounds, делает безопасные SQLite-снимки, умеет выгружать данные конкретного сервера, отправляет zip владельцам в ЛС и сохраняет техническую meta-информацию.
Что делает Backup Core
Backup Core закрывает технический риск: перед деплоем или крупными изменениями owner может сохранить рабочее состояние HELPER. Архив строится синхронным builder-слоем, а Discord cog отвечает за owner-проверку, lock, отправку и статус.
Собирает архив
В полный backup входят папки data, banners и backgrounds.
Фильтрует мусор
.env, логи, кэш, zip, lock и sidecar SQLite файлы исключаются.
Шлёт owner
Если размер проходит лимит, zip отправляется владельцам в Discord ЛС.
Пишет meta
Последний статус, размер, область и путь сохраняются в backup_meta.json.
Как это выглядит картинками
Ниже — визуальные mockup-блоки: owner-команда, процесс сборки, Discord DM, zip-архив, guild export и панель статуса.
один процесс
data/banners
snapshot
manifest
owner
helper_backup_manual_YYYY-MM-DD.zip ├─ BACKUP_MANIFEST.json ├─ data/ │ ├─ module_states.json │ ├─ licenses.db │ └─ *.db snapshot ├─ banners/ ├─ backgrounds/ └─ BACKUP_WARNINGS.json
helper_backup_guild_123456789.zip ├─ BACKUP_MANIFEST.json └─ guild_123456789/ ├─ json/ │ └─ settings.json ├─ sqlite_exports/ │ └─ applications.json └─ BACKUP_WARNINGS.json
Команды owner
Все команды закрыты owner-проверкой. Если пользователь не владелец, бот отвечает ephemeral-сообщением об отказе.
/backup_nowСоздаёт полный архив всей системы и отправляет zip в ЛС владельцам.
/backup_now guild_id:123456789012345678Создаёт архив только с данными конкретного сервера.
/backup_statusПоказывает auto-mode, лимит размера, локальные архивы, owner IDs и последний backup.
/backup_listПоказывает последние локальные zip-файлы, их размер и время создания.
/backup_cleanupЗапускает ручную очистку старых локальных архивов по TTL и keep-last правилам.
1 запуск / 60 секундЗащищает owner-команду от случайного спама архивами.
Полный backup.zip
Полный архив сохраняет рабочий слой HELPER. Он нужен перед обновлением проекта, переносом, массовой правкой данных или восстановлением после ошибки.
data/настройки модулей, JSON, SQLite базы, meta-файлы.banners/изображения и визуальные материалы панелей.backgrounds/фоны и графика, используемые сайтом или ботом.BACKUP_MANIFEST.jsonдата, причина, область, root, cleanup и заметка об исключениях.Почему так лучше
Живую SQLite-базу нельзя просто копировать как обычный файл во время работы. Snapshot снижает риск битого архива.
Бэкап конкретного сервера
Guild export используется, когда нужен не весь HELPER, а только данные одного Discord-сервера. Это удобно для диагностики, переноса клиента или ручного восстановления части настроек.
ищет guild_id как ключ
ищет поле guild_id
фильтрует элементы
пишет json
если пропуски
table scanбот получает список таблиц, кроме системных sqlite_*.guild_id/server_idэкспортируются только таблицы с одной из этих колонок.JSON rowsстроки сохраняются как массив объектов, а не как готовая DB.Как можно показать на сайте
Даже если backup управляется через Discord, в Wiki полезно показать owner-панель как визуальный ориентир: статус, последние архивы, env-настройки и ошибки.
BACKUP_AUTO_ENABLEDпереключатель авто-бэкапа.BACKUP_INTERVAL_HOURSинтервал в часах.BACKUP_MAX_MBлимит отправки в Discord.BACKUP_KEEP_LOCAL_FILESоставлять успешные zip на диске.новые выше
последние N
72 часа
старые zip
сколько удалено
Discord сценарии
Автоматический режим
Auto backup выключен по умолчанию. Его нужно явно включить через .env, чтобы владелец сам контролировал нагрузку и размер архивов.
OWNER_IDS=123456789012345678
BACKUP_AUTO_ENABLED=true
BACKUP_INTERVAL_HOURS=24
BACKUP_MAX_MB=25
BACKUP_KEEP_LOCAL_FILES=false
BACKUP_LOCAL_TTL_HOURS=72
BACKUP_KEEP_LAST_LOCAL=3bot готов
прошёл интервал
auto backup
статус
1 час loop
Что сохраняется и что нет
Сохраняется
data, banners, backgrounds, JSON, основные SQLite базы и manifest.
Особый режим
SQLite копируется через backup API, а guild SQLite экспортируется строками в JSON.
Исключается
.env, логи, кэш, zip, tmp, lock, virtualenv и SQLite WAL/SHM sidecar.
Почему .env не попадает в backup.zip
.env содержит токены, ключи и приватные настройки. Бэкап должен защищать данные, а не превращаться в архив секретов.
SQLite и JSON lock
Это защищает архив от битой копии живой базы.
JSON meta и настройки читаются и записываются через lock и временный файл.
Как объяснять восстановление
Backup Core делает архив. Восстановление — ручная owner-операция: нужно остановить бота, сохранить текущее состояние, распаковать только нужные файлы и затем запустить проверку.
остановить бота
сохранить текущее
нужные файлы
права и пути
запустить бота
Не заменяй живую SQLite базу при работающем боте
Сначала останови процесс. Иначе можно получить конфликт, lock или повреждение текущей базы.
Ошибки и решения
Команда пишет “доступна только владельцу”
Проверьте OWNER_IDS. Если список пустой, бот пробует fallback через владельца Discord-приложения.
Архив создан, но не пришёл в ЛС
ЛС owner могут быть закрыты. В этом случае файл остаётся на сервере, а бот показывает локальный путь.
Файл слишком большой
Увеличьте BACKUP_MAX_MB, сделайте guild-бэкап или заберите zip напрямую с сервера.
Авто-бэкап не запускается
Проверьте BACKUP_AUTO_ENABLED=true, перезапуск бота и минимальный gap после последнего backup.
В guild-архиве нет части данных
SQLite-таблицы без guild_id или server_id не экспортируются как server-specific данные.
Локальные zip не удаляются
Cleanup сохраняет несколько новых архивов через BACKUP_KEEP_LAST_LOCAL и не трогает файлы моложе TTL.