@izhimu/qq 0.2.0 → 0.2.2
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/LICENSE +21 -21
- package/README.md +384 -388
- package/dist/src/adapters/message.js +16 -3
- package/dist/src/channel.d.ts +1 -1
- package/dist/src/channel.js +14 -0
- package/dist/src/core/dispatch.js +19 -46
- package/dist/src/types/index.d.ts +3 -6
- package/dist/src/utils/markdown.d.ts +6 -6
- package/dist/src/utils/markdown.js +72 -66
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,388 +1,384 @@
|
|
|
1
|
-
# @izhimu/qq
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
4
|
-
<a href="https://opensource.org/licenses/MIT">
|
|
5
|
-
<img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License: MIT">
|
|
6
|
-
</a>
|
|
7
|
-
<a href="https://docs.openclaw.ai/">
|
|
8
|
-
<img src="https://img.shields.io/badge/OpenClaw-Plugin-blueviolet.svg" alt="OpenClaw">
|
|
9
|
-
</a>
|
|
10
|
-
<a href="https://github.com/botuniverse/onebot-11">
|
|
11
|
-
<img src="https://img.shields.io/badge/Protocol-OneBot_11-yellow.svg" alt="Protocol">
|
|
12
|
-
</a>
|
|
13
|
-
<a href="https://www.typescriptlang.org/">
|
|
14
|
-
<img src="https://img.shields.io/badge/Language-TypeScript-blue.svg" alt="TypeScript">
|
|
15
|
-
</a>
|
|
16
|
-
</p>
|
|
17
|
-
|
|
18
|
-
<p align="center">
|
|
19
|
-
<strong>QQ Channel Plugin for OpenClaw</strong>
|
|
20
|
-
</p>
|
|
21
|
-
|
|
22
|
-
<p align="center">
|
|
23
|
-
通过 NapCat WebSocket API 连接 QQ 机器人,支持私聊、群聊、图片、回复等多种消息类型
|
|
24
|
-
</p>
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 目录
|
|
29
|
-
|
|
30
|
-
- [功能特性](#功能特性)
|
|
31
|
-
- [安装](#安装)
|
|
32
|
-
- [快速开始](#快速开始)
|
|
33
|
-
- [配置](#配置)
|
|
34
|
-
- [使用方法](#使用方法)
|
|
35
|
-
- [架构设计](#架构设计)
|
|
36
|
-
- [API 文档](#api-文档)
|
|
37
|
-
- [开发指南](#开发指南)
|
|
38
|
-
- [故障排查](#故障排查)
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 功能特性
|
|
43
|
-
|
|
44
|
-
- **多渠道支持** - 同时支持 QQ 私聊和群聊
|
|
45
|
-
- **消息类型** - 文本、@提及、图片、表情、语音、文件、回复
|
|
46
|
-
- **实时通信** - WebSocket 全双工连接,支持自动重连
|
|
47
|
-
- **心跳监测** - 内置健康检查和连接状态监控
|
|
48
|
-
- **交互式配置** - 提供向导式配置界面
|
|
49
|
-
- **TypeScript** - 完整的类型定义和类型安全
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## 安装
|
|
54
|
-
|
|
55
|
-
### 前提条件
|
|
56
|
-
|
|
57
|
-
1. 安装 [OpenClaw](https://docs.openclaw.ai/) >= 2026.2.1
|
|
58
|
-
2. 安装并配置 [NapCat](https://github.com/NapNeko/NapCatQQ) WebSocket 服务
|
|
59
|
-
|
|
60
|
-
### 通过 OpenClaw CLI 安装
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
# 安装插件
|
|
64
|
-
openclaw plugins install @izhimu/qq
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### 本地开发安装
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# 克隆仓库
|
|
71
|
-
git clone <repository-url>
|
|
72
|
-
cd openclaw-channel-qq
|
|
73
|
-
|
|
74
|
-
# 安装依赖
|
|
75
|
-
npm install
|
|
76
|
-
|
|
77
|
-
# 构建项目
|
|
78
|
-
npm run build
|
|
79
|
-
|
|
80
|
-
# 安装到 OpenClaw
|
|
81
|
-
openclaw plugins install /path/to/openclaw-channel-qq
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 快速开始
|
|
87
|
-
|
|
88
|
-
### 1. 配置 NapCat
|
|
89
|
-
|
|
90
|
-
在 NapCat 的 `config.yml` 中启用 WebSocket:
|
|
91
|
-
|
|
92
|
-
```yaml
|
|
93
|
-
ws:
|
|
94
|
-
servers:
|
|
95
|
-
- url: ws://0.0.0.0:3001
|
|
96
|
-
token: "" # 如需认证请设置
|
|
97
|
-
enableHeart: true
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### 2. 配置 OpenClaw
|
|
101
|
-
|
|
102
|
-
运行交互式配置向导:
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
openclaw onboard
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
或手动编辑配置:
|
|
109
|
-
|
|
110
|
-
```json
|
|
111
|
-
{
|
|
112
|
-
"channels": {
|
|
113
|
-
"qq": {
|
|
114
|
-
"wsUrl": "ws://127.0.0.1:3001",
|
|
115
|
-
"accessToken": "",
|
|
116
|
-
"enabled": true
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### 3. 启动 Gateway
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
openclaw gateway restart
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 配置
|
|
131
|
-
|
|
132
|
-
### 配置选项
|
|
133
|
-
|
|
134
|
-
| 属性 | 类型 | 必填 | 默认值 | 描述 |
|
|
135
|
-
|------|------|------|--------|------|
|
|
136
|
-
| `wsUrl` | `string` | 是 | - | NapCat WebSocket 地址 |
|
|
137
|
-
| `accessToken` | `string` | 否 | `""` | 访问令牌(如配置了认证) |
|
|
138
|
-
| `enabled` | `boolean` | 否 | `true` | 是否启用该账号 |
|
|
139
|
-
|
|
140
|
-
### 配置示例
|
|
141
|
-
|
|
142
|
-
```json
|
|
143
|
-
{
|
|
144
|
-
"channels": {
|
|
145
|
-
"qq": {
|
|
146
|
-
"wsUrl": "ws://127.0.0.1:3001",
|
|
147
|
-
"accessToken": "your-token",
|
|
148
|
-
"enabled": true
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 使用方法
|
|
157
|
-
|
|
158
|
-
### 发送消息
|
|
159
|
-
|
|
160
|
-
```bash
|
|
161
|
-
# 发送私聊消息
|
|
162
|
-
openclaw message send "你好!" --to qq:private:123456789
|
|
163
|
-
|
|
164
|
-
# 发送群消息
|
|
165
|
-
openclaw message send "大家好!" --to qq:group:123456
|
|
166
|
-
|
|
167
|
-
# 带回复的消息
|
|
168
|
-
openclaw message send "回复你的消息" --to qq:private:123456789 --reply-to <message-id>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 检查状态
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
# 查看频道状态
|
|
175
|
-
openclaw channels
|
|
176
|
-
|
|
177
|
-
# 查看日志
|
|
178
|
-
openclaw logs --channel qq
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### 消息目标格式
|
|
182
|
-
|
|
183
|
-
| 类型 | 格式 | 示例 |
|
|
184
|
-
|------|------|------|
|
|
185
|
-
| 私聊 | `private:<QQ号>` | `qq:private:123456789` |
|
|
186
|
-
| 群聊 | `group:<群号>` | `qq:group:123456` |
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## 架构设计
|
|
191
|
-
|
|
192
|
-
### 项目结构
|
|
193
|
-
|
|
194
|
-
```
|
|
195
|
-
openclaw-channel-qq/
|
|
196
|
-
├── src/
|
|
197
|
-
│ ├── channel.ts
|
|
198
|
-
│ ├── core/
|
|
199
|
-
│ │ ├── connection.ts
|
|
200
|
-
│ │
|
|
201
|
-
│
|
|
202
|
-
│ │
|
|
203
|
-
│
|
|
204
|
-
│
|
|
205
|
-
│
|
|
206
|
-
│ ├── types/
|
|
207
|
-
│ │ └──
|
|
208
|
-
│
|
|
209
|
-
│
|
|
210
|
-
|
|
211
|
-
│
|
|
212
|
-
│
|
|
213
|
-
|
|
214
|
-
├──
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
|
253
|
-
|
|
254
|
-
| `
|
|
255
|
-
| `
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
|
314
|
-
|
|
315
|
-
| `
|
|
316
|
-
| `
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
<p align="center">
|
|
387
|
-
如有问题或建议,欢迎提交 Issue 或 PR
|
|
388
|
-
</p>
|
|
1
|
+
# @izhimu/qq
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://opensource.org/licenses/MIT">
|
|
5
|
+
<img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License: MIT">
|
|
6
|
+
</a>
|
|
7
|
+
<a href="https://docs.openclaw.ai/">
|
|
8
|
+
<img src="https://img.shields.io/badge/OpenClaw-Plugin-blueviolet.svg" alt="OpenClaw">
|
|
9
|
+
</a>
|
|
10
|
+
<a href="https://github.com/botuniverse/onebot-11">
|
|
11
|
+
<img src="https://img.shields.io/badge/Protocol-OneBot_11-yellow.svg" alt="Protocol">
|
|
12
|
+
</a>
|
|
13
|
+
<a href="https://www.typescriptlang.org/">
|
|
14
|
+
<img src="https://img.shields.io/badge/Language-TypeScript-blue.svg" alt="TypeScript">
|
|
15
|
+
</a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<strong>QQ Channel Plugin for OpenClaw</strong>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<p align="center">
|
|
23
|
+
通过 NapCat WebSocket API 连接 QQ 机器人,支持私聊、群聊、图片、回复等多种消息类型
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 目录
|
|
29
|
+
|
|
30
|
+
- [功能特性](#功能特性)
|
|
31
|
+
- [安装](#安装)
|
|
32
|
+
- [快速开始](#快速开始)
|
|
33
|
+
- [配置](#配置)
|
|
34
|
+
- [使用方法](#使用方法)
|
|
35
|
+
- [架构设计](#架构设计)
|
|
36
|
+
- [API 文档](#api-文档)
|
|
37
|
+
- [开发指南](#开发指南)
|
|
38
|
+
- [故障排查](#故障排查)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 功能特性
|
|
43
|
+
|
|
44
|
+
- **多渠道支持** - 同时支持 QQ 私聊和群聊
|
|
45
|
+
- **消息类型** - 文本、@提及、图片、表情、语音、文件、回复
|
|
46
|
+
- **实时通信** - WebSocket 全双工连接,支持自动重连
|
|
47
|
+
- **心跳监测** - 内置健康检查和连接状态监控
|
|
48
|
+
- **交互式配置** - 提供向导式配置界面
|
|
49
|
+
- **TypeScript** - 完整的类型定义和类型安全
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 安装
|
|
54
|
+
|
|
55
|
+
### 前提条件
|
|
56
|
+
|
|
57
|
+
1. 安装 [OpenClaw](https://docs.openclaw.ai/) >= 2026.2.1
|
|
58
|
+
2. 安装并配置 [NapCat](https://github.com/NapNeko/NapCatQQ) WebSocket 服务
|
|
59
|
+
|
|
60
|
+
### 通过 OpenClaw CLI 安装
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 安装插件
|
|
64
|
+
openclaw plugins install @izhimu/qq
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 本地开发安装
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 克隆仓库
|
|
71
|
+
git clone <repository-url>
|
|
72
|
+
cd openclaw-channel-qq
|
|
73
|
+
|
|
74
|
+
# 安装依赖
|
|
75
|
+
npm install
|
|
76
|
+
|
|
77
|
+
# 构建项目
|
|
78
|
+
npm run build
|
|
79
|
+
|
|
80
|
+
# 安装到 OpenClaw
|
|
81
|
+
openclaw plugins install /path/to/openclaw-channel-qq
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 快速开始
|
|
87
|
+
|
|
88
|
+
### 1. 配置 NapCat
|
|
89
|
+
|
|
90
|
+
在 NapCat 的 `config.yml` 中启用 WebSocket:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
ws:
|
|
94
|
+
servers:
|
|
95
|
+
- url: ws://0.0.0.0:3001
|
|
96
|
+
token: "" # 如需认证请设置
|
|
97
|
+
enableHeart: true
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 2. 配置 OpenClaw
|
|
101
|
+
|
|
102
|
+
运行交互式配置向导:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
openclaw onboard
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
或手动编辑配置:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"channels": {
|
|
113
|
+
"qq": {
|
|
114
|
+
"wsUrl": "ws://127.0.0.1:3001",
|
|
115
|
+
"accessToken": "",
|
|
116
|
+
"enabled": true
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 3. 启动 Gateway
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
openclaw gateway restart
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 配置
|
|
131
|
+
|
|
132
|
+
### 配置选项
|
|
133
|
+
|
|
134
|
+
| 属性 | 类型 | 必填 | 默认值 | 描述 |
|
|
135
|
+
|------|------|------|--------|------|
|
|
136
|
+
| `wsUrl` | `string` | 是 | - | NapCat WebSocket 地址 |
|
|
137
|
+
| `accessToken` | `string` | 否 | `""` | 访问令牌(如配置了认证) |
|
|
138
|
+
| `enabled` | `boolean` | 否 | `true` | 是否启用该账号 |
|
|
139
|
+
|
|
140
|
+
### 配置示例
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"channels": {
|
|
145
|
+
"qq": {
|
|
146
|
+
"wsUrl": "ws://127.0.0.1:3001",
|
|
147
|
+
"accessToken": "your-token",
|
|
148
|
+
"enabled": true
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 使用方法
|
|
157
|
+
|
|
158
|
+
### 发送消息
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 发送私聊消息
|
|
162
|
+
openclaw message send "你好!" --to qq:private:123456789
|
|
163
|
+
|
|
164
|
+
# 发送群消息
|
|
165
|
+
openclaw message send "大家好!" --to qq:group:123456
|
|
166
|
+
|
|
167
|
+
# 带回复的消息
|
|
168
|
+
openclaw message send "回复你的消息" --to qq:private:123456789 --reply-to <message-id>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 检查状态
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 查看频道状态
|
|
175
|
+
openclaw channels
|
|
176
|
+
|
|
177
|
+
# 查看日志
|
|
178
|
+
openclaw logs --channel qq
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 消息目标格式
|
|
182
|
+
|
|
183
|
+
| 类型 | 格式 | 示例 |
|
|
184
|
+
|------|------|------|
|
|
185
|
+
| 私聊 | `private:<QQ号>` | `qq:private:123456789` |
|
|
186
|
+
| 群聊 | `group:<群号>` | `qq:group:123456` |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 架构设计
|
|
191
|
+
|
|
192
|
+
### 项目结构
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
openclaw-channel-qq/
|
|
196
|
+
├── src/
|
|
197
|
+
│ ├── channel.ts # Main plugin definition
|
|
198
|
+
│ ├── core/
|
|
199
|
+
│ │ ├── connection.ts # WebSocket connection manager
|
|
200
|
+
│ │ └── dispatch.ts # Event dispatcher
|
|
201
|
+
│ ├── adapters/
|
|
202
|
+
│ │ └── message.ts # NapCat ↔ OpenClaw message conversion
|
|
203
|
+
│ ├── core/
|
|
204
|
+
│ │ └── config.ts # Configuration resolution
|
|
205
|
+
│ ├── onboarding.ts # Interactive setup wizard
|
|
206
|
+
│ ├── types/
|
|
207
|
+
│ │ └── channel.ts # TypeScript definitions
|
|
208
|
+
│ └── utils/
|
|
209
|
+
│ ├── channel.ts # Utility functions
|
|
210
|
+
├── docs/
|
|
211
|
+
│ ├── napcat-websocket-api.md # NapCat API reference
|
|
212
|
+
│ └── plugin-development-guide.md
|
|
213
|
+
├── channel.ts # Plugin entry point
|
|
214
|
+
├── openclaw.plugin.json # Plugin manifest
|
|
215
|
+
└── package.json
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 核心组件
|
|
219
|
+
|
|
220
|
+
#### 1. ConnectionManager
|
|
221
|
+
|
|
222
|
+
负责 WebSocket 连接的生命周期管理:
|
|
223
|
+
- 连接建立和断开
|
|
224
|
+
- 自动重连机制(指数退避)
|
|
225
|
+
- 心跳监测
|
|
226
|
+
- 请求/响应关联
|
|
227
|
+
|
|
228
|
+
#### 2. MessageAdapter
|
|
229
|
+
|
|
230
|
+
处理 NapCat 与 OpenClaw 消息格式的双向转换:
|
|
231
|
+
- 入站消息解析(NapCat → OpenClaw)
|
|
232
|
+
- 出站消息构建(OpenClaw → NapCat)
|
|
233
|
+
- 支持多种消息段类型
|
|
234
|
+
|
|
235
|
+
#### 3. EventDispatcher
|
|
236
|
+
|
|
237
|
+
处理 NapCat 上报的各类事件:
|
|
238
|
+
- 消息事件(私聊、群聊)
|
|
239
|
+
- 通知事件(戳一戳、撤回等)
|
|
240
|
+
- 元事件(心跳、生命周期)
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## API 文档
|
|
245
|
+
|
|
246
|
+
### 支持的消息类型
|
|
247
|
+
|
|
248
|
+
| 类型 | 入站 | 出站 | 说明 |
|
|
249
|
+
|------|------|------|------|
|
|
250
|
+
| `text` | ✓ | ✓ | 文本消息 |
|
|
251
|
+
| `at` | ✓ | ✓ | @提及 |
|
|
252
|
+
| `image` | ✓ | ✓ | 图片 |
|
|
253
|
+
| `face` | ✓ | - | QQ 表情 |
|
|
254
|
+
| `reply` | ✓ | ✓ | 消息回复 |
|
|
255
|
+
| `record` | ✓ | - | 语音消息 |
|
|
256
|
+
| `file` | ✓ | - | 文件 |
|
|
257
|
+
| `json` | ✓ | - | JSON 富文本 |
|
|
258
|
+
|
|
259
|
+
### OneBot 11 接口
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
// 发送消息
|
|
263
|
+
{
|
|
264
|
+
action: 'send_msg',
|
|
265
|
+
params: {
|
|
266
|
+
message_type: 'private' | 'group',
|
|
267
|
+
user_id?: string, // 私聊时必填
|
|
268
|
+
group_id?: string, // 群聊时必填
|
|
269
|
+
message: NapCatMessage[] | string
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// 获取消息
|
|
274
|
+
{
|
|
275
|
+
action: 'get_msg',
|
|
276
|
+
params: {
|
|
277
|
+
message_id: number
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// 获取运行状态
|
|
282
|
+
{
|
|
283
|
+
action: 'get_status',
|
|
284
|
+
params: {}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
完整 API 文档请参考 [NapCat WebSocket API 文档](./docs/napcat-websocket-api.md)。
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 开发指南
|
|
293
|
+
|
|
294
|
+
### 开发环境设置
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# 安装依赖
|
|
298
|
+
npm install
|
|
299
|
+
|
|
300
|
+
# 开发模式(热重载)
|
|
301
|
+
npm run dev
|
|
302
|
+
|
|
303
|
+
# 构建
|
|
304
|
+
npm run build
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### 目录结构说明
|
|
308
|
+
|
|
309
|
+
| 目录 | 说明 |
|
|
310
|
+
|------|------|
|
|
311
|
+
| `src/core/` | 核心功能模块 |
|
|
312
|
+
| `src/adapters/` | 适配器(消息转换等) |
|
|
313
|
+
| `src/types/` | TypeScript 类型定义 |
|
|
314
|
+
| `src/utils/` | 工具函数 |
|
|
315
|
+
| `docs/` | 文档 |
|
|
316
|
+
| `openspec/` | OpenSpec 规范 |
|
|
317
|
+
|
|
318
|
+
### 插件开发参考
|
|
319
|
+
|
|
320
|
+
详细开发指南请参考 [插件开发指南](./docs/plugin-development-guide.md)。
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 故障排查
|
|
325
|
+
|
|
326
|
+
### 连接问题
|
|
327
|
+
|
|
328
|
+
1. **检查 NapCat 是否运行**
|
|
329
|
+
```bash
|
|
330
|
+
# 检查服务状态
|
|
331
|
+
curl http://localhost:3001/get_status
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
2. **验证 WebSocket 配置**
|
|
335
|
+
- 确认 `wsUrl` 与 NapCat 配置一致
|
|
336
|
+
- 检查访问令牌是否正确
|
|
337
|
+
|
|
338
|
+
3. **防火墙设置**
|
|
339
|
+
- 确保 WebSocket 端口未被防火墙拦截
|
|
340
|
+
|
|
341
|
+
### 消息发送失败
|
|
342
|
+
|
|
343
|
+
1. **检查账号状态**
|
|
344
|
+
```bash
|
|
345
|
+
openclaw channels
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
2. **查看日志**
|
|
349
|
+
```bash
|
|
350
|
+
openclaw logs --channel qq --verbose
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
3. **验证消息格式**
|
|
354
|
+
- 确保目标格式正确:`private:<QQ>` 或 `group:<群号>`
|
|
355
|
+
|
|
356
|
+
### 常见问题
|
|
357
|
+
|
|
358
|
+
| 问题 | 可能原因 | 解决方案 |
|
|
359
|
+
|------|----------|----------|
|
|
360
|
+
| 连接失败 | NapCat 未启动 | 启动 NapCat 服务 |
|
|
361
|
+
| 认证失败 | accessToken 错误 | 检查配置中的令牌 |
|
|
362
|
+
| 消息未收到 | 账号被禁用 | 检查 `enabled: true` |
|
|
363
|
+
| 图片发送失败 | URL 不可访问 | 确保图片 URL 可公网访问 |
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 相关链接
|
|
368
|
+
|
|
369
|
+
- [OpenClaw 官方文档](https://docs.openclaw.ai/)
|
|
370
|
+
- [OpenClaw 插件开发指南](https://docs.openclaw.ai/plugin)
|
|
371
|
+
- [NapCat GitHub](https://github.com/NapNeko/NapCatQQ)
|
|
372
|
+
- [OneBot 11 协议标准](https://github.com/botuniverse/onebot-11)
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## 开源协议
|
|
377
|
+
|
|
378
|
+
[MIT](LICENSE) © izhimu
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
<p align="center">
|
|
383
|
+
如有问题或建议,欢迎提交 Issue 或 PR
|
|
384
|
+
</p>
|