koishi-plugin-echo-cave 1.16.6 → 1.16.8

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,39 @@ function createTextMsg(content) {
163
166
  }
164
167
  };
165
168
  }
169
+ function parseUserIds(userIds) {
170
+ const parsedUserIds = [];
171
+ for (const userIdStr of userIds) {
172
+ try {
173
+ const cqCode = import_koishi_plugin_adapter_onebot.CQCode.from(userIdStr);
174
+ if (cqCode.type === "at") {
175
+ const qq = cqCode.data.qq;
176
+ if (qq === "all") {
177
+ return {
178
+ parsedUserIds: [],
179
+ error: "invalid_all_mention"
180
+ };
181
+ }
182
+ if (qq) {
183
+ parsedUserIds.push(qq);
184
+ }
185
+ } else {
186
+ const num = Number(userIdStr);
187
+ if (!Number.isNaN(num)) {
188
+ parsedUserIds.push(String(num));
189
+ }
190
+ }
191
+ } catch (e) {
192
+ const num = Number(userIdStr);
193
+ if (!Number.isNaN(num)) {
194
+ parsedUserIds.push(String(num));
195
+ }
196
+ }
197
+ }
198
+ return {
199
+ parsedUserIds
200
+ };
201
+ }
166
202
 
167
203
  // src/media-helper.ts
168
204
  var import_axios = __toESM(require("axios"), 1);
@@ -510,7 +546,7 @@ async function processMessageContent(ctx, msg, cfg) {
510
546
  }
511
547
 
512
548
  // src/index.ts
513
- var import_koishi_plugin_adapter_onebot2 = require("@pynickle/koishi-plugin-adapter-onebot");
549
+ var import_koishi_plugin_adapter_onebot3 = require("@pynickle/koishi-plugin-adapter-onebot");
514
550
  var import_koishi = require("koishi");
515
551
  var name = "echo-cave";
516
552
  var inject = ["database"];
@@ -550,7 +586,7 @@ function apply(ctx, cfg) {
550
586
  ctx.command("cave [id:number]").action(
551
587
  async ({ session }, id) => await getCave(ctx, session, cfg, id)
552
588
  );
553
- ctx.command("cave.echo [...userIds:string]").action(
589
+ ctx.command("cave.echo [...userIds:user]").action(
554
590
  async ({ session }, ...userIds) => await addCave(ctx, session, cfg, userIds)
555
591
  );
556
592
  ctx.command("cave.wipe <id:number>").action(
@@ -560,7 +596,7 @@ function apply(ctx, cfg) {
560
596
  ctx.command("cave.trace").action(
561
597
  async ({ session }) => await getCaveListByOriginUser(ctx, session)
562
598
  );
563
- ctx.command("cave.bind <id:number> <...userIds:string>", { authority: 4 }).action(
599
+ ctx.command("cave.bind <id:number> <...userIds:user>", { authority: 4 }).action(
564
600
  async ({ session }, id, ...userIds) => await bindUsersToCave(ctx, session, id, userIds)
565
601
  );
566
602
  }
@@ -677,9 +713,15 @@ async function addCave(ctx, session, cfg, userIds) {
677
713
  }
678
714
  const { userId, channelId, quote } = session;
679
715
  const messageId = quote.id;
680
- const correctUserIds = userIds.map((s) => Number(s)).filter((n) => !Number.isNaN(n)).map(String);
716
+ let parsedUserIds = [];
681
717
  if (userIds && userIds.length > 0) {
682
- const isAllUsersInGroup = await checkUsersInGroup(ctx, session, correctUserIds);
718
+ const result = parseUserIds(userIds);
719
+ if (result.error === "invalid_all_mention") {
720
+ return session.text(".invalidAllMention");
721
+ }
722
+ parsedUserIds = result.parsedUserIds;
723
+ ctx.logger.info(`Parsed userIds in addCave: ${JSON.stringify(parsedUserIds)}`);
724
+ const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
683
725
  if (!isAllUsersInGroup) {
684
726
  return session.text(".userNotInGroup");
685
727
  }
@@ -700,7 +742,7 @@ async function addCave(ctx, session, cfg, userIds) {
700
742
  const message = (await session.onebot.getMsg(messageId)).message;
701
743
  let msgJson;
702
744
  if (typeof message === "string") {
703
- msgJson = import_koishi_plugin_adapter_onebot2.CQCode.parse(message);
745
+ msgJson = import_koishi_plugin_adapter_onebot3.CQCode.parse(message);
704
746
  } else {
705
747
  if (message[0].type === "video" || message[0].type === "file") {
706
748
  type = "forward";
@@ -722,7 +764,7 @@ async function addCave(ctx, session, cfg, userIds) {
722
764
  originUserId: quote.user.id,
723
765
  type,
724
766
  content,
725
- relatedUsers: correctUserIds || []
767
+ relatedUsers: parsedUserIds || []
726
768
  });
727
769
  return session.text(".msgSaved", [result.id]);
728
770
  } catch (error) {
@@ -739,16 +781,23 @@ async function bindUsersToCave(ctx, session, id, userIds) {
739
781
  if (!userIds || userIds.length === 0) {
740
782
  return session.text(".noUserIdProvided");
741
783
  }
784
+ let parsedUserIds = [];
785
+ const result = parseUserIds(userIds);
786
+ if (result.error === "invalid_all_mention") {
787
+ return session.text(".invalidAllMention");
788
+ }
789
+ parsedUserIds = result.parsedUserIds;
790
+ ctx.logger.info(`Parsed userIds: ${JSON.stringify(parsedUserIds)}`);
742
791
  const caves = await ctx.database.get("echo_cave", id);
743
792
  if (caves.length === 0) {
744
793
  return session.text("echo-cave.general.noMsgWithId");
745
794
  }
746
- const isAllUsersInGroup = await checkUsersInGroup(ctx, session, userIds);
795
+ const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
747
796
  if (!isAllUsersInGroup) {
748
797
  return session.text(".userNotInGroup");
749
798
  }
750
799
  await ctx.database.set("echo_cave", id, {
751
- relatedUsers: userIds
800
+ relatedUsers: parsedUserIds
752
801
  });
753
802
  return session.text(".userBoundSuccess", [id]);
754
803
  }
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.8",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",