zhenxun_bot/zhenxun/builtin_plugins/scheduler/auto_backup.py
2024-02-25 03:18:34 +08:00

63 lines
1.8 KiB
Python

import shutil
from pathlib import Path
from nonebot_plugin_apscheduler import scheduler
from zhenxun.configs.config import Config
from zhenxun.services.log import logger
Config.add_plugin_config(
"_backup",
"BACKUP_FLAG",
True,
help="是否开启文件备份",
default_value=True,
type=bool,
)
Config.add_plugin_config(
"_backup",
"BACKUP_DIR_OR_FILE",
[
"data/black_word",
"data/configs",
"data/statistics",
"data/word_bank",
"data/manager",
"configs",
],
help="备份的文件夹或文件",
default_value=[],
type=list[str],
)
# 自动备份
@scheduler.scheduled_job(
"cron",
hour=3,
minute=25,
)
async def _():
if Config.get_config("_backup", "BACKUP_FLAG"):
_backup_path = Path() / "backup"
_backup_path.mkdir(exist_ok=True, parents=True)
if backup_dir_or_file := Config.get_config("_backup", "BACKUP_DIR_OR_FILE"):
for path_file in backup_dir_or_file:
try:
path = Path(path_file)
_p = _backup_path / path_file
if path.exists():
if path.is_dir():
if _p.exists():
shutil.rmtree(_p, ignore_errors=True)
shutil.copytree(path_file, _p)
else:
if _p.exists():
_p.unlink()
shutil.copy(path_file, _p)
logger.debug(f"已完成自动备份:{path_file}", "自动备份")
except Exception as e:
logger.error(f"自动备份文件 {path_file} 发生错误", "自动备份", e=e)
logger.info("自动备份成功...", "自动备份")