koishi-plugin-echo-cave 1.16.6 → 1.16.7

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,6 +1,11 @@
1
+ export interface ParseResult {
2
+ parsedUserIds: string[];
3
+ error?: string;
4
+ }
1
5
  export declare function createTextMsg(content: string): {
2
6
  type: string;
3
7
  data: {
4
8
  text: string;
5
9
  };
6
10
  };
11
+ export declare function parseUserIds(userIds: string[]): ParseResult;
package/lib/index.cjs CHANGED
@@ -97,7 +97,8 @@ var require_zh_CN = __commonJS({
97
97
  existingMsg: "\u267B\uFE0F \u8BE5\u6D88\u606F\u5DF2\u5B58\u5728\u4E8E\u56DE\u58F0\u6D1E\u7A74\u4E2D\uFF01",
98
98
  msgSaved: "\u2705 \u56DE\u58F0\u6D1E\u6D88\u606F\u5DF2\u6210\u529F\u5B58\u5165\uFF0C\u6D88\u606F ID\uFF1A{0}",
99
99
  msgFailedToSave: "\u274C \u56DE\u58F0\u6D1E\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF01",
100
- userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01"
100
+ userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01",
101
+ invalidAllMention: "\u274C \u4E0D\u652F\u6301 @\u5168\u4F53\u6210\u5458\uFF0C\u8BF7\u76F4\u63A5\u6307\u5B9A\u5177\u4F53\u7528\u6237\uFF01"
101
102
  }
102
103
  },
103
104
  "cave.wipe": {
@@ -135,7 +136,8 @@ var require_zh_CN = __commonJS({
135
136
  msgNotFound: "\u{1F50D} \u672A\u627E\u5230\u8BE5 ID \u7684\u56DE\u58F0\u6D1E\u6D88\u606F",
136
137
  userBoundSuccess: "\u2705 \u5DF2\u6210\u529F\u5C06\u7528\u6237\u7ED1\u5B9A\u5230\u56DE\u58F0\u6D1E #{0}\uFF01",
137
138
  userAlreadyBound: "\u2139\uFE0F \u8BE5\u7528\u6237\u5DF2\u7ED1\u5B9A\u5230\u56DE\u58F0\u6D1E #{0}\uFF01",
138
- userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01"
139
+ userNotInGroup: "\u274C \u63D0\u4F9B\u7684\u7528\u6237 ID \u4E0D\u5168\u5C5E\u4E8E\u8BE5\u7FA4\u7EC4\uFF01",
140
+ invalidAllMention: "\u274C \u4E0D\u652F\u6301 @\u5168\u4F53\u6210\u5458\uFF0C\u8BF7\u76F4\u63A5\u6307\u5B9A\u5177\u4F53\u7528\u6237\uFF01"
139
141
  }
140
142
  }
141
143
  }
@@ -152,9 +154,10 @@ __export(index_exports, {
152
154
  name: () => name
153
155
  });
154
156
  module.exports = __toCommonJS(index_exports);
155
- var import_koishi_plugin_adapter_onebot = require("@pynickle/koishi-plugin-adapter-onebot");
157
+ var import_koishi_plugin_adapter_onebot2 = require("@pynickle/koishi-plugin-adapter-onebot");
156
158
 
157
159
  // src/cqcode-helper.ts
160
+ var import_koishi_plugin_adapter_onebot = require("@pynickle/koishi-plugin-adapter-onebot");
158
161
  function createTextMsg(content) {
159
162
  return {
160
163
  type: "text",
@@ -163,6 +166,45 @@ function createTextMsg(content) {
163
166
  }
164
167
  };
165
168
  }
169
+ function parseUserIds(userIds) {
170
+ const parsedUserIds = [];
171
+ for (const userIdStr of userIds) {
172
+ if (userIdStr === "all") {
173
+ return {
174
+ parsedUserIds: [],
175
+ error: "invalid_all_mention"
176
+ };
177
+ }
178
+ try {
179
+ const cqCode = import_koishi_plugin_adapter_onebot.CQCode.from(userIdStr);
180
+ if (cqCode.type === "at") {
181
+ const qq = cqCode.data.qq;
182
+ if (qq === "all") {
183
+ return {
184
+ parsedUserIds: [],
185
+ error: "invalid_all_mention"
186
+ };
187
+ }
188
+ if (qq) {
189
+ parsedUserIds.push(qq);
190
+ }
191
+ } else {
192
+ const num = Number(userIdStr);
193
+ if (!Number.isNaN(num)) {
194
+ parsedUserIds.push(String(num));
195
+ }
196
+ }
197
+ } catch (e) {
198
+ const num = Number(userIdStr);
199
+ if (!Number.isNaN(num)) {
200
+ parsedUserIds.push(String(num));
201
+ }
202
+ }
203
+ }
204
+ return {
205
+ parsedUserIds
206
+ };
207
+ }
166
208
 
167
209
  // src/media-helper.ts
168
210
  var import_axios = __toESM(require("axios"), 1);
@@ -510,7 +552,7 @@ async function processMessageContent(ctx, msg, cfg) {
510
552
  }
511
553
 
512
554
  // src/index.ts
513
- var import_koishi_plugin_adapter_onebot2 = require("@pynickle/koishi-plugin-adapter-onebot");
555
+ var import_koishi_plugin_adapter_onebot3 = require("@pynickle/koishi-plugin-adapter-onebot");
514
556
  var import_koishi = require("koishi");
515
557
  var name = "echo-cave";
516
558
  var inject = ["database"];
@@ -677,9 +719,15 @@ async function addCave(ctx, session, cfg, userIds) {
677
719
  }
678
720
  const { userId, channelId, quote } = session;
679
721
  const messageId = quote.id;
680
- const correctUserIds = userIds.map((s) => Number(s)).filter((n) => !Number.isNaN(n)).map(String);
722
+ let parsedUserIds = [];
681
723
  if (userIds && userIds.length > 0) {
682
- const isAllUsersInGroup = await checkUsersInGroup(ctx, session, correctUserIds);
724
+ const result = parseUserIds(userIds);
725
+ if (result.error === "invalid_all_mention") {
726
+ return session.text(".invalidAllMention");
727
+ }
728
+ parsedUserIds = result.parsedUserIds;
729
+ ctx.logger.info(`Parsed userIds in addCave: ${JSON.stringify(parsedUserIds)}`);
730
+ const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
683
731
  if (!isAllUsersInGroup) {
684
732
  return session.text(".userNotInGroup");
685
733
  }
@@ -700,7 +748,7 @@ async function addCave(ctx, session, cfg, userIds) {
700
748
  const message = (await session.onebot.getMsg(messageId)).message;
701
749
  let msgJson;
702
750
  if (typeof message === "string") {
703
- msgJson = import_koishi_plugin_adapter_onebot2.CQCode.parse(message);
751
+ msgJson = import_koishi_plugin_adapter_onebot3.CQCode.parse(message);
704
752
  } else {
705
753
  if (message[0].type === "video" || message[0].type === "file") {
706
754
  type = "forward";
@@ -722,7 +770,7 @@ async function addCave(ctx, session, cfg, userIds) {
722
770
  originUserId: quote.user.id,
723
771
  type,
724
772
  content,
725
- relatedUsers: correctUserIds || []
773
+ relatedUsers: parsedUserIds || []
726
774
  });
727
775
  return session.text(".msgSaved", [result.id]);
728
776
  } catch (error) {
@@ -739,16 +787,23 @@ async function bindUsersToCave(ctx, session, id, userIds) {
739
787
  if (!userIds || userIds.length === 0) {
740
788
  return session.text(".noUserIdProvided");
741
789
  }
790
+ let parsedUserIds = [];
791
+ const result = parseUserIds(userIds);
792
+ if (result.error === "invalid_all_mention") {
793
+ return session.text(".invalidAllMention");
794
+ }
795
+ parsedUserIds = result.parsedUserIds;
796
+ ctx.logger.info(`Parsed userIds: ${JSON.stringify(parsedUserIds)}`);
742
797
  const caves = await ctx.database.get("echo_cave", id);
743
798
  if (caves.length === 0) {
744
799
  return session.text("echo-cave.general.noMsgWithId");
745
800
  }
746
- const isAllUsersInGroup = await checkUsersInGroup(ctx, session, userIds);
801
+ const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
747
802
  if (!isAllUsersInGroup) {
748
803
  return session.text(".userNotInGroup");
749
804
  }
750
805
  await ctx.database.set("echo_cave", id, {
751
- relatedUsers: userIds
806
+ relatedUsers: parsedUserIds
752
807
  });
753
808
  return session.text(".userBoundSuccess", [id]);
754
809
  }
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.16.6",
4
+ "version": "1.16.7",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",