Merge pull request #4 from MiX1024/master

自动清理垃圾
This commit is contained in:
Zhiyu 2024-05-14 12:41:31 +08:00 committed by GitHub
commit d300635a72
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 60 additions and 33 deletions

View File

@ -1,13 +1,18 @@
import config from "../model/index.js"; import config from "../model/index.js";
import schedule from 'node-schedule';
import { REDIS_YUNZAI_ISOVERSEA, REDIS_YUNZAI_LAGRANGE } from "../constants/constant.js"; import { REDIS_YUNZAI_ISOVERSEA, REDIS_YUNZAI_LAGRANGE } from "../constants/constant.js";
import { deleteFolderRecursive, readCurrentDir } from "../utils/file.js"; import { deleteFolderRecursive, readCurrentDir } from "../utils/file.js";
//自动清理定时
const autotime = config.getConfig("tools").autoclearTrashtime
// 视频保存路径
const defaultPath = config.getConfig("tools").defaultPath
export class switchers extends plugin { export class switchers extends plugin {
constructor() { constructor() {
super({ super({
name: "R插件开关类", name: "R插件开关类",
dsc: "内含一些和Redis相关的开关类", dsc: "内含一些和Redis相关的开关类",
event: "message.group",
priority: 300, priority: 300,
rule: [ rule: [
{ {
@ -21,16 +26,12 @@ export class switchers extends plugin {
permission: "master", permission: "master",
}, },
{ {
reg: "^清理data垃圾$", reg: "^清理垃圾$",
fnc: "clearTrash", fnc: "clearTrash",
permission: "master", permission: "master",
}, },
] ]
}); });
// 配置文件
this.toolsConfig = config.getConfig("tools");
// 视频保存路径
this.defaultPath = this.toolsConfig.defaultPath;
} }
/** /**
@ -74,35 +75,59 @@ export class switchers extends plugin {
return true; return true;
} }
/** //手动清理垃圾
async clearTrash(e) {
try {
const { dataClearFileLen, rTempFileLen } = await autoclearTrash();
e.reply(`手动清理垃圾完成:\n` +
`- 清理了${dataClearFileLen}个垃圾文件\n` +
`- 清理了${rTempFileLen}个群临时文件`);
} catch (err) {
e.reply(`手动清理垃圾时发生错误: ${err.message}`);
}
}
}
/**
* 清理垃圾文件 * 清理垃圾文件
* @param e * @param e
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
async clearTrash(e) { async function autoclearTrash(e) {
const dataDirectory = "./data/"; const dataDirectory = "./data/";
try {
// 删除Yunzai遗留问题的合成视频垃圾文件 const files = await readCurrentDir(dataDirectory);
try { let dataClearFileLen = 0;
const files = await readCurrentDir(dataDirectory); for (const file of files) {
let dataClearFileLen = 0; if (/^[0-9a-f]{32}$/.test(file)) {
for (const file of files) { await fs.promises.unlink(dataDirectory + file);
// 如果文件名符合规则,执行删除操作 dataClearFileLen++;
if (/^[0-9a-f]{32}$/.test(file)) {
await fs.promises.unlink(dataDirectory + file);
dataClearFileLen++;
}
} }
// 删除R插件临时文件
const rTempFileLen = await deleteFolderRecursive(this.defaultPath)
e.reply(
`数据统计:\n` +
`- 当前清理了${ dataDirectory }下总计:${ dataClearFileLen } 个垃圾文件\n` +
`- 当前清理了${ this.toolsConfig.defaultPath }下文件夹:${ rTempFileLen } 个群的所有临时文件`
);
} catch (err) {
logger.error(err);
await e.reply("清理失败,重试或者手动清理即可");
} }
const rTempFileLen = await deleteFolderRecursive(defaultPath);
return {
dataClearFileLen,
rTempFileLen
};
} catch (err) {
logger.error(err);
throw err;
} }
} }
function autoclear(time) {
schedule.scheduleJob(time, async function() {
try {
const { dataClearFileLen, rTempFileLen } = await autoclearTrash();
console.log(`自动清理垃圾完成:\n` +
`- 清理了${dataClearFileLen}个垃圾文件\n` +
`- 清理了${rTempFileLen}个群临时文件`);
} catch (err) {
console.error(`自动清理垃圾时发生错误: ${err.message}`);
}
})
}
//自动清理垃圾
autoclear(autotime)

View File

@ -16,3 +16,5 @@ queueConcurrency: 1 # 【目前只涉及哔哩哔哩的下载】根据服务器
videoDownloadConcurrency: 1 # 下载视频是否使用多线程如果不使用默认是1如果使用根据服务器进行选择如果不确定是否可以用4即可高性能服务器随意4~12都可以看CPU的实力 videoDownloadConcurrency: 1 # 下载视频是否使用多线程如果不使用默认是1如果使用根据服务器进行选择如果不确定是否可以用4即可高性能服务器随意4~12都可以看CPU的实力
lagrangeForwardWebSocket: 'ws://127.0.0.1:9091/' # 格式ws://地址:端口/,拉格朗日正向连接地址,用于适配拉格朗日上传群文件,解决部分用户无法查看视频问题 lagrangeForwardWebSocket: 'ws://127.0.0.1:9091/' # 格式ws://地址:端口/,拉格朗日正向连接地址,用于适配拉格朗日上传群文件,解决部分用户无法查看视频问题
autoclearTrashtime: '0 0 8 * * ?' #每天早上8点自动清理视频缓存cron可自定义时间