koishi-plugin-echo-cave 1.14.2 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -37,6 +37,7 @@ var require_zh_CN = __commonJS({
37
37
  adminMessageProtection: "\u5F00\u542F\u7BA1\u7406\u5458\u6D88\u606F\u4FDD\u62A4\uFF0C\u5F00\u542F\u540E\u7BA1\u7406\u5458\u53D1\u5E03\u7684\u6D88\u606F\u53EA\u80FD\u7531\u7BA1\u7406\u5458\u5220\u9664",
38
38
  allowContributorDelete: "\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
39
39
  allowSenderDelete: "\u5141\u8BB8\u539F\u59CB\u53D1\u9001\u8005\u5220\u9664\u88AB\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
40
+ deleteMediaWhenDeletingMsg: "\u5220\u9664\u56DE\u58F0\u6D1E\u6D88\u606F\u65F6\u662F\u5426\u540C\u65F6\u5220\u9664\u5173\u8054\u7684\u5A92\u4F53\u6587\u4EF6",
40
41
  enableSizeLimit: "\u662F\u5426\u542F\u7528\u5A92\u4F53\u6587\u4EF6\u5927\u5C0F\u9650\u5236",
41
42
  maxImageSize: "\u6700\u5927\u56FE\u7247\u5927\u5C0F (MB)",
42
43
  maxVideoSize: "\u6700\u5927\u89C6\u9891\u5927\u5C0F (MB)",
@@ -325,6 +326,29 @@ async function checkAndCleanMediaFiles(ctx, cfg, type) {
325
326
  ctx.logger.error(`Failed to check and clean ${type} files: ${err}`);
326
327
  }
327
328
  }
329
+ async function deleteMediaFilesFromMessage(ctx, content) {
330
+ try {
331
+ const elements = JSON.parse(content);
332
+ const mediaElements = Array.isArray(elements) ? elements : [elements];
333
+ for (const element of mediaElements) {
334
+ if (element.type === "image" || element.type === "video" || element.type === "file" || element.type === "record") {
335
+ const fileUri = element.data?.file;
336
+ if (fileUri && fileUri.startsWith("file:///")) {
337
+ const filePath = decodeURIComponent(fileUri.replace("file:///", ""));
338
+ try {
339
+ await import_node_fs.promises.access(filePath);
340
+ await import_node_fs.promises.unlink(filePath);
341
+ ctx.logger.info(`Deleted media file: ${filePath}`);
342
+ } catch (err) {
343
+ ctx.logger.warn(`Failed to delete media file: ${filePath}, error: ${err}`);
344
+ }
345
+ }
346
+ }
347
+ }
348
+ } catch (err) {
349
+ ctx.logger.error(`Failed to parse message content when deleting media: ${err}`);
350
+ }
351
+ }
328
352
 
329
353
  // src/onebot-helper.ts
330
354
  async function getUserName(ctx, session, userId) {
@@ -464,6 +488,7 @@ var Config = import_koishi.Schema.object({
464
488
  adminMessageProtection: import_koishi.Schema.boolean().default(false),
465
489
  allowContributorDelete: import_koishi.Schema.boolean().default(true),
466
490
  allowSenderDelete: import_koishi.Schema.boolean().default(true),
491
+ deleteMediaWhenDeletingMsg: import_koishi.Schema.boolean().default(true),
467
492
  enableSizeLimit: import_koishi.Schema.boolean().default(false),
468
493
  maxImageSize: import_koishi.Schema.number().default(2048),
469
494
  maxVideoSize: import_koishi.Schema.number().default(512),
@@ -601,6 +626,9 @@ async function deleteCave(ctx, session, cfg, id) {
601
626
  return session.text(".permissionDenied");
602
627
  }
603
628
  }
629
+ if (cfg.deleteMediaWhenDeletingMsg) {
630
+ await deleteMediaFilesFromMessage(ctx, caveMsg.content);
631
+ }
604
632
  await ctx.database.remove("echo_cave", id);
605
633
  return session.text(".msgDeleted", [id]);
606
634
  }
package/lib/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export interface Config {
6
6
  adminMessageProtection?: boolean;
7
7
  allowContributorDelete?: boolean;
8
8
  allowSenderDelete?: boolean;
9
+ deleteMediaWhenDeletingMsg?: boolean;
9
10
  enableSizeLimit?: boolean;
10
11
  maxImageSize?: number;
11
12
  maxVideoSize?: number;
@@ -4,3 +4,4 @@ export declare function saveMedia(ctx: Context, mediaElement: Record<string, any
4
4
  export declare function processMediaElement(ctx: Context, element: any, cfg: Config): Promise<any>;
5
5
  export declare function convertFileUriToBase64(ctx: Context, element: any): Promise<any>;
6
6
  export declare function checkAndCleanMediaFiles(ctx: Context, cfg: Config, type: 'image' | 'video' | 'file' | 'record'): Promise<void>;
7
+ export declare function deleteMediaFilesFromMessage(ctx: Context, content: string): Promise<void>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-echo-cave",
3
3
  "description": "Group echo cave",
4
- "version": "1.14.2",
4
+ "version": "1.15.0",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",