76 lines
2.8 KiB
TypeScript
76 lines
2.8 KiB
TypeScript
import { OneBotAction } from '@/napcat-onebot/action/OneBotAction';
|
|
import { ActionName } from '@/napcat-onebot/action/router';
|
|
import { unlink, readdir } from 'fs/promises';
|
|
import path, { join } from 'path';
|
|
import { Type } from '@sinclair/typebox';
|
|
|
|
export class CleanCache extends OneBotAction<void, void> {
|
|
override actionName = ActionName.CleanCache;
|
|
override payloadSchema = Type.Object({});
|
|
override returnSchema = Type.Null();
|
|
override actionSummary = '清理缓存';
|
|
override actionDescription = '清理缓存';
|
|
override actionTags = ['系统接口'];
|
|
override payloadExample = {};
|
|
override returnExample = null;
|
|
|
|
async _handle () {
|
|
try {
|
|
// 获取临时文件夹路径
|
|
const tempPath = this.core.NapCatTempPath;
|
|
|
|
// 读取文件夹中的所有文件
|
|
const files = await readdir(tempPath);
|
|
|
|
// 删除每个文件
|
|
const deletePromises = files.map(async (file) => {
|
|
const filePath = join(tempPath, file);
|
|
try {
|
|
await unlink(filePath);
|
|
this.core.context.logger.log(`已删除文件: ${filePath}`);
|
|
} catch (err: unknown) {
|
|
this.core.context.logger.log(`删除文件 ${filePath} 失败: ${(err as Error).message}`);
|
|
}
|
|
});
|
|
|
|
// 等待所有删除操作完成
|
|
await Promise.all(deletePromises);
|
|
const basic_path = path.join(this.core.dataPath, this.core.selfInfo.uin || '10001', 'nt_qq', 'nt_data');
|
|
|
|
// 需要清理的目录列表
|
|
const dirsToClean = ['Pic', 'Ptt', 'Video', 'File', 'log'];
|
|
|
|
// 清理每个指定目录
|
|
for (const dir of dirsToClean) {
|
|
const dirPath = path.join(basic_path, dir);
|
|
try {
|
|
// 检查目录是否存在
|
|
const files = await readdir(dirPath).catch(() => null);
|
|
if (files) {
|
|
// 删除目录下的所有文件
|
|
const dirDeletePromises = files.map(async (file) => {
|
|
const filePath = path.join(dirPath, file);
|
|
try {
|
|
await unlink(filePath);
|
|
this.core.context.logger.log(`已删除文件: ${filePath}`);
|
|
} catch (err: unknown) {
|
|
this.core.context.logger.log(`删除文件 ${filePath} 失败: ${(err as Error).message}`);
|
|
}
|
|
});
|
|
|
|
await Promise.all(dirDeletePromises);
|
|
this.core.context.logger.log(`目录清理完成: ${dirPath}`);
|
|
}
|
|
} catch (err: unknown) {
|
|
this.core.context.logger.log(`清理目录 ${dirPath} 失败: ${(err as Error).message}`);
|
|
}
|
|
}
|
|
|
|
this.core.context.logger.log(`临时文件夹清理完成: ${tempPath}`);
|
|
} catch (err: unknown) {
|
|
this.core.context.logger.log(`清理缓存失败: ${(err as Error).message}`);
|
|
throw err;
|
|
}
|
|
}
|
|
}
|