koishi-plugin-echo-cave 1.18.4 → 1.18.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.
package/README.md CHANGED
@@ -11,19 +11,13 @@
11
11
  ## ✨ 功能特性
12
12
 
13
13
  - 📥 **消息存储**:支持存储普通消息和转发消息到数据库
14
- - 🖼️ **图片保存**:自动保存消息中的图片资源到本地
15
14
  - 🔍 **消息查询**:支持随机获取消息或通过 ID 精确查找
16
15
  - 🗑️ **消息管理**:支持删除特定 ID 的消息(消息存储者、原始发送者或管理员)
17
- - 📊 **数据持久化**:使用 Koishi 数据库系统,确保数据不会丢失
18
16
  - 👤 **个人追踪**:支持查看自己投稿的消息列表
19
17
  - 🔍 **发言回溯**:支持查看自己被他人投稿的消息列表
20
- - 🎨 **精美展示**:消息展示时自带多种风格的外部包裹信息,显示消息详情
21
- - 🔒 **管理员保护**:可配置管理员消息保护,确保管理员发布的消息安全
18
+ - 🎨 **模板化展示**:消息展示时自带多种风格的外部包裹信息
19
+ - 🔒 **管理员保护**:可配置管理员消息保护
22
20
  - 📏 **媒体限制**:支持配置媒体文件大小限制
23
- - 🌐 **多语言支持**:支持中文语言包
24
- - 🔄 **嵌套转发**:支持嵌套转发消息的递归处理
25
- - 📝 **模板化展示**:支持多种风格的消息展示模板
26
- - 🔁 **重复检测**:自动检测重复消息,避免存储重复内容
27
21
 
28
22
  ## 📋 命令列表
29
23
 
@@ -32,13 +26,13 @@
32
26
  | `cave` | 随机获取一条回声洞消息 | 所有人 |
33
27
  | `cave <id>` | 获取特定 ID 的回声洞消息 | 所有人 |
34
28
  | `cave.echo` | 将引用的消息存入回声洞 | 所有人 |
35
- | `cave.wipe <id>` | 删除特定 ID 的回声洞消息 | 消息存储者、原始发送者或管理员 |
29
+ | `cave.drop <id>` | 删除特定 ID 的回声洞消息 | 消息存储者、原始发送者或管理员 |
36
30
  | `cave.listen` | 获取自己投稿的回声洞列表 | 所有人 |
37
31
  | `cave.trace` | 获取自己发言被投稿的回声洞列表 | 所有人 |
38
32
 
39
33
  ## 🚀 使用指南
40
34
 
41
- ### 1. 安装插件
35
+ ### 安装插件
42
36
 
43
37
  ```bash
44
38
  npm install koishi-plugin-echo-cave
@@ -46,24 +40,6 @@ npm install koishi-plugin-echo-cave
46
40
 
47
41
  或在插件商城中搜索 `koishi-plugin-echo-cave` 进行安装。
48
42
 
49
- ### 2. 基本使用
50
-
51
- 1. **存储消息**:在群聊中引用一条消息,然后发送命令 `cave.echo`
52
- 2. **查看随机消息**:发送命令 `cave` 获取一条随机消息
53
- 3. **查看特定消息**:发送命令 `cave <id>` 查看指定 ID 的消息
54
- 4. **删除消息**:消息存储者、原始发送者或管理员发送命令 `cave.wipe <id>` 删除指定 ID 的消息
55
- 5. **查看自己的投稿**:发送命令 `cave.listen` 查看自己曾经存入的所有回声洞消息
56
- 6. **查看自己的发言**:发送命令 `cave.trace` 查看自己曾经被他人存入的回声洞消息
57
-
58
- ## 🔧 技术说明
59
-
60
- - 插件使用 Koishi 数据库系统存储消息记录
61
- - 支持嵌套转发消息的处理
62
- - 自动检测重复消息,避免存储重复内容
63
- - 支持媒体文件大小限制
64
- - 支持多语言配置(中文)
65
- - 支持嵌套转发消息的递归处理
66
-
67
43
  ## 🛠️ 配置选项
68
44
 
69
45
  | 配置项 | 类型 | 默认值 | 说明 |
@@ -2,6 +2,6 @@ import { Context, Session } from 'koishi';
2
2
  export declare function getUserIdFromNickname(session: Session, nickname: string, userId: number): Promise<number>;
3
3
  export declare function getUserName(ctx: Context, session: Session, userId: string): Promise<string>;
4
4
  /**
5
- * 检查用户是否属于指定群组
5
+ * Check if users belong to the specified group
6
6
  */
7
7
  export declare function checkUsersInGroup(ctx: Context, session: Session, userIds: string[]): Promise<boolean>;
package/lib/index.cjs CHANGED
@@ -155,16 +155,14 @@ var require_zh_CN2 = __commonJS({
155
155
  description: "\u83B7\u5F97\u7531\u81EA\u5DF1\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
156
156
  messages: {
157
157
  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',
158
- msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A",
159
- msgListItem: "ID: {0} | \u521B\u5EFA\u65F6\u95F4: {1}"
158
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u6295\u7A3F\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
160
159
  }
161
160
  },
162
161
  "cave.trace": {
163
162
  description: "\u83B7\u5F97\u81EA\u5DF1\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u5217\u8868",
164
163
  messages: {
165
164
  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
- msgListItem: "ID: {0} | \u521B\u5EFA\u65F6\u95F4: {1}"
165
+ msgListHeader: "\u{1F4DC} \u60A8\u5728\u672C\u9891\u9053\u53D1\u8A00\u7684\u56DE\u58F0\u6D1E\u6D88\u606F\u5217\u8868\uFF1A"
168
166
  }
169
167
  },
170
168
  "cave.bind": {
@@ -365,7 +363,7 @@ async function checkAndCleanMediaFiles(ctx, cfg, type) {
365
363
  switch (type) {
366
364
  case "image":
367
365
  return (cfg.maxImageSize || 100) * 1024 * 1024;
368
- // 转换为字节
366
+ // Convert to bytes
369
367
  case "video":
370
368
  return (cfg.maxVideoSize || 500) * 1024 * 1024;
371
369
  case "file":
@@ -505,15 +503,16 @@ async function addCave(ctx, session, cfg, userIds) {
505
503
  const messageId = quote.id;
506
504
  let parsedUserIds = [];
507
505
  if (userIds && userIds.length > 0) {
508
- ctx.logger.info(`Original userIds in addCave: ${JSON.stringify(userIds)}`);
509
506
  const result = parseUserIds(userIds);
510
507
  if (result.error === "invalid_all_mention") {
511
508
  return session.text("echo-cave.user.invalidAllMention");
512
509
  }
513
510
  parsedUserIds = result.parsedUserIds;
514
- const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
515
- if (!isAllUsersInGroup) {
516
- return session.text(".userNotInGroup");
511
+ if (parsedUserIds.length > 0) {
512
+ const isAllUsersInGroup = await checkUsersInGroup(ctx, session, parsedUserIds);
513
+ if (!isAllUsersInGroup) {
514
+ return session.text("echo-cave.user.userNotInGroup");
515
+ }
517
516
  }
518
517
  }
519
518
  let content;
@@ -745,36 +744,38 @@ async function getCaveListByUser(ctx, session) {
745
744
  return session.text("echo-cave.general.privateChatReminder");
746
745
  }
747
746
  const { userId, channelId } = session;
748
- const caves = await ctx.database.get("echo_cave", {
749
- userId,
750
- channelId
751
- });
747
+ const caves = await ctx.database.get(
748
+ "echo_cave",
749
+ {
750
+ userId,
751
+ channelId
752
+ },
753
+ ["id"]
754
+ );
752
755
  if (caves.length === 0) {
753
756
  return session.text(".noMsgContributed");
754
757
  }
755
- let response = session.text(".msgListHeader") + "\n";
756
- for (const cave of caves) {
757
- response += session.text(".msgListItem", [cave.id, formatDate(cave.createTime)]) + "\n";
758
- }
759
- return response;
758
+ const ids = caves.map((cave) => cave.id).join(" | ");
759
+ return session.text(".msgListHeader") + "\n" + ids;
760
760
  }
761
761
  async function getCaveListByOriginUser(ctx, session) {
762
762
  if (!session.guildId) {
763
763
  return session.text("echo-cave.general.privateChatReminder");
764
764
  }
765
765
  const { userId, channelId } = session;
766
- const caves = await ctx.database.get("echo_cave", {
767
- originUserId: userId,
768
- channelId
769
- });
766
+ const caves = await ctx.database.get(
767
+ "echo_cave",
768
+ {
769
+ originUserId: userId,
770
+ channelId
771
+ },
772
+ ["id"]
773
+ );
770
774
  if (caves.length === 0) {
771
775
  return session.text(".noMsgTraced");
772
776
  }
773
- let response = session.text(".msgListHeader") + "\n";
774
- for (const cave of caves) {
775
- response += session.text(".msgListItem", [cave.id, formatDate(cave.createTime)]) + "\n";
776
- }
777
- return response;
777
+ const ids = caves.map((cave) => cave.id).join(" | ");
778
+ return session.text(".msgListHeader") + "\n" + ids;
778
779
  }
779
780
  async function getCave(ctx, session, cfg, id) {
780
781
  if (!session.guildId) {
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.18.4",
4
+ "version": "1.18.6",
5
5
  "main": "lib/index.cjs",
6
6
  "typings": "lib/index.d.ts",
7
7
  "type": "module",