koishi-plugin-imx 2.2.3 → 2.2.5

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
@@ -1,34 +1,52 @@
1
1
  # koishi-plugin-imx
2
2
 
3
- 这是一个将 IMX Bot 功能移植到 Koishi 平台的插件,提供丰富的聊天机器人功能。
3
+ [![npm](https://img.shields.io/npm/v/koishi-plugin-imx)](https://www.npmjs.com/package/koishi-plugin-imx)
4
+ [![license](https://img.shields.io/npm/l/koishi-plugin-imx)](https://github.com/sysfox/koishi-plugin-imx/blob/main/LICENSE)
4
5
 
5
- ## 功能特性
6
-
7
- ### 🔄 复读机
8
- - 自动检测连续重复的消息并进行复读
9
- - 支持复读打断机制
6
+ 一个功能丰富的 Koishi 聊天机器人插件,集成了 Mix-Space、Bilibili、GitHub 等多种服务,为你的聊天机器人提供强大的功能扩展。
10
7
 
11
- ### 🛠️ 工具命令
12
- - `tool.ip <ip>` - 查询 IP 地址信息
13
- - `tool.base64 <text>` - Base64 编码/解码(使用 `-d` 参数解码)
14
- - `tool.md5 <text>` - 计算 MD5 哈希值
8
+ ## 功能特性
15
9
 
16
10
  ### 🌸 MX Space 集成
17
- - 支持 MX Space API 集成
18
- - 自动早安/晚安问候(可配置时间)
19
- - 新成员加入欢迎
20
- - `hitokoto` - 获取一言
21
-
11
+ - **Webhook 事件推送**: 支持博客文章、说说、评论等事件的实时推送
12
+ - **定时问候**: 自动早安/晚安问候,支持 cron 表达式自定义时间
13
+ - **新成员欢迎**: 自动欢迎新加入群组的成员
14
+ - **评论回复**: 支持博客评论的互动回复功能
15
+ - **博客数据查询**: 获取博客统计信息和最新动态
22
16
 
23
17
  ### 📺 Bilibili 直播监控
24
- - 监控指定 B站直播间开播状态
25
- - 开播时自动推送通知到指定频道
26
- - `bili.status` - 查看当前直播状态
27
-
28
- ### 🐙 GitHub Webhook
29
- - 支持 GitHub 事件推送通知
30
- - 监控 Push、Issue、Pull Request 事件
31
- - `github.test` - 测试 GitHub 通知功能
18
+ - **多房间监控**: 支持同时监控多个直播间的开播状态
19
+ - **智能推送**: 开播时自动推送通知到指定频道
20
+ - **状态查询**: `bili.status` 命令查看当前所有监控房间的直播状态
21
+ - **广播模式**: 支持向所有联系人广播开播通知
22
+
23
+ ### 🐙 GitHub 集成
24
+ - **Webhook 支持**: 监听 GitHub 仓库的各种事件
25
+ - **多事件类型**: 支持 Push、Issue、Pull Request、工作流等事件
26
+ - **状态查询**: `github.status` 命令查看仓库状态
27
+ - **安全验证**: 支持 webhook 签名验证
28
+
29
+ ### 🛠️ 实用工具命令
30
+ - **哈希计算**: `tools.md5`、`tools.sha256` - 计算文本哈希值
31
+ - **IP 查询**: `tools.ip <ip>` - 查询 IP 地址的详细信息
32
+ - **时间戳转换**: `tools.timestamp [timestamp]` - 时间戳与可读时间互转
33
+ - **Base64 编解码**: `tools.base64 <encode|decode> <text>` - 文本编解码
34
+ - **随机生成**: `tools.random [min] [max]` - 生成指定范围的随机数
35
+ - **UUID 生成**: `tools.uuid` - 生成标准 UUID
36
+ - **颜色生成**: `tools.color` - 生成随机颜色及其各种格式
37
+ - **一言**: `tools.hitokoto` 或 `一言` - 获取随机一言
38
+ - **短链接**: `tools.shorturl <url>` - 生成短链接
39
+ - **二维码**: `tools.qrcode <text>` - 生成二维码图片
40
+
41
+ ### 🔄 智能复读机
42
+ - **智能触发**: 自动检测连续重复的消息并按概率复读
43
+ - **复读打断**: 连续复读到一定次数后自动打断
44
+ - **可配置参数**: 支持自定义触发阈值、复读概率、打断阈值
45
+
46
+ ### 🚀 强大的广播系统
47
+ - **全局广播**: 支持向所有联系人发送消息
48
+ - **精准控制**: 支持排除特定频道的广播功能
49
+ - **详细统计**: 提供发送统计和详细日志记录
32
50
 
33
51
  ## 安装
34
52
 
@@ -42,6 +60,12 @@ npm install koishi-plugin-imx
42
60
  yarn add koishi-plugin-imx
43
61
  ```
44
62
 
63
+ 也可以使用 pnpm:
64
+
65
+ ```bash
66
+ pnpm add koishi-plugin-imx
67
+ ```
68
+
45
69
  ## 配置
46
70
 
47
71
  在 Koishi 配置文件中添加插件配置:
@@ -53,88 +77,294 @@ plugins:
53
77
  mxSpace:
54
78
  baseUrl: "https://your-mx-space-api.com"
55
79
  token: "your-mx-space-token"
56
- watchChannels: ["channel-id-1", "channel-id-2"]
57
- enableGreeting: true
80
+ webhook:
81
+ secret: "your-webhook-secret"
82
+ path: "/mx-space/webhook"
83
+ watchChannels: ["channel-id-1"]
84
+ broadcastToAll: false
85
+ excludeChannels: []
86
+ greeting:
87
+ enabled: true
88
+ channels: ["channel-id-1", "channel-id-2"]
89
+ morningTime: "0 0 6 * * *" # 每天早上6点
90
+ eveningTime: "0 0 22 * * *" # 每天晚上10点
91
+ broadcastToAll: false
92
+ excludeChannels: []
93
+ commands:
94
+ enabled: true
95
+ replyPrefix: "来自 Mix Space 的"
96
+ welcomeNewMember:
97
+ enabled: true
98
+ channels: ["group-channel-id"]
99
+ commentReply:
100
+ enabled: true
101
+ channels: ["channel-id-1"]
58
102
 
59
103
  # Bilibili 配置
60
104
  bilibili:
61
105
  enabled: true
62
- liveRoomId: "123456"
106
+ roomIds: [123456, 789012] # 监控的直播间ID列表
63
107
  watchChannels: ["channel-id"]
64
- checkInterval: 60000
65
- atAll: false
108
+ checkInterval: 5 # 检查间隔(分钟)
109
+ broadcastToAll: false
110
+ excludeChannels: []
66
111
 
67
112
  # GitHub 配置
68
113
  github:
69
114
  enabled: true
70
- webhookSecret: "your-webhook-secret"
71
- webhookPort: 3000
72
- watchChannels: ["channel-id"]
115
+ webhook:
116
+ secret: "your-github-webhook-secret"
117
+ path: "/github/webhook"
118
+ watchChannels: ["channel-id"]
119
+ broadcastToAll: false
120
+ excludeChannels: []
73
121
 
74
- # 错误通知配置
75
- errorNotify:
76
- enabled: true
122
+ # 共享功能配置
123
+ shared:
124
+ errorNotify:
125
+ enabled: true
126
+ channels: ["admin-channel-id"]
127
+ repeater:
128
+ enabled: true
129
+ threshold: 3 # 触发复读的次数
130
+ chance: 0.5 # 复读概率
131
+ breakThreshold: 12 # 打断阈值
132
+ tools:
133
+ enabled: true
77
134
  ```
78
135
 
79
136
  ## 配置说明
80
137
 
81
138
  ### MX Space 配置
82
- - `baseUrl`: MX Space API 地址
83
- - `token`: API 访问令牌
84
- - `watchChannels`: 监听的频道ID列表
85
- - `enableGreeting`: 是否启用自动问候功能
86
139
 
140
+ - `baseUrl`: MX Space API 地址(必填)
141
+ - `token`: API 访问令牌
142
+ - **Webhook 配置**:
143
+ - `secret`: Webhook 验证密钥
144
+ - `path`: Webhook 接收路径
145
+ - `watchChannels`: 接收推送的频道ID列表
146
+ - `broadcastToAll`: 是否广播到所有联系人
147
+ - `excludeChannels`: 广播时排除的频道列表
148
+ - **问候功能**:
149
+ - `enabled`: 是否启用自动问候
150
+ - `channels`: 发送问候消息的频道
151
+ - `morningTime`/`eveningTime`: 问候时间(cron 格式)
152
+ - **其他功能**: 新成员欢迎、评论回复等
87
153
 
88
154
  ### Bilibili 配置
155
+
89
156
  - `enabled`: 是否启用 Bilibili 监控
90
- - `liveRoomId`: 要监控的直播间ID
157
+ - `roomIds`: 要监控的直播间ID列表(支持多个)
91
158
  - `watchChannels`: 推送通知的频道ID列表
92
- - `checkInterval`: 检查间隔(毫秒)
93
- - `atAll`: 开播时是否 @全体成员
159
+ - `checkInterval`: 检查间隔(分钟,1-60)
160
+ - `broadcastToAll`: 开播时是否广播到所有联系人
161
+ - `excludeChannels`: 广播时排除的频道列表
94
162
 
95
163
  ### GitHub 配置
164
+
96
165
  - `enabled`: 是否启用 GitHub Webhook
97
- - `webhookSecret`: GitHub Webhook 密钥
98
- - `webhookPort`: Webhook 监听端口
99
- - `watchChannels`: 推送通知的频道ID列表
166
+ - **Webhook 配置**:
167
+ - `secret`: GitHub Webhook 密钥
168
+ - `path`: Webhook 接收路径
169
+ - `watchChannels`: 推送通知的频道ID列表
170
+ - `broadcastToAll`: 是否广播到所有联系人
171
+ - `excludeChannels`: 广播时排除的频道列表
100
172
 
101
- ## 使用示例
173
+ ### 共享功能配置
174
+
175
+ - **错误通知**: 系统错误的通知设置
176
+ - **复读机**: 智能复读功能的参数调整
177
+ - **工具命令**: 实用工具命令的开关
178
+
179
+ ## 命令使用
102
180
 
103
181
  ### 工具命令
182
+
183
+ ```bash
184
+ # 基础工具
185
+ tools.md5 hello world # 计算 MD5 哈希
186
+ tools.sha256 hello world # 计算 SHA256 哈希
187
+ tools.ip 8.8.8.8 # 查询 IP 信息
188
+ tools.timestamp # 获取当前时间戳
189
+ tools.timestamp 1640995200 # 转换时间戳
190
+
191
+ # 编码工具
192
+ tools.base64 encode hello # Base64 编码
193
+ tools.base64 decode aGVsbG8= # Base64 解码
194
+
195
+ # 生成工具
196
+ tools.random # 生成随机数 (1-100)
197
+ tools.random 1 10 # 生成 1-10 的随机数
198
+ tools.uuid # 生成 UUID
199
+ tools.color # 生成随机颜色
200
+
201
+ # 网络工具
202
+ tools.hitokoto # 获取一言
203
+ 一言 # 获取一言(别名)
204
+ tools.shorturl https://... # 生成短链接
205
+ tools.qrcode hello world # 生成二维码
104
206
  ```
105
- tool.ip 8.8.8.8
106
- tool.base64 Hello World
107
- tool.base64 -d SGVsbG8gV29ybGQ=
108
- tool.md5 Hello World
207
+
208
+ ### 监控命令
209
+
210
+ ```bash
211
+ bili.status # 查看直播状态
212
+ github.status # 查看仓库状态
109
213
  ```
110
214
 
111
- ### 其他命令
215
+ ## 使用示例
216
+
217
+ ### 工具命令使用
218
+
219
+ ```bash
220
+ # IP 查询
221
+ tools.ip 8.8.8.8
222
+
223
+ # 编码解码
224
+ tools.base64 encode Hello World
225
+ tools.base64 decode SGVsbG8gV29ybGQ=
226
+
227
+ # 哈希计算
228
+ tools.md5 Hello World
229
+ tools.sha256 Hello World
230
+
231
+ # 时间工具
232
+ tools.timestamp
233
+ tools.timestamp 1640995200
234
+
235
+ # 随机生成
236
+ tools.random 1 100
237
+ tools.uuid
238
+ tools.color
112
239
  ```
113
- hitokoto
114
- bili.status
115
- github.test
240
+
241
+ ### MX Space 事件推送
242
+
243
+ 当 MX Space 博客有新内容时,插件会自动推送通知:
244
+
245
+ - 📝 新博客文章发布
246
+ - 💭 新说说发布
247
+ - 💬 博客评论更新
248
+ - 📊 博客数据统计
249
+
250
+ ### Bilibili 直播监控
251
+
252
+ 支持监控多个直播间,当主播开播时自动推送:
253
+
254
+ ```text
255
+ 🔴 直播开始了!
256
+ 🎯 房间号:123456
257
+ 👤 主播:某某主播
258
+ 🎬 标题:今天直播XXX内容
259
+ 🔗 链接:https://live.bilibili.com/123456
116
260
  ```
117
261
 
118
262
  ## 开发
119
263
 
120
- 1. 克隆仓库
121
- 2. 安装依赖:`npm install`
122
- 3. 构建:`npm run build`
123
- 4. 开发模式:`npm run dev`
264
+ ### 本地开发
265
+
266
+ ```bash
267
+ # 克隆仓库
268
+ git clone https://github.com/sysfox/koishi-plugin-imx.git
269
+ cd koishi-plugin-imx
270
+
271
+ # 安装依赖
272
+ pnpm install
273
+
274
+ # 开发模式(自动编译)
275
+ pnpm run dev
276
+
277
+ # 构建
278
+ pnpm run build
279
+ ```
280
+
281
+ ### 项目结构
282
+
283
+ ```text
284
+ src/
285
+ ├── index.ts # 主入口文件
286
+ ├── constants/ # 常量定义
287
+ ├── modules/ # 功能模块
288
+ │ ├── mx-space.ts # MX Space 集成
289
+ │ ├── bilibili.ts # Bilibili 监控
290
+ │ └── github.ts # GitHub 集成
291
+ ├── shared/ # 共享功能
292
+ │ ├── repeater.ts # 复读机
293
+ │ └── commands/ # 命令模块
294
+ ├── types/ # 类型定义
295
+ ├── utils/ # 工具函数
296
+ └── debug/ # 调试工具
297
+ ```
298
+
299
+ ## 部署指南
300
+
301
+ ### Webhook 配置
302
+
303
+ 如果你需要使用 MX Space 或 GitHub 的 Webhook 功能,需要:
304
+
305
+ 1. 确保你的 Koishi 实例可以从外网访问
306
+ 2. 配置正确的 Webhook 路径和密钥
307
+ 3. 在对应服务中设置 Webhook URL
308
+
309
+ **MX Space Webhook URL**: `https://your-domain.com/mx-space/webhook`
310
+ **GitHub Webhook URL**: `https://your-domain.com/github/webhook`
311
+
312
+ ### 环境要求
124
313
 
125
- ## IMX Bot 迁移
314
+ - Node.js 16+
315
+ - Koishi 4.15.0+
316
+ - 稳定的网络连接(用于 API 请求)
126
317
 
127
- 如果你之前使用的是 IMX Bot,可以参考以下迁移步骤:
318
+ ## 常见问题
128
319
 
129
- 1. 安装此插件
130
- 2. 将原有的配置转换为 Koishi 配置格式
131
- 3. 确保所有依赖的服务(如 MX Space、OpenAI 等)配置正确
132
- 4. 测试各项功能是否正常工作
320
+ ### Q: 为什么 Bilibili 直播监控不工作?
321
+
322
+ A: 请检查:
323
+
324
+ 1. 直播间ID是否正确
325
+ 2. 网络连接是否正常
326
+ 3. 检查间隔设置是否合理(建议 1-10 分钟)
327
+
328
+ ### Q: MX Space Webhook 没有收到推送?
329
+
330
+ A: 请确认:
331
+
332
+ 1. MX Space 中的 Webhook URL 配置正确
333
+ 2. Webhook 密钥匹配
334
+ 3. Koishi 服务可以从外网访问
335
+
336
+ ### Q: 如何自定义问候时间?
337
+
338
+ A: 在配置中使用 cron 表达式:
339
+
340
+ ```yaml
341
+ morningTime: "0 0 8 * * *" # 每天早上8点
342
+ eveningTime: "0 30 21 * * *" # 每天晚上9点30分
343
+ ```
344
+
345
+ ## 版本历史
346
+
347
+ 查看 [CHANGELOG.md](./CHANGELOG.md) 了解详细的版本更新记录。
348
+
349
+ ## 相关链接
350
+
351
+ - [Koishi 官网](https://koishi.chat)
352
+ - [MX Space](https://github.com/mx-space)
353
+ - [插件 GitHub 仓库](https://github.com/sysfox/koishi-plugin-imx)
133
354
 
134
355
  ## 许可证
135
356
 
136
- MIT License
357
+ [MIT License](./LICENSE)
137
358
 
138
359
  ## 贡献
139
360
 
140
- 欢迎提交 Issue 和 Pull Request!
361
+ 欢迎提交 Issue 和 Pull Request!
362
+
363
+ 在提交代码前,请确保:
364
+
365
+ 1. 代码符合项目的编码规范
366
+ 2. 添加了必要的测试
367
+ 3. 更新了相关文档
368
+ 4. 提交信息清晰明确
369
+
370
+ 感谢所有贡献者的支持!
@@ -374,8 +374,8 @@ function setupCommands(ctx, config, logger) {
374
374
  .subcommand('.stat', '获取 MX Space 统计信息')
375
375
  .action(async ({ session }) => {
376
376
  try {
377
- const data = await apiClient.aggregate.getStat();
378
- const { posts, notes, comments, links, says, recently, todayIpAccessCount, todayMaxOnline, todayOnlineTotal, unreadComments, linkApply, callTime, online } = data;
377
+ const aggregateData = await (0, mx_api_1.getMxSpaceAggregateData)(ctx, config);
378
+ const { posts, notes, comments, links, says, recently, todayIpAccessCount, todayMaxOnline, todayOnlineTotal, unreadComments, linkApply, callTime, online } = aggregateData.stat;
379
379
  const replyPrefix = config.commands?.replyPrefix || '来自 Mix Space 的';
380
380
  return `📊 ${replyPrefix}统计信息:\n\n` +
381
381
  `📝 文章 ${posts} 篇,📔 记录 ${notes} 篇\n` +
@@ -1,11 +1,11 @@
1
1
  import { Context } from 'koishi';
2
2
  export declare enum BusinessEvents {
3
- POST_CREATE = "post_create",
4
- POST_UPDATE = "post_update",
5
- NOTE_CREATE = "note_create",
6
- COMMENT_CREATE = "comment_create",
7
- LINK_APPLY = "link_apply",
8
- SAY_CREATE = "say_create",
9
- RECENTLY_CREATE = "recently_create"
3
+ POST_CREATE = "POST_CREATE",
4
+ POST_UPDATE = "POST_UPDATE",
5
+ NOTE_CREATE = "NOTE_CREATE",
6
+ COMMENT_CREATE = "COMMENT_CREATE",
7
+ LINK_APPLY = "LINK_APPLY",
8
+ SAY_CREATE = "SAY_CREATE",
9
+ RECENTLY_CREATE = "RECENTLY_CREATE"
10
10
  }
11
11
  export declare function handleMxSpaceEvent(ctx: Context, config: any, type: string, payload: any, logger: any): Promise<void>;
@@ -15,13 +15,13 @@ const broadcast_1 = require("./broadcast");
15
15
  // MX Space 事件类型
16
16
  var BusinessEvents;
17
17
  (function (BusinessEvents) {
18
- BusinessEvents["POST_CREATE"] = "post_create";
19
- BusinessEvents["POST_UPDATE"] = "post_update";
20
- BusinessEvents["NOTE_CREATE"] = "note_create";
21
- BusinessEvents["COMMENT_CREATE"] = "comment_create";
22
- BusinessEvents["LINK_APPLY"] = "link_apply";
23
- BusinessEvents["SAY_CREATE"] = "say_create";
24
- BusinessEvents["RECENTLY_CREATE"] = "recently_create";
18
+ BusinessEvents["POST_CREATE"] = "POST_CREATE";
19
+ BusinessEvents["POST_UPDATE"] = "POST_UPDATE";
20
+ BusinessEvents["NOTE_CREATE"] = "NOTE_CREATE";
21
+ BusinessEvents["COMMENT_CREATE"] = "COMMENT_CREATE";
22
+ BusinessEvents["LINK_APPLY"] = "LINK_APPLY";
23
+ BusinessEvents["SAY_CREATE"] = "SAY_CREATE";
24
+ BusinessEvents["RECENTLY_CREATE"] = "RECENTLY_CREATE";
25
25
  })(BusinessEvents || (exports.BusinessEvents = BusinessEvents = {}));
26
26
  async function handleMxSpaceEvent(ctx, config, type, payload, logger) {
27
27
  logger.info(`处理 MX Space 事件: ${type}`);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-imx",
3
3
  "description": "Mix-Space Bot for Koishi - 集成多种功能的聊天机器人插件",
4
- "version": "2.2.3",
4
+ "version": "2.2.5",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
@@ -44,16 +44,16 @@
44
44
  "@koishijs/plugin-server": "^3.2.7",
45
45
  "@mx-space/api-client": "^1.17.0",
46
46
  "@mx-space/webhook": "^0.5.0",
47
- "@tanstack/query-core": "^4.40.0",
47
+ "@tanstack/query-core": "^5.0.0",
48
48
  "axios": "^1.10.0",
49
- "chalk": "^4.1.2",
50
- "consola": "^2.15.3",
51
- "cron": "^2.4.4",
49
+ "chalk": "^5.0.0",
50
+ "consola": "^3.0.0",
51
+ "cron": "^4.0.0",
52
52
  "dayjs": "^1.11.13",
53
53
  "lodash": "^4.17.21",
54
- "marked": "^5.1.2",
54
+ "marked": "^16.0.0",
55
55
  "randomcolor": "^0.6.2",
56
- "remove-markdown": "^0.5.5",
56
+ "remove-markdown": "^0.6.0",
57
57
  "sanitize-html": "^2.17.0",
58
58
  "socket.io-client": "^4.8.1",
59
59
  "zod": "^3.25.76"
@@ -69,6 +69,11 @@
69
69
  },
70
70
  "scripts": {
71
71
  "build": "tsc -b",
72
- "dev": "tsc -b --watch"
72
+ "dev": "tsc -b --watch",
73
+ "release": "node scripts/release.js",
74
+ "release:patch": "node scripts/release.js patch",
75
+ "release:minor": "node scripts/release.js minor",
76
+ "release:major": "node scripts/release.js major",
77
+ "test:release": "node scripts/test-release.js"
73
78
  }
74
79
  }