diff --git a/apps/tools.js b/apps/tools.js index 2b756b1..f01c66a 100644 --- a/apps/tools.js +++ b/apps/tools.js @@ -6,7 +6,7 @@ import axios from "axios"; import _ from "lodash"; import tunnel from "tunnel"; import HttpProxyAgent from "https-proxy-agent"; -import { mkdirIfNotExists, checkAndRemoveFile } from "../utils/file.js"; +import { mkdirIfNotExists, checkAndRemoveFile, deleteFolderRecursive } from "../utils/file.js"; import { downloadBFile, getDownloadUrl, mergeFileToMp4 } from "../utils/bilibili.js"; import { parseUrl, parseM3u8, downloadM3u8Videos, mergeAcFileToMp4 } from "../utils/acfun.js"; import { transMap, douyinTypeMap, XHS_CK, TEN_THOUSAND, PROMPT_MAP } from "../utils/constant.js"; @@ -889,23 +889,22 @@ export class tools extends plugin { // 清理垃圾文件 async clearTrash(e) { const dataDirectory = "./data/"; - const tempDirectory = this.toolsConfig.defaultPath; + try { const files = await fs.promises.readdir(dataDirectory); + let dataClearFileLen = 0; for (const file of files) { // 如果文件名符合规则,执行删除操作 if (/^[0-9a-f]{32}$/.test(file)) { await fs.promises.unlink(dataDirectory + file); + dataClearFileLen++; } } - const tempFiles = await fs.promises.readdir(tempDirectory); - for (let file of tempDirectory) { - dataDirectory - } + const rTempFileLen = await deleteFolderRecursive(this.toolsConfig.defaultPath) e.reply( `数据统计:\n`+ - `当前清理了data下垃圾文件总计:${files.length}\n`+ - `` + `- 当前清理了${dataDirectory}下垃总计:${dataClearFileLen} 个垃圾文件\n`+ + `- 当前清理了${ this.toolsConfig.defaultPath}下文件夹:${rTempFileLen} 个群的所有临时文件` ); } catch (err) { logger.error(err); diff --git a/utils/file.js b/utils/file.js index 3816dda..9381f80 100644 --- a/utils/file.js +++ b/utils/file.js @@ -1,4 +1,5 @@ import fs from "node:fs"; +import path from "path"; /** * 检查文件是否存在并且删除 @@ -34,4 +35,34 @@ async function mkdirIfNotExists(dir) { } } -export { checkAndRemoveFile, mkdirIfNotExists } \ No newline at end of file +/** + * 删除文件夹下所有文件 + * @returns {Promise} + * @param folderPath + */ +async function deleteFolderRecursive(folderPath) { + try { + const files = await fs.promises.readdir(folderPath); + const filePromises = files.map(async (file) => { + const curPath = path.join(folderPath, file); + const stat = await fs.promises.lstat(curPath); + + if (stat.isDirectory()) { + // recurse + await deleteFolderRecursive(curPath); + } else { + // delete file + await fs.promises.unlink(curPath); + } + }); + + await Promise.all(filePromises); + await fs.promises.rmdir(folderPath); + return files.length; + } catch (error) { + logger.error(error); + return 0; + } +} + +export { checkAndRemoveFile, mkdirIfNotExists, deleteFolderRecursive } \ No newline at end of file