koishi-plugin-echo-cave 1.24.4 → 1.24.6

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.
@@ -1,38 +1,12 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
1
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
2
  var __commonJS = (cb, mod) => function __require() {
8
3
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
4
  };
10
- var __export = (target, all) => {
11
- for (var name2 in all)
12
- __defProp(target, name2, { get: all[name2], enumerable: true });
13
- };
14
- var __copyProps = (to, from, except, desc) => {
15
- if (from && typeof from === "object" || typeof from === "function") {
16
- for (let key of __getOwnPropNames(from))
17
- if (!__hasOwnProp.call(to, key) && key !== except)
18
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
- mod
29
- ));
30
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
5
 
32
6
  // src/config/locales/zh-CN.json
33
7
  var require_zh_CN = __commonJS({
34
- "src/config/locales/zh-CN.json"(exports2, module2) {
35
- module2.exports = {
8
+ "src/config/locales/zh-CN.json"(exports, module) {
9
+ module.exports = {
36
10
  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",
37
11
  allowContributorDelete: "\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
38
12
  allowSenderDelete: "\u5141\u8BB8\u539F\u59CB\u53D1\u9001\u8005\u5220\u9664\u88AB\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
@@ -49,165 +23,8 @@ var require_zh_CN = __commonJS({
49
23
  }
50
24
  });
51
25
 
52
- // src/locales/zh-CN.json
53
- var require_zh_CN2 = __commonJS({
54
- "src/locales/zh-CN.json"(exports2, module2) {
55
- module2.exports = {
56
- _config: {
57
- 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",
58
- allowContributorDelete: "\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
59
- allowSenderDelete: "\u5141\u8BB8\u539F\u59CB\u53D1\u9001\u8005\u5220\u9664\u88AB\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E",
60
- deleteMediaWhenDeletingMsg: "\u5220\u9664\u56DE\u58F0\u6D1E\u6D88\u606F\u65F6\u662F\u5426\u540C\u65F6\u5220\u9664\u5173\u8054\u7684\u5A92\u4F53\u6587\u4EF6",
61
- enableSizeLimit: "\u662F\u5426\u542F\u7528\u5A92\u4F53\u6587\u4EF6\u5927\u5C0F\u9650\u5236",
62
- maxImageSize: "\u6700\u5927\u56FE\u7247\u5927\u5C0F (MB)",
63
- maxVideoSize: "\u6700\u5927\u89C6\u9891\u5927\u5C0F (MB)",
64
- maxFileSize: "\u6700\u5927\u6587\u4EF6\u5927\u5C0F (MB)",
65
- maxRecordSize: "\u6700\u5927\u5F55\u97F3\u5927\u5C0F (MB)",
66
- useBase64ForMedia: "\u662F\u5426\u4F7F\u7528 Base64 \u7F16\u7801\u53D1\u9001\u5A92\u4F53\u6587\u4EF6\uFF0C\u5F00\u542F\u540E\u5C06\u8BFB\u53D6 base64 \u7F16\u7801\u53D1\u9001\u800C\u4E0D\u662F\u4F7F\u7528 file uri"
67
- },
68
- "echo-cave": {
69
- general: {
70
- privateChatReminder: "\u274C \u8BF7\u5728\u7FA4\u804A\u4E2D\u4F7F\u7528\u8BE5\u547D\u4EE4\uFF01",
71
- noMsgWithId: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
72
- noTemplatesConfigured: "\u274C \u672A\u914D\u7F6E\u56DE\u58F0\u6D1E\u6A21\u677F\uFF0C\u8BF7\u5148\u914D\u7F6E\u6A21\u677F\uFF01"
73
- },
74
- user: {
75
- invalidAllMention: "\u274C \u4E0D\u652F\u6301 @\u5168\u4F53\u6210\u5458\uFF0C\u8BF7\u76F4\u63A5\u6307\u5B9A\u5177\u4F53\u7528\u6237\uFF01",
76
- userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01"
77
- },
78
- templates: {
79
- forward: [
80
- "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u4E00\u5219\u56DE\u58F0\u4ECE\u65F6\u5149\u4E2D\u98D8\u6765\u2014\u2014\n\u{1F4C5} {date} \xB7 \u6765\u81EA @{originName} \n\u{1F4EE} \u7531 @{userName} \u6295\u9012",
81
- "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u3010\u8BB0\u5F55\u7F16\u53F7\u3011{id} \n\u3010\u521B\u5EFA\u65F6\u95F4\u3011{date} \n\u3010\u539F\u59CB\u4F5C\u8005\u3011@{originName} \n\u3010\u6295\u9012\u8005\u3011@{userName}",
82
- "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u8FD9\u58F0\u56DE\u54CD\u6700\u521D\u6765\u81EA @{originName}\uFF0C \n\u7531 @{userName} \u5728 {date} \u7559\u4E0B\u3002",
83
- "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u65F6\u95F4\u7684\u56DE\u97F3\u5728\u6B64\u6C47\u805A\u3002 \n\u{1F4C5} {date} \n\u{1F4E4} \u51FA\u5904\uFF1A@{originName} \n\u{1F4EE} \u5C01\u5370\u8005\uFF1A@{userName}",
84
- "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4C5} {date} \n\u{1F464} \u6765\u81EA @{originName} \n\u{1F4EE} \u6295\u9012\u8005 @{userName}"
85
- ],
86
- msg: [
87
- {
88
- prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014\u2014 \u6709\u4EBA\u7559\u4E0B\u4E86\u58F0\u97F3 \u2014\u2014{nl}",
89
- suffix: "\u{1F4C5} {date} \xB7 \u6765\u81EA @{originName}\n\u{1F4EE} \u7531 @{userName} \u6295\u9012"
90
- },
91
- {
92
- prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
93
- suffix: "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u{1F4C5} {date}\n\u{1F464} {originName} \xB7 \u7531 @{userName} \u6295\u9012"
94
- },
95
- {
96
- prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4AD}\u300C\u6709\u4EBA\u5728\u6D1E\u58C1\u7559\u4E0B\u5370\u8BB0\u300D{nl}",
97
- suffix: "\u{1F4C5} {date}\n\u{1F4EE} {userName} \u8BB0\u5F55"
98
- },
99
- {
100
- prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014 \u56DE\u58F0\u5F00\u59CB \u2014{nl}",
101
- suffix: "\u2014 \u56DE\u58F0\u7ED3\u675F \u2014\n\u{1F4C5} {date} \xB7 @{originName}\n\u{1F4EE} @{userName}"
102
- },
103
- {
104
- prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}{nl}",
105
- suffix: "\u{1F4C5} {date}\n\u6765\u81EA @{originName}\n\u7531 @{userName} \u6295\u9012"
106
- }
107
- ]
108
- }
109
- },
110
- commands: {
111
- cave: {
112
- description: "\u968F\u673A\u83B7\u53D6 / \u83B7\u53D6\u7279\u5B9A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
113
- messages: {
114
- noMsgInCave: '\u{1F680} \u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u6D88\u606F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01'
115
- }
116
- },
117
- "cave.echo": {
118
- description: "\u5C06\u6D88\u606F\u5B58\u5165\u56DE\u58F0\u6D1E",
119
- messages: {
120
- noMsgQuoted: "\u{1F4A1} \u8BF7\u5F15\u7528\u4E00\u6761\u6D88\u606F\u540E\u518D\u4F7F\u7528\u6B64\u547D\u4EE4\uFF01",
121
- msgSaved: "\u2705 \u56DE\u58F0\u6D1E\u6D88\u606F\u5DF2\u6210\u529F\u5B58\u5165\uFF0C\u6D88\u606F ID\uFF1A{0}",
122
- msgFailedToSave: "\u274C \u56DE\u58F0\u6D1E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF01"
123
- }
124
- },
125
- "cave.drop": {
126
- description: "\u62B9\u53BB\u7279\u5B9A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
127
- messages: {
128
- noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u5220\u9664\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
129
- adminOnly: "\u26D4 \u8BE5\u6D88\u606F\u7531\u7BA1\u7406\u5458\u53D1\u5E03\uFF0C\u5DF2\u5F00\u542F\u7BA1\u7406\u5458\u6D88\u606F\u4FDD\u62A4\uFF0C\u53EA\u6709\u7BA1\u7406\u5458\u53EF\u4EE5\u5220\u9664\u3002",
130
- permissionDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u53EA\u6709\u7BA1\u7406\u5458\u53EF\u4EE5\u5220\u9664\u3002",
131
- contributorDeleteDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u56DE\u58F0\u6D1E\u3002",
132
- senderDeleteDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u539F\u59CB\u53D1\u9001\u8005\u5220\u9664\u56DE\u58F0\u6D1E\u3002",
133
- msgDeleted: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF1A{0}"
134
- }
135
- },
136
- "cave.purge": {
137
- description: "\u62B9\u53BB\u591A\u4E2A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
138
- messages: {
139
- noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u5220\u9664\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
140
- msgDeleted: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF1A{0}",
141
- msgDeletedMultiple: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB {0} \u6761\u56DE\u58F0\u6D1E\u6D88\u606F\uFF01",
142
- msgDeleteFailedAll: "\u274C \u6240\u6709\u6307\u5B9A\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID \u5747\u5220\u9664\u5931\u8D25\uFF1A{0}",
143
- msgDeletePartial: "\u26A0\uFE0F \u90E8\u5206\u56DE\u58F0\u6D1E\u6D88\u606F\u5220\u9664\u5931\u8D25\uFF0C\u5931\u8D25 ID\uFF1A{0}"
144
- }
145
- },
146
- "cave.search": {
147
- description: "\u641C\u7D22\u4E0E\u6307\u5B9A\u7528\u6237\u76F8\u5173\u7684\u56DE\u58F0\u6D1E",
148
- messages: {
149
- noUserIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u641C\u7D22\u7684\u7528\u6237 ID\uFF01",
150
- noValidUserIdProvided: "\u274C \u672A\u63D0\u4F9B\u6709\u6548\u7684\u7528\u6237 ID\uFF01",
151
- noMatchingCaves: "\u{1F50D} \u672A\u627E\u5230\u4E0E\u7528\u6237 {0} \u76F8\u5173\u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
152
- searchResult: "\u{1F50D} \u5171\u627E\u5230 {0} \u6761\u4E0E\u8BE5\u7528\u6237\u76F8\u5173\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\uFF1A\nID \u5217\u8868\uFF1A{1}"
153
- }
154
- },
155
- "cave.listen": {
156
- description: "\u83B7\u5F97\u7531\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
157
- messages: {
158
- noMsgContributed: '\u{1F680} \u60A8\u5728\u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u6295\u7A3F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01',
159
- msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
160
- }
161
- },
162
- "cave.trace": {
163
- description: "\u83B7\u5F97\u81EA\u5DF1\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
164
- messages: {
165
- noMsgTraced: '\u{1F680} \u60A8\u5728\u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u53D1\u8A00\u88AB\u6295\u7A3F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01',
166
- msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
167
- }
168
- },
169
- "cave.bind": {
170
- description: "\u5C06\u7528\u6237\u7ED1\u5B9A\u5230\u7279\u5B9A\u56DE\u58F0\u6D1E",
171
- messages: {
172
- noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u7ED1\u5B9A\u7528\u6237\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
173
- noUserIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u7ED1\u5B9A\u7684\u7528\u6237 ID\uFF01",
174
- msgNotFound: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
175
- userBoundSuccess: "\u2705 \u5DF2\u6210\u529F\u5C06\u7528\u6237\u7ED1\u5B9A\u5230\u56DE\u58F0\u6D1E #{0}\uFF01"
176
- }
177
- },
178
- "cave.rank": {
179
- description: "\u67E5\u770B\u56DE\u58F0\u6D1E\u6392\u884C\u699C",
180
- messages: {
181
- invalidPeriod: "\u65E0\u6548\u7684\u65F6\u95F4\u6BB5\u53C2\u6570\u3002\u652F\u6301\u7684\u65F6\u95F4\u6BB5\uFF1A{0}\uFF0C\u6216\u81EA\u5B9A\u4E49\u65F6\u95F4\u683C\u5F0F(\u5982: 1d, 2d5h, 30m)",
182
- rankingTitle: "\u{1F4CA} \u56DE\u58F0\u6D1E\u6392\u884C\u699C ({0})",
183
- noData: "\u6682\u65E0\u6570\u636E",
184
- rankFormat: "{rankEmoji} {userName}\uFF1A{count} \u4E2A\u56DE\u58F0\u6D1E",
185
- period: {
186
- lday: "\u8FC7\u53BB 24 \u5C0F\u65F6",
187
- lweek: "\u8FC7\u53BB 7 \u5929",
188
- lmonth: "\u8FC7\u53BB 30 \u5929",
189
- day: "\u4ECA\u5929",
190
- week: "\u672C\u5468",
191
- month: "\u672C\u6708",
192
- all: "\u6240\u6709\u65F6\u95F4"
193
- }
194
- }
195
- }
196
- }
197
- };
198
- }
199
- });
200
-
201
26
  // src/index.ts
202
- var index_exports = {};
203
- __export(index_exports, {
204
- Config: () => Config,
205
- apply: () => apply,
206
- inject: () => inject,
207
- name: () => name
208
- });
209
- module.exports = __toCommonJS(index_exports);
210
- var import_koishi_plugin_adapter_onebot2 = require("@pynickle/koishi-plugin-adapter-onebot");
27
+ import "@pynickle/koishi-plugin-adapter-onebot";
211
28
 
212
29
  // src/adapters/onebot/user.ts
213
30
  async function getUserIdFromNickname(session, nickname, userId) {
@@ -239,7 +56,7 @@ async function checkUsersInGroup(ctx, session, userIds) {
239
56
  }
240
57
 
241
58
  // src/utils/msg/element-helper.ts
242
- var import_koishi = require("koishi");
59
+ import { h } from "koishi";
243
60
  function parseUserIds(userIds) {
244
61
  const parsedUserIds = [];
245
62
  for (const userId of typeof userIds === "string" ? [userIds] : userIds) {
@@ -248,7 +65,7 @@ function parseUserIds(userIds) {
248
65
  parsedUserIds.push(userId);
249
66
  continue;
250
67
  }
251
- const element = import_koishi.h.parse(userId);
68
+ const element = h.parse(userId);
252
69
  if (element.length === 1 && element[0].type === "at") {
253
70
  const userId2 = element[0].attrs.id;
254
71
  if (userId2 === "all") {
@@ -266,10 +83,10 @@ function parseUserIds(userIds) {
266
83
  }
267
84
 
268
85
  // src/utils/media/media-helper.ts
269
- var import_axios = __toESM(require("axios"), 1);
270
- var import_node_fs = require("node:fs");
271
- var import_node_path = __toESM(require("node:path"), 1);
272
- var import_uuid = require("uuid");
86
+ import axios from "axios";
87
+ import { promises as fs } from "node:fs";
88
+ import path from "node:path";
89
+ import { v4 as uuidv4 } from "uuid";
273
90
  async function saveMedia(ctx, mediaElement, type, cfg) {
274
91
  const mediaUrl = mediaElement.url;
275
92
  const originalMediaName = mediaElement.file;
@@ -277,13 +94,13 @@ async function saveMedia(ctx, mediaElement, type, cfg) {
277
94
  const i = originalMediaName.lastIndexOf(".");
278
95
  return i === -1 ? type === "image" ? "png" : type === "video" ? "mp4" : type === "record" ? "mp3" : "bin" : originalMediaName.slice(i + 1).toLowerCase();
279
96
  })();
280
- const mediaDir = import_node_path.default.join(ctx.baseDir, "data", "cave", type + "s");
281
- const mediaName = (0, import_uuid.v4)().replace(/-/g, "");
282
- const fullMediaPath = import_node_path.default.join(mediaDir, `${mediaName}.${ext}`);
97
+ const mediaDir = path.join(ctx.baseDir, "data", "cave", type + "s");
98
+ const mediaName = uuidv4().replace(/-/g, "");
99
+ const fullMediaPath = path.join(mediaDir, `${mediaName}.${ext}`);
283
100
  ctx.logger.info(`Saving ${type} from ${mediaUrl} -> ${fullMediaPath}`);
284
101
  try {
285
- await import_node_fs.promises.mkdir(mediaDir, { recursive: true });
286
- const res = await import_axios.default.get(mediaUrl, {
102
+ await fs.mkdir(mediaDir, { recursive: true });
103
+ const res = await axios.get(mediaUrl, {
287
104
  responseType: "arraybuffer",
288
105
  validateStatus: () => true
289
106
  });
@@ -313,7 +130,7 @@ async function saveMedia(ctx, mediaElement, type, cfg) {
313
130
  ctx.logger.warn(`Downloaded ${type} buffer is empty`);
314
131
  return mediaUrl;
315
132
  }
316
- await import_node_fs.promises.writeFile(fullMediaPath, buffer);
133
+ await fs.writeFile(fullMediaPath, buffer);
317
134
  ctx.logger.info(
318
135
  `${type.charAt(0).toUpperCase() + type.slice(1)} saved successfully: ${fullMediaPath}`
319
136
  );
@@ -350,7 +167,7 @@ async function convertFileUriToBase64(ctx, element) {
350
167
  const fileUri = element.data.file;
351
168
  const filePath = decodeURIComponent(fileUri.replace("file:///", ""));
352
169
  try {
353
- const buffer = await import_node_fs.promises.readFile(filePath);
170
+ const buffer = await fs.readFile(filePath);
354
171
  const base64 = buffer.toString("base64");
355
172
  const mimeTypes = {
356
173
  image: "image/jpeg",
@@ -391,7 +208,7 @@ async function checkAndCleanMediaFiles(ctx, cfg, type) {
391
208
  if (!cfg.enableSizeLimit) {
392
209
  return;
393
210
  }
394
- const mediaDir = import_node_path.default.join(ctx.baseDir, "data", "cave", type + "s");
211
+ const mediaDir = path.join(ctx.baseDir, "data", "cave", type + "s");
395
212
  const maxSize = (() => {
396
213
  switch (type) {
397
214
  case "image":
@@ -406,14 +223,14 @@ async function checkAndCleanMediaFiles(ctx, cfg, type) {
406
223
  }
407
224
  })();
408
225
  try {
409
- const files = await import_node_fs.promises.readdir(mediaDir);
226
+ const files = await fs.readdir(mediaDir);
410
227
  if (files.length === 0) {
411
228
  return;
412
229
  }
413
230
  const fileInfos = await Promise.all(
414
231
  files.map(async (file) => {
415
- const filePath = import_node_path.default.join(mediaDir, file);
416
- const stats = await import_node_fs.promises.stat(filePath);
232
+ const filePath = path.join(mediaDir, file);
233
+ const stats = await fs.stat(filePath);
417
234
  return {
418
235
  path: filePath,
419
236
  size: stats.size,
@@ -440,9 +257,9 @@ async function checkAndCleanMediaFiles(ctx, cfg, type) {
440
257
  currentSize -= file.size;
441
258
  }
442
259
  for (const file of filesToDelete) {
443
- await import_node_fs.promises.unlink(file.path);
260
+ await fs.unlink(file.path);
444
261
  ctx.logger.info(
445
- `Deleted oldest ${type} file: ${import_node_path.default.basename(file.path)} (${(file.size / (1024 * 1024)).toFixed(2)} MB)`
262
+ `Deleted oldest ${type} file: ${path.basename(file.path)} (${(file.size / (1024 * 1024)).toFixed(2)} MB)`
446
263
  );
447
264
  }
448
265
  ctx.logger.info(
@@ -460,8 +277,8 @@ async function deleteMediaFilesFromMessage(ctx, content) {
460
277
  if (fileUri && fileUri.startsWith("file:///")) {
461
278
  const filePath = decodeURIComponent(fileUri.replace("file:///", ""));
462
279
  try {
463
- await import_node_fs.promises.access(filePath);
464
- await import_node_fs.promises.unlink(filePath);
280
+ await fs.access(filePath);
281
+ await fs.unlink(filePath);
465
282
  ctx.logger.info(`Deleted media file: ${filePath}`);
466
283
  } catch (err) {
467
284
  ctx.logger.warn(`Failed to delete media file: ${filePath}, error: ${err}`);
@@ -531,7 +348,7 @@ async function processMessageContent(ctx, msg, cfg) {
531
348
  }
532
349
 
533
350
  // src/core/command/add-cave.ts
534
- var import_koishi_plugin_adapter_onebot = require("@pynickle/koishi-plugin-adapter-onebot");
351
+ import { CQCode } from "@pynickle/koishi-plugin-adapter-onebot";
535
352
  async function addCave(ctx, session, cfg, userIds) {
536
353
  if (!session.guildId) {
537
354
  return session.text("echo-cave.general.privateChatReminder");
@@ -571,7 +388,7 @@ async function addCave(ctx, session, cfg, userIds) {
571
388
  const message = (await session.onebot.getMsg(messageId)).message;
572
389
  let msgJson;
573
390
  if (typeof message === "string") {
574
- msgJson = import_koishi_plugin_adapter_onebot.CQCode.parse(message);
391
+ msgJson = CQCode.parse(message);
575
392
  } else {
576
393
  if (message[0].type === "video" || message[0].type === "file") {
577
394
  type = "forward";
@@ -1099,21 +916,140 @@ async function searchCave(ctx, session, userIds) {
1099
916
  return session.text(".searchResult", [count, caveIds]);
1100
917
  }
1101
918
 
919
+ // src/locales/zh-CN.json
920
+ var zh_CN_default = {
921
+ "echo-cave": {
922
+ general: {
923
+ privateChatReminder: "\u274C \u8BF7\u5728\u7FA4\u804A\u4E2D\u4F7F\u7528\u8BE5\u547D\u4EE4\uFF01",
924
+ noMsgWithId: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
925
+ noTemplatesConfigured: "\u274C \u672A\u914D\u7F6E\u56DE\u58F0\u6D1E\u6A21\u677F\uFF0C\u8BF7\u5148\u914D\u7F6E\u6A21\u677F\uFF01"
926
+ },
927
+ user: {
928
+ invalidAllMention: "\u274C \u4E0D\u652F\u6301 @\u5168\u4F53\u6210\u5458\uFF0C\u8BF7\u76F4\u63A5\u6307\u5B9A\u5177\u4F53\u7528\u6237\uFF01",
929
+ userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01"
930
+ },
931
+ templates: {
932
+ "forward.1": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u4E00\u5219\u56DE\u58F0\u4ECE\u65F6\u5149\u4E2D\u98D8\u6765\u2014\u2014\n\u{1F4C5} {date} \xB7 \u6765\u81EA @{originName} \n\u{1F4EE} \u7531 @{userName} \u6295\u9012",
933
+ "forward.2": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u3010\u8BB0\u5F55\u7F16\u53F7\u3011{id} \n\u3010\u521B\u5EFA\u65F6\u95F4\u3011{date} \n\u3010\u539F\u59CB\u4F5C\u8005\u3011@{originName} \n\u3010\u6295\u9012\u8005\u3011@{userName}",
934
+ "forward.3": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u8FD9\u58F0\u56DE\u54CD\u6700\u521D\u6765\u81EA @{originName}\uFF0C \n\u7531 @{userName} \u5728 {date} \u7559\u4E0B\u3002",
935
+ "forward.4": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u65F6\u95F4\u7684\u56DE\u97F3\u5728\u6B64\u6C47\u805A\u3002 \n\u{1F4C5} {date} \n\u{1F4E4} \u51FA\u5904\uFF1A@{originName} \n\u{1F4EE} \u5C01\u5370\u8005\uFF1A@{userName}",
936
+ "forward.5": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4C5} {date} \n\u{1F464} \u6765\u81EA @{originName} \n\u{1F4EE} \u6295\u9012\u8005 @{userName}",
937
+ "msg.1.prefix": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014\u2014 \u6709\u4EBA\u7559\u4E0B\u4E86\u58F0\u97F3 \u2014\u2014{nl}",
938
+ "msg.1.suffix": "\u{1F4C5} {date} \xB7 \u6765\u81EA @{originName}\n\u{1F4EE} \u7531 @{userName} \u6295\u9012",
939
+ "msg.2.prefix": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
940
+ "msg.2.suffix": "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u{1F4C5} {date}\n\u{1F464} {originName} \xB7 \u7531 @{userName} \u6295\u9012",
941
+ "msg.3.prefix": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4AD}\u300C\u6709\u4EBA\u5728\u6D1E\u58C1\u7559\u4E0B\u5370\u8BB0\u300D{nl}",
942
+ "msg.3.suffix": "\u{1F4C5} {date}\n\u{1F4EE} {userName} \u8BB0\u5F55",
943
+ "msg.4.prefix": "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014 \u56DE\u58F0\u5F00\u59CB \u2014{nl}",
944
+ "msg.4.suffix": "\u2014 \u56DE\u58F0\u7ED3\u675F \u2014\n\u{1F4C5} {date} \xB7 @{originName}\n\u{1F4EE} @{userName}",
945
+ "msg.5.prefix": "\u{1F300} \u56DE\u58F0\u6D1E #{id}{nl}",
946
+ "msg.5.suffix": "\u{1F4C5} {date}\n\u6765\u81EA @{originName}\n\u7531 @{userName} \u6295\u9012"
947
+ }
948
+ },
949
+ commands: {
950
+ cave: {
951
+ description: "\u968F\u673A\u83B7\u53D6 / \u83B7\u53D6\u7279\u5B9A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
952
+ messages: {
953
+ noMsgInCave: '\u{1F680} \u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u6D88\u606F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01'
954
+ }
955
+ },
956
+ "cave.echo": {
957
+ description: "\u5C06\u6D88\u606F\u5B58\u5165\u56DE\u58F0\u6D1E",
958
+ messages: {
959
+ noMsgQuoted: "\u{1F4A1} \u8BF7\u5F15\u7528\u4E00\u6761\u6D88\u606F\u540E\u518D\u4F7F\u7528\u6B64\u547D\u4EE4\uFF01",
960
+ msgSaved: "\u2705 \u56DE\u58F0\u6D1E\u6D88\u606F\u5DF2\u6210\u529F\u5B58\u5165\uFF0C\u6D88\u606F ID\uFF1A{0}",
961
+ msgFailedToSave: "\u274C \u56DE\u58F0\u6D1E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF01"
962
+ }
963
+ },
964
+ "cave.drop": {
965
+ description: "\u62B9\u53BB\u7279\u5B9A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
966
+ messages: {
967
+ noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u5220\u9664\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
968
+ adminOnly: "\u26D4 \u8BE5\u6D88\u606F\u7531\u7BA1\u7406\u5458\u53D1\u5E03\uFF0C\u5DF2\u5F00\u542F\u7BA1\u7406\u5458\u6D88\u606F\u4FDD\u62A4\uFF0C\u53EA\u6709\u7BA1\u7406\u5458\u53EF\u4EE5\u5220\u9664\u3002",
969
+ permissionDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u53EA\u6709\u7BA1\u7406\u5458\u53EF\u4EE5\u5220\u9664\u3002",
970
+ contributorDeleteDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u6295\u7A3F\u8005\u5220\u9664\u56DE\u58F0\u6D1E\u3002",
971
+ senderDeleteDenied: "\u26D4 \u60A8\u6CA1\u6709\u6743\u9650\u5220\u9664\u6B64\u6D88\u606F\uFF01\u5F53\u524D\u914D\u7F6E\u4E0D\u5141\u8BB8\u539F\u59CB\u53D1\u9001\u8005\u5220\u9664\u56DE\u58F0\u6D1E\u3002",
972
+ msgDeleted: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF1A{0}"
973
+ }
974
+ },
975
+ "cave.purge": {
976
+ description: "\u62B9\u53BB\u591A\u4E2A id \u7684\u56DE\u58F0\u6D1E\u4FE1\u606F",
977
+ messages: {
978
+ noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u5220\u9664\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
979
+ msgDeleted: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF1A{0}",
980
+ msgDeletedMultiple: "\u2705 \u5DF2\u6210\u529F\u62B9\u53BB {0} \u6761\u56DE\u58F0\u6D1E\u6D88\u606F\uFF01",
981
+ msgDeleteFailedAll: "\u274C \u6240\u6709\u6307\u5B9A\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID \u5747\u5220\u9664\u5931\u8D25\uFF1A{0}",
982
+ msgDeletePartial: "\u26A0\uFE0F \u90E8\u5206\u56DE\u58F0\u6D1E\u6D88\u606F\u5220\u9664\u5931\u8D25\uFF0C\u5931\u8D25 ID\uFF1A{0}"
983
+ }
984
+ },
985
+ "cave.search": {
986
+ description: "\u641C\u7D22\u4E0E\u6307\u5B9A\u7528\u6237\u76F8\u5173\u7684\u56DE\u58F0\u6D1E",
987
+ messages: {
988
+ noUserIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u641C\u7D22\u7684\u7528\u6237 ID\uFF01",
989
+ noValidUserIdProvided: "\u274C \u672A\u63D0\u4F9B\u6709\u6548\u7684\u7528\u6237 ID\uFF01",
990
+ noMatchingCaves: "\u{1F50D} \u672A\u627E\u5230\u4E0E\u7528\u6237 {0} \u76F8\u5173\u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
991
+ searchResult: "\u{1F50D} \u5171\u627E\u5230 {0} \u6761\u4E0E\u8BE5\u7528\u6237\u76F8\u5173\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\uFF1A\nID \u5217\u8868\uFF1A{1}"
992
+ }
993
+ },
994
+ "cave.listen": {
995
+ description: "\u83B7\u5F97\u7531\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
996
+ messages: {
997
+ noMsgContributed: '\u{1F680} \u60A8\u5728\u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u6295\u7A3F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01',
998
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
999
+ }
1000
+ },
1001
+ "cave.trace": {
1002
+ description: "\u83B7\u5F97\u81EA\u5DF1\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
1003
+ messages: {
1004
+ noMsgTraced: '\u{1F680} \u60A8\u5728\u56DE\u58F0\u6D1E\u4E2D\u6682\u65E0\u53D1\u8A00\u88AB\u6295\u7A3F\uFF0C\u5FEB\u4F7F\u7528 "cave.echo" \u547D\u4EE4\u6DFB\u52A0\u7B2C\u4E00\u6761\u6D88\u606F\u5427\uFF01',
1005
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
1006
+ }
1007
+ },
1008
+ "cave.bind": {
1009
+ description: "\u5C06\u7528\u6237\u7ED1\u5B9A\u5230\u7279\u5B9A\u56DE\u58F0\u6D1E",
1010
+ messages: {
1011
+ noIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u7ED1\u5B9A\u7528\u6237\u7684\u56DE\u58F0\u6D1E\u6D88\u606F ID\uFF01",
1012
+ noUserIdProvided: "\u274C \u8BF7\u63D0\u4F9B\u8981\u7ED1\u5B9A\u7684\u7528\u6237 ID\uFF01",
1013
+ msgNotFound: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
1014
+ userBoundSuccess: "\u2705 \u5DF2\u6210\u529F\u5C06\u7528\u6237\u7ED1\u5B9A\u5230\u56DE\u58F0\u6D1E #{0}\uFF01"
1015
+ }
1016
+ },
1017
+ "cave.rank": {
1018
+ description: "\u67E5\u770B\u56DE\u58F0\u6D1E\u6392\u884C\u699C",
1019
+ messages: {
1020
+ invalidPeriod: "\u65E0\u6548\u7684\u65F6\u95F4\u6BB5\u53C2\u6570\u3002\u652F\u6301\u7684\u65F6\u95F4\u6BB5\uFF1A{0}\uFF0C\u6216\u81EA\u5B9A\u4E49\u65F6\u95F4\u683C\u5F0F(\u5982: 1d, 2d5h, 30m)",
1021
+ rankingTitle: "\u{1F4CA} \u56DE\u58F0\u6D1E\u6392\u884C\u699C ({0})",
1022
+ noData: "\u6682\u65E0\u6570\u636E",
1023
+ rankFormat: "{rankEmoji} {userName}\uFF1A{count} \u4E2A\u56DE\u58F0\u6D1E",
1024
+ period: {
1025
+ lday: "\u8FC7\u53BB 24 \u5C0F\u65F6",
1026
+ lweek: "\u8FC7\u53BB 7 \u5929",
1027
+ lmonth: "\u8FC7\u53BB 30 \u5929",
1028
+ day: "\u4ECA\u5929",
1029
+ week: "\u672C\u5468",
1030
+ month: "\u672C\u6708",
1031
+ all: "\u6240\u6709\u65F6\u95F4"
1032
+ }
1033
+ }
1034
+ }
1035
+ }
1036
+ };
1037
+
1102
1038
  // src/config/config.ts
1103
- var import_koishi2 = require("koishi");
1104
- var Config = import_koishi2.Schema.object({
1105
- adminMessageProtection: import_koishi2.Schema.boolean().default(false),
1106
- allowContributorDelete: import_koishi2.Schema.boolean().default(true),
1107
- allowSenderDelete: import_koishi2.Schema.boolean().default(true),
1108
- deleteMediaWhenDeletingMsg: import_koishi2.Schema.boolean().default(true),
1109
- enableSizeLimit: import_koishi2.Schema.boolean().default(false),
1110
- maxImageSize: import_koishi2.Schema.number().default(2048),
1111
- maxVideoSize: import_koishi2.Schema.number().default(512),
1112
- maxFileSize: import_koishi2.Schema.number().default(512),
1113
- maxRecordSize: import_koishi2.Schema.number().default(512),
1114
- useBase64ForMedia: import_koishi2.Schema.boolean().default(false),
1115
- sendAllAsForwardMsg: import_koishi2.Schema.boolean().default(false),
1116
- rankingTopCount: import_koishi2.Schema.number().default(10)
1039
+ import { Schema } from "koishi";
1040
+ var Config = Schema.object({
1041
+ adminMessageProtection: Schema.boolean().default(false),
1042
+ allowContributorDelete: Schema.boolean().default(true),
1043
+ allowSenderDelete: Schema.boolean().default(true),
1044
+ deleteMediaWhenDeletingMsg: Schema.boolean().default(true),
1045
+ enableSizeLimit: Schema.boolean().default(false),
1046
+ maxImageSize: Schema.number().default(2048),
1047
+ maxVideoSize: Schema.number().default(512),
1048
+ maxFileSize: Schema.number().default(512),
1049
+ maxRecordSize: Schema.number().default(512),
1050
+ useBase64ForMedia: Schema.boolean().default(false),
1051
+ sendAllAsForwardMsg: Schema.boolean().default(false),
1052
+ rankingTopCount: Schema.number().default(10)
1117
1053
  }).i18n({
1118
1054
  "zh-CN": require_zh_CN()
1119
1055
  });
@@ -1122,7 +1058,7 @@ var Config = import_koishi2.Schema.object({
1122
1058
  var name = "echo-cave";
1123
1059
  var inject = ["database"];
1124
1060
  function apply(ctx, cfg) {
1125
- ctx.i18n.define("zh-CN", require_zh_CN2());
1061
+ ctx.i18n.define("zh-CN", zh_CN_default);
1126
1062
  ctx.model.extend(
1127
1063
  "echo_cave",
1128
1064
  {
@@ -1193,10 +1129,9 @@ function apply(ctx, cfg) {
1193
1129
  async ({ session }, period) => await getRanking(ctx, session, cfg, period)
1194
1130
  );
1195
1131
  }
1196
- // Annotate the CommonJS export names for ESM import in node:
1197
- 0 && (module.exports = {
1132
+ export {
1198
1133
  Config,
1199
1134
  apply,
1200
1135
  inject,
1201
1136
  name
1202
- });
1137
+ };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "koishi-plugin-echo-cave",
3
3
  "description": "Group echo cave",
4
- "version": "1.24.4",
5
- "main": "lib/index.cjs",
4
+ "version": "1.24.6",
5
+ "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",
8
8
  "files": [
@@ -45,7 +45,6 @@
45
45
  "@types/node": "^24.10.2",
46
46
  "conventional-changelog-conventionalcommits": "^9.1.0",
47
47
  "esbuild": "^0.27.1",
48
- "esbuild-plugin-yaml": "^0.0.1",
49
48
  "oxfmt": "^0.17.0",
50
49
  "oxlint": "^1.32.0",
51
50
  "semantic-release": "^25.0.2",