rc-plugin/apps/switchers.js
MiX1024 a0f8b0b911
Update switchers.js
添加自动清理垃圾
2024-05-14 12:12:24 +08:00

134 lines
3.8 KiB
JavaScript

import config from "../model/index.js";
import schedule from 'node-schedule';
import { REDIS_YUNZAI_ISOVERSEA, REDIS_YUNZAI_LAGRANGE } from "../constants/constant.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 {
constructor() {
super({
name: "R插件开关类",
dsc: "内含一些和Redis相关的开关类",
priority: 300,
rule: [
{
reg: "^#设置海外解析$",
fnc: "setOversea",
permission: "master",
},
{
reg: "^#设置拉格朗日$",
fnc: "setLagrange",
permission: "master",
},
{
reg: "^清理垃圾$",
fnc: "clearTrash",
permission: "master",
},
]
});
}
/**
* 设置海外模式
* @param e
* @returns {Promise<boolean>}
*/
async setOversea(e) {
// 查看当前设置
let os;
if ((await redis.exists(REDIS_YUNZAI_ISOVERSEA))) {
os = JSON.parse(await redis.get(REDIS_YUNZAI_ISOVERSEA)).os;
}
// 设置
os = ~os
await redis.set(
REDIS_YUNZAI_ISOVERSEA,
JSON.stringify({
os: os,
}),
);
e.reply(`当前服务器:${ os ? '海外服务器' : '国内服务器' }`)
return true;
}
async setLagrange(e) {
// 查看当前设置
let driver;
if ((await redis.exists(REDIS_YUNZAI_LAGRANGE))) {
driver = JSON.parse(await redis.get(REDIS_YUNZAI_LAGRANGE)).driver;
}
// 设置
driver = ~driver
await redis.set(
REDIS_YUNZAI_LAGRANGE,
JSON.stringify({
driver: driver,
}),
);
e.reply(`当前驱动:${ driver ? '拉格朗日' : '其他驱动' }`)
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
* @returns {Promise<void>}
*/
async function autoclearTrash(e) {
const dataDirectory = "./data/";
try {
const files = await readCurrentDir(dataDirectory);
let dataClearFileLen = 0;
for (const file of files) {
if (/^[0-9a-f]{32}$/.test(file)) {
await fs.promises.unlink(dataDirectory + file);
dataClearFileLen++;
}
}
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)