koishi-plugin-echo-cave 1.29.7 → 1.29.9

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
@@ -20,6 +20,10 @@
20
20
  - 🔒 **管理员保护**:可配置管理员消息保护
21
21
  - 📏 **媒体限制**:支持配置媒体文件大小限制
22
22
  - 👥 **转发消息用户选择**:支持从转发消息中选择相关用户进行绑定
23
+ - 🎯 **按人随机抽取**:支持通过 `@用户` 或用户 ID 定向随机抽取该用户相关的回声洞,且不影响全局抽取权重
24
+ - 🧭 **转发绑定体验优化**:转发消息关联用户的详细输入指南仅在用户首次成功完成选择前显示,选择完成或超时后会尝试撤回提示消息
25
+ - 🤖 **特殊转发用户处理**:可配置在检测到转发记录中包含特殊用户 `1094950020` 时直接拒绝存储,或要求二次确认后再存储
26
+ - 🛠️ **回声洞 ID 重排**:提供管理员维护命令,可在写入备份后安全重排现有回声洞 ID
23
27
  - ⚖️ **加权随机抽取**:根据消息被抽取次数动态调整抽取概率,被抽取次数越多,概率越低。使用公式:
24
28
  ```
25
29
  权重 = 1 / (1 + drawCount * α)
@@ -33,6 +37,7 @@
33
37
  |-------------------------------|------------------|-----------------|
34
38
  | `cave` | 随机获取一条回声洞消息 | 所有人 |
35
39
  | `cave <id>` | 获取特定 ID 的回声洞消息 | 所有人 |
40
+ | `cave <@用户/用户ID>` | 随机获取与该用户相关的一条回声洞消息(不计入抽取次数) | 所有人 |
36
41
  | `cave.echo [...userIds]` | 将引用的消息存入回声洞 | 所有人 |
37
42
  | `cave.drop <id>` | 删除特定 ID 的回声洞消息 | 消息存储者、原始发送者或管理员 |
38
43
  | `cave.listen` | 获取自己投稿的回声洞列表 | 所有人 |
@@ -41,6 +46,7 @@
41
46
  | `cave.search <id>` | 搜索特定 ID 的回声洞消息 | 所有人 |
42
47
  | `cave.bind <id> <...userIds>` | 将用户绑定到特定 ID 的回声洞 | 所有人 |
43
48
  | `cave.rank [period]` | 查看回声洞排行榜,支持多种时间段 | 所有人 |
49
+ | `cave.admin.reindex` | 安全重排所有现有回声洞 ID,并先写入备份 | 管理员(私聊) |
44
50
 
45
51
  ## 🚀 使用指南
46
52
 
@@ -70,19 +76,25 @@ npm install koishi-plugin-echo-cave
70
76
  | `rankingTopCount` | number | `10` | 排行榜显示的用户数量 |
71
77
  | `forwardSelectTimeout` | number | `20` | 转发消息用户选择超时时间(秒) |
72
78
  | `enableForwardUserSelection` | boolean | `true` | 启用转发消息用户选择功能 |
79
+ | `autoBindSingleForwardUser` | boolean | `false` | 转发消息仅识别到一个用户时,是否默认自动绑定该用户 |
80
+ | `forwardSpecialUserHandlingMode` | `'ignore' \| 'reject' \| 'confirm'` | `'ignore'` | 检测到转发消息中包含用户 `1094950020` 时的处理方式:忽略、提醒后拒绝存储、或提醒并要求确认后再存储 |
73
81
  | `alpha` | number | `0.2` | 加权随机抽取的调整因子,控制抽取次数对概率的影响程度,值越大影响越明显 |
74
82
 
75
83
  ## 📝 注意事项
76
84
 
77
85
  - 插件仅在群聊中可用,私聊模式下无法正常工作
78
86
  - 使用 `cave.echo` 命令前必须先引用一条消息
87
+ - 使用 `cave @用户`、`cave <用户ID>` 可定向随机抽取该用户相关的回声洞,这类抽取不会增加 `drawCount`
79
88
  - 删除消息权限可通过配置项灵活控制
80
89
  - 存储的消息会保留原始发送者信息
81
90
  - 支持媒体文件大小限制,可通过配置项调整
82
91
  - 自动检测并避免存储重复消息
83
92
  - 支持嵌套转发消息的递归处理
84
93
  - 转发消息可选择相关用户进行绑定,超时后自动跳过
85
- - 可通过配置项禁用转发消息用户选择功能或调整超时时间
94
+ - 转发消息关联用户的详细示例只会在用户首次成功完成一次选择前显示;如果只是超时,则下次仍会显示
95
+ - 可通过配置项禁用转发消息用户选择、开启单用户自动绑定,或配置检测到特殊用户 `1094950020` 时的处理模式
96
+ - `cave.admin.reindex` 会先在 `logs/` 下写入备份文件,再执行 ID 重排;建议仅在单实例维护时段执行
97
+ - 如果重排前备份写入失败,命令会直接终止,不会开始改写数据库
86
98
 
87
99
  ## 🤝 贡献指南
88
100
 
@@ -1,5 +1,7 @@
1
1
  import { Schema } from 'koishi';
2
2
  export type SendFailureHandlingMode = 'auto-delete' | 'daily-report' | 'ignore';
3
+ export type OversizedMediaCleanupMode = 'delete-cave' | 'keep-cave';
4
+ export type ForwardSpecialUserHandlingMode = 'ignore' | 'reject' | 'confirm';
3
5
  export interface Config {
4
6
  adminMessageProtection?: boolean;
5
7
  adminIds?: string[];
@@ -16,6 +18,8 @@ export interface Config {
16
18
  rankingTopCount?: number;
17
19
  forwardSelectTimeout?: number;
18
20
  enableForwardUserSelection?: boolean;
21
+ autoBindSingleForwardUser?: boolean;
22
+ forwardSpecialUserHandlingMode?: ForwardSpecialUserHandlingMode;
19
23
  alpha?: number;
20
24
  mediaStorage?: 'local' | 's3';
21
25
  s3Bucket?: string;
@@ -29,5 +33,6 @@ export interface Config {
29
33
  sendFailureHandlingMode?: SendFailureHandlingMode;
30
34
  sendFailureSummaryAdminId?: string;
31
35
  sendFailureSummaryTime?: string;
36
+ oversizedMediaCleanupMode?: OversizedMediaCleanupMode;
32
37
  }
33
38
  export declare const Config: Schema<Config>;
@@ -1,6 +1,8 @@
1
1
  import { Config } from '../../config/config';
2
2
  import { Context, Session } from 'koishi';
3
+ export declare function getCaveMaintenanceMessage(session: Session): string | null;
3
4
  export declare function mergeCavesBetweenChannels(ctx: Context, session: Session, cfg: Config, sourceChannelId: string, targetChannelId: string, keepSourceOption?: string): Promise<string>;
4
5
  export declare function migrateLegacyLocalMedia(ctx: Context, session: Session, cfg: Config): Promise<string>;
5
6
  export declare function migrateMediaToS3(ctx: Context, session: Session, cfg: Config, keepLocalOption?: string): Promise<string>;
6
7
  export declare function inspectMediaRefsForMigration(ctx: Context, session: Session, cfg: Config, idRangesOption?: string): Promise<string>;
8
+ export declare function reindexCaveIds(ctx: Context, session: Session, cfg: Config): Promise<string>;
@@ -2,4 +2,4 @@ import { Config } from '../../config/config';
2
2
  import { Context, Session } from 'koishi';
3
3
  export declare function getCaveListByUser(ctx: Context, session: Session): Promise<string>;
4
4
  export declare function getCaveListByOriginUser(ctx: Context, session: Session): Promise<string>;
5
- export declare function getCave(ctx: Context, session: Session, cfg: Config, id: number): Promise<string>;
5
+ export declare function getCave(ctx: Context, session: Session, cfg: Config, target?: string): Promise<string>;