koishi-plugin-echo-cave 1.25.1 → 1.26.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 +49 -47
  2. package/package.json +1 -1
package/lib/index.cjs CHANGED
@@ -94,16 +94,13 @@ function parseUserIds(userIds) {
94
94
 
95
95
  // src/utils/msg/message-listener.ts
96
96
  async function listenForUserMessage(ctx, session, prompt, timeout, onMessage, onTimeout) {
97
- const userId = session.userId;
98
- const channelId = session.channelId;
97
+ const { userId, channelId } = session;
99
98
  const promptMessageId = await session.onebot.sendGroupMsg(channelId, prompt);
100
- let timeoutId;
101
99
  const listener = async (msgSession) => {
102
100
  if (msgSession.userId === userId && msgSession.channelId === channelId) {
103
- clearTimeout(timeoutId);
104
101
  const shouldContinue = await onMessage(msgSession.content);
105
102
  if (!shouldContinue) {
106
- ctx.off("message", listener);
103
+ cancelListener();
107
104
  try {
108
105
  await session.onebot.deleteMsg(promptMessageId);
109
106
  } catch (error) {
@@ -112,9 +109,9 @@ async function listenForUserMessage(ctx, session, prompt, timeout, onMessage, on
112
109
  }
113
110
  }
114
111
  };
115
- ctx.on("message", listener);
112
+ const cancelListener = ctx.on("message", listener);
116
113
  const cancelTimeout = ctx.setTimeout(async () => {
117
- ctx.off("message", listener);
114
+ cancelListener();
118
115
  if (onTimeout) {
119
116
  await onTimeout();
120
117
  }
@@ -408,6 +405,7 @@ async function addCave(ctx, session, cfg, userIds) {
408
405
  }
409
406
  }
410
407
  }
408
+ let selectedUsersWithNames = [];
411
409
  let content;
412
410
  let type;
413
411
  let forwardUsers = [];
@@ -450,49 +448,53 @@ async function addCave(ctx, session, cfg, userIds) {
450
448
  content = JSON.stringify(await processMessageContent(ctx, msgJson, cfg));
451
449
  }
452
450
  if (type === "forward" && forwardUsers.length > 0 && parsedUserIds.length === 0 && cfg.enableForwardUserSelection) {
453
- const userSelectionPromise = new Promise((resolve) => {
454
- let prompt = session.text(".selectRelatedUsers");
455
- forwardUsers.forEach((user, index) => {
456
- prompt += `
451
+ const userSelectionPromise = new Promise(
452
+ (resolve) => {
453
+ let prompt = session.text(".selectRelatedUsers");
454
+ forwardUsers.forEach((user, index) => {
455
+ prompt += `
457
456
  ${index + 1}: ${user.nickname}`;
458
- });
459
- prompt += `
457
+ });
458
+ prompt += `
460
459
  ${session.text(".selectInstruction")}`;
461
- listenForUserMessage(
462
- ctx,
463
- session,
464
- prompt,
465
- cfg.forwardSelectTimeout * 1e3,
466
- // Convert seconds to milliseconds
467
- async (message) => {
468
- const trimmedMessage = message.trim();
469
- let selectedUsers = [];
470
- if (trimmedMessage.toLowerCase() === "all") {
471
- selectedUsers = forwardUsers.map((user) => user.userId);
472
- } else if (trimmedMessage.toLowerCase() === "skip") {
473
- selectedUsers = [];
474
- } else {
475
- const indices = trimmedMessage.split(/\s+/).map((index) => parseInt(index.trim()) - 1);
476
- const validIndices = indices.filter(
477
- (index) => index >= 0 && index < forwardUsers.length
478
- );
479
- if (validIndices.length > 0) {
480
- selectedUsers = validIndices.map((index) => forwardUsers[index].userId);
460
+ listenForUserMessage(
461
+ ctx,
462
+ session,
463
+ prompt,
464
+ cfg.forwardSelectTimeout * 1e3,
465
+ // Convert seconds to milliseconds
466
+ async (message) => {
467
+ const trimmedMessage = message.trim();
468
+ let selectedUsers = [];
469
+ if (trimmedMessage.toLowerCase() === "all") {
470
+ selectedUsers = [...forwardUsers];
471
+ } else if (trimmedMessage.toLowerCase() === "skip") {
472
+ selectedUsers = [];
481
473
  } else {
482
- await session.send(session.text(".invalidSelection"));
483
- return true;
474
+ const indices = trimmedMessage.split(/\s+/).map((index) => parseInt(index.trim()) - 1);
475
+ const validIndices = indices.filter(
476
+ (index) => index >= 0 && index < forwardUsers.length
477
+ );
478
+ if (validIndices.length > 0) {
479
+ selectedUsers = validIndices.map((index) => forwardUsers[index]);
480
+ } else {
481
+ await session.send(session.text(".invalidSelection"));
482
+ return true;
483
+ }
484
484
  }
485
+ resolve(selectedUsers);
486
+ return false;
487
+ },
488
+ async () => {
489
+ resolve([]);
485
490
  }
486
- resolve(selectedUsers);
487
- return false;
488
- },
489
- async () => {
490
- resolve([]);
491
- }
492
- );
493
- });
494
- parsedUserIds = await userSelectionPromise;
491
+ );
492
+ }
493
+ );
494
+ selectedUsersWithNames = await userSelectionPromise;
495
495
  }
496
+ const finalParsedUserIds = selectedUsersWithNames.map((user) => user.userId);
497
+ const relatedUsersFormatted = selectedUsersWithNames.map((user) => user.nickname).join(", ");
496
498
  try {
497
499
  const result = await ctx.database.create("echo_cave_v2", {
498
500
  channelId,
@@ -501,9 +503,9 @@ ${session.text(".selectInstruction")}`;
501
503
  originUserId: quote.user.id,
502
504
  type,
503
505
  content,
504
- relatedUsers: parsedUserIds || []
506
+ relatedUsers: finalParsedUserIds
505
507
  });
506
- return session.text(".msgSaved", [result.id]);
508
+ return session.text(".msgSaved", { id: result.id, relatedUsers: relatedUsersFormatted });
507
509
  } catch (error) {
508
510
  return session.text(".msgFailedToSave");
509
511
  }
@@ -1057,7 +1059,7 @@ var zh_CN_default = {
1057
1059
  description: "\u5C06\u6D88\u606F\u5B58\u5165\u56DE\u58F0\u6D1E",
1058
1060
  messages: {
1059
1061
  noMsgQuoted: "\u{1F4A1} \u8BF7\u5F15\u7528\u4E00\u6761\u6D88\u606F\u540E\u518D\u4F7F\u7528\u6B64\u547D\u4EE4\uFF01",
1060
- msgSaved: "\u2705 \u56DE\u58F0\u6D1E\u6D88\u606F\u5DF2\u6210\u529F\u5B58\u5165\uFF0C\u6D88\u606F ID\uFF1A{0}",
1062
+ msgSaved: "\u2705 \u56DE\u58F0\u6D1E\u6D88\u606F\u5DF2\u6210\u529F\u5B58\u5165\uFF0C\u6D88\u606F ID\uFF1A{id}",
1061
1063
  msgFailedToSave: "\u274C \u56DE\u58F0\u6D1E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF01",
1062
1064
  selectRelatedUsers: "\u8BF7\u9009\u62E9\u8981\u5173\u8054\u7684\u7528\u6237\uFF08\u4EE5\u7A7A\u683C\u5206\u9694\u5E8F\u53F7\uFF0C\u8F93\u5165'all'\u9009\u62E9\u5168\u90E8\uFF09\uFF1A",
1063
1065
  selectInstruction: "\u8F93\u5165\u793A\u4F8B\uFF1A1 3 \u6216 all \u6216 skip",
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.25.1",
4
+ "version": "1.26.0",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",