koishi-plugin-echo-cave 1.9.1 → 1.10.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.
Files changed (2) hide show
  1. package/lib/index.cjs +87 -100
  2. package/package.json +1 -1
package/lib/index.cjs CHANGED
@@ -33,14 +33,48 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
33
33
  var require_zh_CN = __commonJS({
34
34
  "src/locales/zh-CN.json"(exports2, module2) {
35
35
  module2.exports = {
36
- config: {
36
+ _config: {
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
40
  },
41
- general: {
42
- privateChatReminder: "\u274C \u8BF7\u5728\u7FA4\u804A\u4E2D\u4F7F\u7528\u8BE5\u547D\u4EE4\uFF01",
43
- noMsgWithId: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F"
41
+ "echo-cave": {
42
+ general: {
43
+ privateChatReminder: "\u274C \u8BF7\u5728\u7FA4\u804A\u4E2D\u4F7F\u7528\u8BE5\u547D\u4EE4\uFF01",
44
+ noMsgWithId: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
45
+ noTemplatesConfigured: "\u274C \u672A\u914D\u7F6E\u56DE\u58F0\u6D1E\u6A21\u677F\uFF0C\u8BF7\u5148\u914D\u7F6E\u6A21\u677F\uFF01"
46
+ },
47
+ templates: {
48
+ forward: [
49
+ "\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",
50
+ "\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}",
51
+ "\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",
52
+ "\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}",
53
+ "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4C5} {date} \n\u{1F464} \u6765\u81EA @{originName} \n\u{1F4EE} \u6295\u9012\u8005 @{userName}"
54
+ ],
55
+ msg: [
56
+ {
57
+ prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014\u2014 \u6709\u4EBA\u7559\u4E0B\u4E86\u58F0\u97F3 \u2014\u2014\n\n",
58
+ suffix: "\u{1F4C5} {date} \xB7 \u6765\u81EA @{originName}\n\u{1F4EE} \u7531 @{userName} \u6295\u9012"
59
+ },
60
+ {
61
+ prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n",
62
+ 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"
63
+ },
64
+ {
65
+ prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u{1F4AD}\u300C\u6709\u4EBA\u5728\u6D1E\u58C1\u7559\u4E0B\u5370\u8BB0\u300D\n\n",
66
+ suffix: "\u{1F4C5} {date}\n\u{1F4EE} {userName} \u8BB0\u5F55"
67
+ },
68
+ {
69
+ prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n\u2014 \u56DE\u58F0\u5F00\u59CB \u2014\n\n",
70
+ suffix: "\u2014 \u56DE\u58F0\u7ED3\u675F \u2014\n\u{1F4C5} {date} \xB7 @{originName}\n\u{1F4EE} @{userName}"
71
+ },
72
+ {
73
+ prefix: "\u{1F300} \u56DE\u58F0\u6D1E #{id}\n\n",
74
+ suffix: "\u{1F4C5} {date}\n\u6765\u81EA @{originName}\n\u7531 @{userName} \u6295\u9012"
75
+ }
76
+ ]
77
+ }
44
78
  },
45
79
  commands: {
46
80
  cave: {
@@ -72,7 +106,17 @@ var require_zh_CN = __commonJS({
72
106
  "cave.listen": {
73
107
  description: "\u83B7\u5F97\u7531\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
74
108
  messages: {
75
- 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'
109
+ 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',
110
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A\n",
111
+ msgListItem: "ID: {0} | \u521B\u5EFA\u65F6\u95F4: {1}\n"
112
+ }
113
+ },
114
+ "cave.trace": {
115
+ description: "\u83B7\u5F97\u81EA\u5DF1\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
116
+ messages: {
117
+ 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',
118
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A\n",
119
+ msgListItem: "ID: {0} | \u521B\u5EFA\u65F6\u95F4: {1}\n"
76
120
  }
77
121
  }
78
122
  }
@@ -113,103 +157,50 @@ async function getUserName(ctx, session, userId) {
113
157
  }
114
158
 
115
159
  // src/cave-helper.ts
160
+ var random = (arr) => arr[Math.floor(Math.random() * arr.length)];
161
+ var replacePlaceholders = (template, data) => {
162
+ return template.replace(/{(\w+)}/g, (match, key) => data[key] || match);
163
+ };
116
164
  async function sendCaveMsg(ctx, session, caveMsg) {
117
165
  const { channelId } = session;
118
166
  const content = JSON.parse(caveMsg.content);
119
167
  const date = formatDate(caveMsg.createTime);
120
168
  const originName = await getUserName(ctx, session, caveMsg.originUserId);
121
169
  const userName = await getUserName(ctx, session, caveMsg.userId);
122
- const forwardStyles = [
123
- `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
124
-
125
- \u4E00\u5219\u56DE\u58F0\u4ECE\u65F6\u5149\u4E2D\u98D8\u6765\u2014\u2014
126
- \u{1F4C5} ${date} \xB7 \u6765\u81EA @${originName}
127
- \u{1F4EE} \u7531 @${userName} \u6295\u9012`,
128
- `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
129
-
130
- \u3010\u8BB0\u5F55\u7F16\u53F7\u3011${caveMsg.id}
131
- \u3010\u521B\u5EFA\u65F6\u95F4\u3011${date}
132
- \u3010\u539F\u59CB\u4F5C\u8005\u3011@${originName}
133
- \u3010\u6295\u9012\u8005\u3011@${userName}`,
134
- `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
135
-
136
- \u8FD9\u58F0\u56DE\u54CD\u6700\u521D\u6765\u81EA @${originName}\uFF0C
137
- \u7531 @${userName} \u5728 ${date} \u7559\u4E0B\u3002`,
138
- `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
139
-
140
- \u65F6\u95F4\u7684\u56DE\u97F3\u5728\u6B64\u6C47\u805A\u3002
141
- \u{1F4C5} ${date}
142
- \u{1F4E4} \u51FA\u5904\uFF1A@${originName}
143
- \u{1F4EE} \u5C01\u5370\u8005\uFF1A@${userName}`,
144
- `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
145
-
146
- \u{1F4C5} ${date}
147
- \u{1F464} \u6765\u81EA @${originName}
148
- \u{1F4EE} \u6295\u9012\u8005 @${userName}`
149
- ];
150
- const msgStyles = [
151
- {
152
- prefix: `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
153
-
154
- \u2014\u2014 \u6709\u4EBA\u7559\u4E0B\u4E86\u58F0\u97F3 \u2014\u2014
155
-
156
- `,
157
- suffix: `\u{1F4C5} ${date} \xB7 \u6765\u81EA @${originName}
158
- \u{1F4EE} \u7531 @${userName} \u6295\u9012`
159
- },
160
- {
161
- prefix: `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
162
- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
163
- `,
164
- suffix: `\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
165
- \u{1F4C5} ${date}
166
- \u{1F464} ${originName} \xB7 \u7531 @${userName} \u6295\u9012`
167
- },
168
- {
169
- prefix: `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
170
-
171
- \u{1F4AD}\u300C\u6709\u4EBA\u5728\u6D1E\u58C1\u7559\u4E0B\u5370\u8BB0\u300D
172
-
173
- `,
174
- suffix: `\u{1F4C5} ${date}
175
- \u{1F4EE} ${userName} \u8BB0\u5F55`
176
- },
177
- {
178
- prefix: `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
179
-
180
- \u2014 \u56DE\u58F0\u5F00\u59CB \u2014
181
-
182
- `,
183
- suffix: `\u2014 \u56DE\u58F0\u7ED3\u675F \u2014
184
- \u{1F4C5} ${date} \xB7 @${originName}
185
- \u{1F4EE} @${userName}`
186
- },
187
- {
188
- prefix: `\u{1F300} \u56DE\u58F0\u6D1E #${caveMsg.id}
189
-
190
- `,
191
- suffix: `\u{1F4C5} ${date}
192
- \u6765\u81EA @${originName}
193
- \u7531 @${userName} \u6295\u9012`
194
- }
195
- ];
196
- const random = (arr) => arr[Math.floor(Math.random() * arr.length)];
170
+ const templateData = {
171
+ id: caveMsg.id.toString(),
172
+ date,
173
+ originName,
174
+ userName
175
+ };
176
+ const templates = require_zh_CN()["echo-cave"].templates;
197
177
  if (caveMsg.type === "forward") {
198
- const chosen2 = random(forwardStyles);
199
- await session.onebot.sendGroupMsg(channelId, [createTextMsg(chosen2)]);
178
+ const forwardTemplates = (templates.forward || []).filter(
179
+ (template) => template.trim() !== ""
180
+ );
181
+ if (forwardTemplates.length === 0) {
182
+ await session.send(session.text("echo-cave.general.noTemplatesConfigured"));
183
+ return;
184
+ }
185
+ const chosenTemplate2 = replacePlaceholders(random(forwardTemplates), templateData);
186
+ await session.onebot.sendGroupMsg(channelId, [createTextMsg(chosenTemplate2)]);
200
187
  await session.onebot.sendGroupForwardMsg(channelId, content);
201
188
  return;
202
- } else if (caveMsg.type == "msg" && content.some((m) => m.type === "reply")) {
203
- const chosen2 = random(forwardStyles);
204
- await session.onebot.sendGroupMsg(channelId, [createTextMsg(chosen2)]);
205
- await session.onebot.sendGroupMsg(channelId, content);
189
+ }
190
+ const msgTemplates = (templates.msg || []).filter(
191
+ (template) => template && template.prefix?.trim() !== "" && template.suffix?.trim() !== ""
192
+ );
193
+ if (msgTemplates.length === 0) {
194
+ await session.send(session.text("echo-cave.general.noTemplatesConfigured"));
206
195
  return;
207
196
  }
208
- const chosen = random(msgStyles);
197
+ const chosenTemplate = random(msgTemplates);
198
+ const prefix = replacePlaceholders(chosenTemplate.prefix, templateData);
199
+ const suffix = replacePlaceholders(chosenTemplate.suffix, templateData);
209
200
  const last = content.at(-1);
210
201
  const needsNewline = last?.type === "text";
211
- content.unshift(createTextMsg(chosen.prefix));
212
- content.push(createTextMsg(`${needsNewline ? "\n\n" : ""}${chosen.suffix}`));
202
+ content.unshift(createTextMsg(prefix));
203
+ content.push(createTextMsg(`${needsNewline ? "\n\n" : ""}${suffix}`));
213
204
  await session.onebot.sendGroupMsg(channelId, content);
214
205
  }
215
206
  function formatDate(date) {
@@ -339,7 +330,7 @@ var Config = import_koishi.Schema.object({
339
330
  allowContributorDelete: import_koishi.Schema.boolean().default(true),
340
331
  allowSenderDelete: import_koishi.Schema.boolean().default(true)
341
332
  }).i18n({
342
- "zh-CN": require_zh_CN().config
333
+ "zh-CN": require_zh_CN()._config
343
334
  });
344
335
  function apply(ctx, cfg) {
345
336
  ctx.i18n.define("zh-CN", require_zh_CN());
@@ -372,7 +363,7 @@ function apply(ctx, cfg) {
372
363
  async ({ session }, id) => await deleteCave(ctx, session, cfg, id)
373
364
  );
374
365
  ctx.command("cave.listen").action(async ({ session }) => await getCaveListByUser(ctx, session));
375
- ctx.command("cave.trace", "\u83B7\u5F97\u81EA\u5DF1\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u5217\u8868").action(
366
+ ctx.command("cave.trace").action(
376
367
  async ({ session }) => await getCaveListByOriginUser(ctx, session)
377
368
  );
378
369
  }
@@ -388,11 +379,9 @@ async function getCaveListByUser(ctx, session) {
388
379
  if (caves.length === 0) {
389
380
  return session.text(".noMsgContributed");
390
381
  }
391
- let response = `\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A
392
- `;
382
+ let response = session.text(".msgListHeader");
393
383
  for (const cave of caves) {
394
- response += `ID: ${cave.id} | \u521B\u5EFA\u65F6\u95F4: ${formatDate(cave.createTime)}
395
- `;
384
+ response += session.text(".msgListItem", [cave.id, formatDate(cave.createTime)]);
396
385
  }
397
386
  return response;
398
387
  }
@@ -406,13 +395,11 @@ async function getCaveListByOriginUser(ctx, session) {
406
395
  channelId
407
396
  });
408
397
  if (caves.length === 0) {
409
- return '\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';
398
+ return session.text(".noMsgTraced");
410
399
  }
411
- let response = `\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A
412
- `;
400
+ let response = session.text(".msgListHeader");
413
401
  for (const cave of caves) {
414
- response += `ID: ${cave.id} | \u521B\u5EFA\u65F6\u95F4: ${formatDate(cave.createTime)}
415
- `;
402
+ response += session.text(".msgListItem", [cave.id, formatDate(cave.createTime)]);
416
403
  }
417
404
  return response;
418
405
  }
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.9.1",
4
+ "version": "1.10.0",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",