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 +28 -0
- package/lib/index.d.ts +1 -0
- package/lib/media-helper.d.ts +1 -0
- package/package.json +1 -1
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
package/lib/media-helper.d.ts
CHANGED
|
@@ -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>;
|