wechaty-web-panel 1.6.113 → 1.6.114
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/ARCHITECTURE.md +683 -0
- package/OPTIMIZATION_PLAN.md +1704 -0
- package/dist/handlers/on-callback-message.js +46 -0
- package/dist/lib/oss.js +14 -1
- package/dist/lib/s3oss.js +27 -0
- package/dist/lib/tencentOss.js +81 -0
- package/dist/package-json.js +15 -15
- package/package.json +15 -15
- package/src/handlers/on-callback-message.js +63 -19
- package/src/lib/oss.js +12 -2
- package/src/lib/s3oss.js +30 -0
- package/src/lib/tencentOss.js +93 -0
- package/src/package-json.js +15 -15
package/ARCHITECTURE.md
ADDED
|
@@ -0,0 +1,683 @@
|
|
|
1
|
+
# Wechaty Web Panel 项目架构文档
|
|
2
|
+
|
|
3
|
+
## 项目概述
|
|
4
|
+
|
|
5
|
+
Wechaty Web Panel 是一个功能完整的微信机器人管理和 AI 集成平台,基于 Wechaty 框架,支持多种 AI 服务、复杂的消息处理逻辑、定时任务调度和高级数据分析能力。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 目录结构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
wechaty-web-panel/
|
|
13
|
+
├── src/ # 源代码主目录
|
|
14
|
+
│ ├── index.js # 插件入口文件
|
|
15
|
+
│ ├── package-json.js # 版本管理
|
|
16
|
+
│ ├── bot/ # 机器人集成模块(多AI平台)
|
|
17
|
+
│ │ ├── chatgpt/ # ChatGPT集成
|
|
18
|
+
│ │ ├── dify/ # Dify平台集成
|
|
19
|
+
│ │ ├── fastgpt/ # FastGPT集成
|
|
20
|
+
│ │ ├── coze/ # Coze集成
|
|
21
|
+
│ │ └── qanything/ # QAnything集成
|
|
22
|
+
│ ├── botInstance/ # AI机器人实例管理
|
|
23
|
+
│ │ ├── dify.js # Dify AI客户端
|
|
24
|
+
│ │ ├── cozev3.js # Coze V3客户端
|
|
25
|
+
│ │ ├── fastgpt.js # FastGPT客户端
|
|
26
|
+
│ │ ├── officialOpenAi.js # OpenAI官方API
|
|
27
|
+
│ │ ├── gpt4v.js # GPT-4V视觉模型
|
|
28
|
+
│ │ └── sdk/ # 各种AI SDK
|
|
29
|
+
│ ├── handlers/ # Wechaty事件处理器
|
|
30
|
+
│ │ ├── on-message.js # 消息处理(核心~25KB)
|
|
31
|
+
│ │ ├── on-login.js # 登录处理
|
|
32
|
+
│ │ ├── on-friend.js # 好友请求处理
|
|
33
|
+
│ │ ├── on-roomjoin.js # 群聊加入处理
|
|
34
|
+
│ │ ├── on-scan.js # 扫码处理
|
|
35
|
+
│ │ └── on-*.js # 其他事件处理
|
|
36
|
+
│ ├── proxy/ # 代理层(API调用)
|
|
37
|
+
│ │ ├── aibotk.js # 与aibotk服务通信
|
|
38
|
+
│ │ ├── openAi.js # OpenAI API代理
|
|
39
|
+
│ │ ├── difyAi.js # Dify API代理
|
|
40
|
+
│ │ ├── cozeAi.js # Coze API代理
|
|
41
|
+
│ │ ├── mqtt.js # MQTT通信
|
|
42
|
+
│ │ └── bot/ # 机器人类型分发器
|
|
43
|
+
│ │ └── dispatch.js # 机器人分发逻辑
|
|
44
|
+
│ ├── db/ # 数据持久化层
|
|
45
|
+
│ │ ├── nedb.js # NeDB数据库封装
|
|
46
|
+
│ │ ├── global.js # 全局配置存储
|
|
47
|
+
│ │ ├── configDb.js # 配置数据库
|
|
48
|
+
│ │ ├── chatHistory.js # 聊天历史
|
|
49
|
+
│ │ ├── aichatDb.js # AI对话记录
|
|
50
|
+
│ │ ├── userDb.js # 用户信息
|
|
51
|
+
│ │ ├── roomDb.js # 群信息
|
|
52
|
+
│ │ └── gptConfig.js # GPT配置
|
|
53
|
+
│ ├── service/ # 业务服务层
|
|
54
|
+
│ │ ├── event-dispatch-service.js # 事件分发
|
|
55
|
+
│ │ ├── room-async-service.js # 群聊同步
|
|
56
|
+
│ │ ├── msg-filters.js # 消息过滤
|
|
57
|
+
│ │ ├── msg-filter-service.js # 过滤服务
|
|
58
|
+
│ │ └── gpt4vService.js # GPT-4V服务
|
|
59
|
+
│ ├── mcp/ # Model Context Protocol服务
|
|
60
|
+
│ │ ├── src/
|
|
61
|
+
│ │ │ ├── mcp/ # MCP服务器实现
|
|
62
|
+
│ │ │ │ └── server.js # MCP标准服务器
|
|
63
|
+
│ │ │ ├── models/ # 数据模型
|
|
64
|
+
│ │ │ │ ├── Friend.js # 好友模型
|
|
65
|
+
│ │ │ │ ├── Group.js # 群组模型
|
|
66
|
+
│ │ │ │ ├── GroupMember.js # 群成员模型
|
|
67
|
+
│ │ │ │ └── ChatMessage.js # 消息模型
|
|
68
|
+
│ │ │ ├── services/ # MCP服务
|
|
69
|
+
│ │ │ │ ├── ChatDataService.js # 数据服务
|
|
70
|
+
│ │ │ │ ├── McpService.js # 查询服务
|
|
71
|
+
│ │ │ │ └── McpTools.js # 工具方法
|
|
72
|
+
│ │ │ └── config/
|
|
73
|
+
│ │ │ └── database.js # PostgreSQL配置
|
|
74
|
+
│ │ └── mcp-server.js # 核心MCP服务器
|
|
75
|
+
│ ├── task/ # 定时任务模块
|
|
76
|
+
│ │ ├── index.js # 任务管理
|
|
77
|
+
│ │ └── rss.js # RSS订阅任务
|
|
78
|
+
│ ├── common/ # 通用工具
|
|
79
|
+
│ │ ├── index.js # 消息发送工具
|
|
80
|
+
│ │ ├── reply.js # 回复处理
|
|
81
|
+
│ │ ├── hook.js # 钩子机制
|
|
82
|
+
│ │ └── multiReply.js # 多回复处理
|
|
83
|
+
│ ├── lib/ # 实用函数库
|
|
84
|
+
│ │ ├── index.js # 主要工具函数(定时、加密等)
|
|
85
|
+
│ │ ├── contentCensor.js # 内容审查
|
|
86
|
+
│ │ └── oss.js # 对象存储
|
|
87
|
+
│ └── const/ # 常量定义
|
|
88
|
+
│ └── puppet-type.js # Puppet类型定义
|
|
89
|
+
├── test/ # 测试文件
|
|
90
|
+
├── .github/ # GitHub CI/CD配置
|
|
91
|
+
├── tsconfig.json # TypeScript配置
|
|
92
|
+
├── package.json # 项目依赖配置
|
|
93
|
+
├── .eslintrc.js # ESLint配置
|
|
94
|
+
├── .prettierrc # Prettier配置
|
|
95
|
+
└── verpub.config.js # 版本发布配置
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 2. 核心模块功能
|
|
101
|
+
|
|
102
|
+
### 2.1 插件入口系统
|
|
103
|
+
|
|
104
|
+
**文件**: [src/index.js](src/index.js)
|
|
105
|
+
|
|
106
|
+
导出三个主要插件:
|
|
107
|
+
- `WechatyWebPanelPlugin`:主插件,处理所有Wechaty事件
|
|
108
|
+
- `WechatyMessageRecordPlugin`:消息记录插件
|
|
109
|
+
- `WechatyMessageCallBackPlugin`:消息回调插件
|
|
110
|
+
|
|
111
|
+
支持通过环境变量配置:`AIBOTK_KEY`和`AIBOTK_SECRET`
|
|
112
|
+
|
|
113
|
+
### 2.2 事件处理系统
|
|
114
|
+
|
|
115
|
+
**核心文件**: [src/handlers/on-message.js](src/handlers/on-message.js)
|
|
116
|
+
|
|
117
|
+
消息处理核心功能:
|
|
118
|
+
- 支持私聊和群聊消息分离处理
|
|
119
|
+
- 集成多种AI回复方式(GPT、Dify、FastGPT等)
|
|
120
|
+
- 消息过滤机制(关键词检测)
|
|
121
|
+
- 文件处理和视觉识别
|
|
122
|
+
|
|
123
|
+
**其他事件处理器**:
|
|
124
|
+
- [on-login.js](src/handlers/on-login.js):登录后获取配置、初始化MQTT、更新用户信息
|
|
125
|
+
- [on-friend.js](src/handlers/on-friend.js):好友请求处理
|
|
126
|
+
- [on-roomjoin.js](src/handlers/on-roomjoin.js):群加入事件
|
|
127
|
+
- [on-record-message.js](src/handlers/on-record-message.js):消息记录
|
|
128
|
+
- [on-callback-message.js](src/handlers/on-callback-message.js):回调事件处理
|
|
129
|
+
|
|
130
|
+
### 2.3 AI机器人集成层
|
|
131
|
+
|
|
132
|
+
**目录**: [src/botInstance/](src/botInstance/)
|
|
133
|
+
|
|
134
|
+
支持多种AI平台,每个都有独立的客户端类:
|
|
135
|
+
|
|
136
|
+
| AI平台 | 文件 | 功能 |
|
|
137
|
+
|--------|------|------|
|
|
138
|
+
| Dify | [dify.js](src/botInstance/dify.js) | LLM应用平台集成 |
|
|
139
|
+
| Coze V2 | [coze.js](src/botInstance/coze.js) | 字节AI平台(已废弃) |
|
|
140
|
+
| Coze V3 | [cozev3.js](src/botInstance/cozev3.js) | 字节AI新版本 |
|
|
141
|
+
| FastGPT | [fastgpt.js](src/botInstance/fastgpt.js) | 开源LLM应用 |
|
|
142
|
+
| OpenAI | [officialOpenAi.js](src/botInstance/officialOpenAi.js) | OpenAI官方API |
|
|
143
|
+
| GPT-4V | [gpt4v.js](src/botInstance/gpt4v.js) | 视觉识别模型 |
|
|
144
|
+
| Q-Anything | [qany.js](src/botInstance/qany.js) | 本地知识库 |
|
|
145
|
+
|
|
146
|
+
每个客户端都支持:
|
|
147
|
+
- 初始化和配置管理
|
|
148
|
+
- Token和API密钥管理
|
|
149
|
+
- 流式和非流式响应
|
|
150
|
+
- 内容审查和过滤
|
|
151
|
+
|
|
152
|
+
### 2.4 消息分发系统
|
|
153
|
+
|
|
154
|
+
**文件**: [src/proxy/bot/dispatch.js](src/proxy/bot/dispatch.js)
|
|
155
|
+
|
|
156
|
+
根据botType分发消息到不同AI平台:
|
|
157
|
+
- 支持13+种机器人类型
|
|
158
|
+
- 上下文变量传递(userId、isMention、room信息等)
|
|
159
|
+
- 文件处理管道
|
|
160
|
+
|
|
161
|
+
### 2.5 数据持久化层
|
|
162
|
+
|
|
163
|
+
**目录**: [src/db/](src/db/)
|
|
164
|
+
|
|
165
|
+
两套数据存储系统:
|
|
166
|
+
|
|
167
|
+
#### 本地存储(NeDB)
|
|
168
|
+
- 轻量级嵌入式数据库
|
|
169
|
+
- 存储配置、AI聊天记录、用户信息
|
|
170
|
+
- 支持查询、排序、分页
|
|
171
|
+
|
|
172
|
+
**核心文件**:
|
|
173
|
+
- [nedb.js](src/db/nedb.js):数据库抽象层
|
|
174
|
+
- [global.js](src/db/global.js):全局配置存储
|
|
175
|
+
- [chatHistory.js](src/db/chatHistory.js):聊天历史
|
|
176
|
+
|
|
177
|
+
#### PostgreSQL(MCP服务)
|
|
178
|
+
- 用于生产级数据分析
|
|
179
|
+
- 存储结构化的聊天数据
|
|
180
|
+
- Sequelize ORM映射
|
|
181
|
+
|
|
182
|
+
### 2.6 MCP服务(Model Context Protocol)
|
|
183
|
+
|
|
184
|
+
**目录**: [src/mcp/](src/mcp/)
|
|
185
|
+
|
|
186
|
+
提供高级查询和数据分析能力:
|
|
187
|
+
|
|
188
|
+
| 功能 | 说明 |
|
|
189
|
+
|------|------|
|
|
190
|
+
| 好友管理 | 搜索、批量创建、批量删除 |
|
|
191
|
+
| 群组管理 | 群信息检索、成员分析 |
|
|
192
|
+
| 消息查询 | 全文搜索、热力图分析 |
|
|
193
|
+
| 关系分析 | 会话详情、用户关系图 |
|
|
194
|
+
| 活动分析 | 消息频率、活跃度统计 |
|
|
195
|
+
| 内容分析 | 话题提取、情感分析 |
|
|
196
|
+
| 数据导出 | CSV、JSON导出 |
|
|
197
|
+
|
|
198
|
+
**核心模型** ([src/mcp/src/models/](src/mcp/src/models/)):
|
|
199
|
+
- [Friend.js](src/mcp/src/models/Friend.js):好友信息
|
|
200
|
+
- [Group.js](src/mcp/src/models/Group.js):群信息
|
|
201
|
+
- [GroupMember.js](src/mcp/src/models/GroupMember.js):群成员
|
|
202
|
+
- [ChatMessage.js](src/mcp/src/models/ChatMessage.js):消息记录
|
|
203
|
+
|
|
204
|
+
### 2.7 代理层
|
|
205
|
+
|
|
206
|
+
**目录**: [src/proxy/](src/proxy/)
|
|
207
|
+
|
|
208
|
+
- [aibotk.js](src/proxy/aibotk.js):与AiBotK后端服务通信
|
|
209
|
+
- 获取/更新配置
|
|
210
|
+
- 发送机器人信息
|
|
211
|
+
- 二维码管理
|
|
212
|
+
- Qiniu云存储集成
|
|
213
|
+
|
|
214
|
+
- 其他代理:
|
|
215
|
+
- [openAi.js](src/proxy/openAi.js), [difyAi.js](src/proxy/difyAi.js), [cozeAi.js](src/proxy/cozeAi.js):各平台API调用
|
|
216
|
+
- [mqtt.js](src/proxy/mqtt.js):实时消息推送
|
|
217
|
+
- [multimodal.js](src/proxy/multimodal.js):多模态处理(语音转文字、文字转语音)
|
|
218
|
+
|
|
219
|
+
### 2.8 定时任务系统
|
|
220
|
+
|
|
221
|
+
**目录**: [src/task/](src/task/)
|
|
222
|
+
|
|
223
|
+
- [index.js](src/task/index.js):任务调度和执行
|
|
224
|
+
- 支持三种提醒:当天、每天、指定日期
|
|
225
|
+
- 使用node-schedule库
|
|
226
|
+
- 支持群发、群内同步
|
|
227
|
+
|
|
228
|
+
- [rss.js](src/task/rss.js):RSS订阅和推送
|
|
229
|
+
|
|
230
|
+
### 2.9 服务层
|
|
231
|
+
|
|
232
|
+
**目录**: [src/service/](src/service/)
|
|
233
|
+
|
|
234
|
+
- [event-dispatch-service.js](src/service/event-dispatch-service.js):事件分发和路由
|
|
235
|
+
- [room-async-service.js](src/service/room-async-service.js):群聊消息同步
|
|
236
|
+
- [msg-filters.js](src/service/msg-filters.js):复杂消息过滤逻辑
|
|
237
|
+
- [gpt4vService.js](src/service/gpt4vService.js):视觉识别处理
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 3. 技术栈
|
|
242
|
+
|
|
243
|
+
### 3.1 核心框架
|
|
244
|
+
|
|
245
|
+
| 类别 | 技术 | 版本 |
|
|
246
|
+
|------|------|------|
|
|
247
|
+
| 运行时 | Node.js | >=16 |
|
|
248
|
+
| 包管理 | npm | >=7 |
|
|
249
|
+
| 语言 | JavaScript (ES Module) | esnext |
|
|
250
|
+
| 类型检查 | TypeScript | ^5.4 |
|
|
251
|
+
|
|
252
|
+
### 3.2 Wechaty生态
|
|
253
|
+
|
|
254
|
+
```json
|
|
255
|
+
{
|
|
256
|
+
"@juzi/wechaty": "^1.0.108",
|
|
257
|
+
"@juzi/wechaty-puppet": "^1.0.100",
|
|
258
|
+
"@juzi/wechaty-puppet-service": "^1.0.105",
|
|
259
|
+
"wechaty-puppet-matrix": "^0.0.34",
|
|
260
|
+
"wechaty-puppet-wechat4u": "^1.14.12"
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 3.3 AI和LLM集成
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
{
|
|
268
|
+
"@langchain/core": "^0.3.40",
|
|
269
|
+
"@langchain/openai": "^0.4.4",
|
|
270
|
+
"@langchain/community": "^0.3.32",
|
|
271
|
+
"@langchain/redis": "^0.1.1",
|
|
272
|
+
"@dqbd/tiktoken": "^1.0.2",
|
|
273
|
+
"@coze/api": "^1.0.19"
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 3.4 数据存储
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"sequelize": "^6.37.0",
|
|
282
|
+
"pg": "^8.11.0",
|
|
283
|
+
"pg-hstore": "^2.3.4",
|
|
284
|
+
"nedb": "^1.8.0",
|
|
285
|
+
"keyv": "^4.5.2"
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### 3.5 API和通信
|
|
290
|
+
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"@modelcontextprotocol/sdk": "^1.17.0",
|
|
294
|
+
"express": "^5.1.0",
|
|
295
|
+
"cors": "^2.8.5",
|
|
296
|
+
"axios": "1.8.2",
|
|
297
|
+
"mqtt": "^4.2.6",
|
|
298
|
+
"superagent": "^5.3.1",
|
|
299
|
+
"node-fetch": "^2.6.9"
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 3.6 工具和实用库
|
|
304
|
+
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"dayjs": "^1.11.7",
|
|
308
|
+
"node-schedule": "^1.3.2",
|
|
309
|
+
"uuid": "^9.0.0",
|
|
310
|
+
"zod": "^3.25.76",
|
|
311
|
+
"jsonwebtoken": "^9.0.2",
|
|
312
|
+
"mustache": "^4.2.0",
|
|
313
|
+
"rss-parser": "^3.13.0"
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### 3.7 云服务集成
|
|
318
|
+
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"@aws-sdk/client-s3": "^3.828.0",
|
|
322
|
+
"ali-oss": "^6.21.0",
|
|
323
|
+
"baidu-aip-sdk": "^4.16.10"
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## 4. 核心流程
|
|
330
|
+
|
|
331
|
+
### 4.1 插件初始化流程
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
插件导出
|
|
335
|
+
↓
|
|
336
|
+
WechatyWebPanelPlugin({apiKey, apiSecret, ignoreMessages, ignoreEvents})
|
|
337
|
+
↓
|
|
338
|
+
设置全局配置(global.js)
|
|
339
|
+
↓
|
|
340
|
+
返回初始化函数
|
|
341
|
+
↓
|
|
342
|
+
bot.use(plugin) 绑定到Wechaty
|
|
343
|
+
↓
|
|
344
|
+
注册事件监听器
|
|
345
|
+
└── on('scan') → onScan
|
|
346
|
+
└── on('login') → onLogin
|
|
347
|
+
└── on('message') → onMessage
|
|
348
|
+
└── on('friendship') → onFriend
|
|
349
|
+
└── on('room-join') → onRoomjoin
|
|
350
|
+
└── ... 其他事件
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 4.2 消息处理流程
|
|
354
|
+
|
|
355
|
+
详见 [src/handlers/on-message.js](src/handlers/on-message.js)
|
|
356
|
+
|
|
357
|
+
```
|
|
358
|
+
收到消息事件
|
|
359
|
+
↓
|
|
360
|
+
消息类型检查 → 系统消息/文本/链接/文件/图片
|
|
361
|
+
↓
|
|
362
|
+
私聊消息处理
|
|
363
|
+
├── 检查忽略列表
|
|
364
|
+
├── 获取AI配置
|
|
365
|
+
├── 调用dispatchBot()
|
|
366
|
+
└── 获取AI回复
|
|
367
|
+
|
|
368
|
+
群聊消息处理
|
|
369
|
+
├── 检查@提及
|
|
370
|
+
├── 消息过滤(自定义规则)
|
|
371
|
+
├── 关键词匹配
|
|
372
|
+
├── 事件分发
|
|
373
|
+
└── 定时任务触发
|
|
374
|
+
|
|
375
|
+
消息记录
|
|
376
|
+
└── addRoomRecord() / addChatRecord()
|
|
377
|
+
|
|
378
|
+
发送回复
|
|
379
|
+
└── contactSay() / roomSay()
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### 4.3 登录流程
|
|
383
|
+
|
|
384
|
+
详见 [src/handlers/on-login.js](src/handlers/on-login.js)
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
登录成功
|
|
388
|
+
↓
|
|
389
|
+
获取配置文件 → getConfig()
|
|
390
|
+
↓
|
|
391
|
+
更新puppet类型信息
|
|
392
|
+
↓
|
|
393
|
+
保存用户信息 → addUser()
|
|
394
|
+
↓
|
|
395
|
+
处理用户头像 → putqn()
|
|
396
|
+
↓
|
|
397
|
+
初始化MQTT连接 → initMqtt()
|
|
398
|
+
↓
|
|
399
|
+
版本检查和更新提醒
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 4.4 AI回复流程
|
|
403
|
+
|
|
404
|
+
详见 [src/proxy/bot/dispatch.js](src/proxy/bot/dispatch.js)
|
|
405
|
+
|
|
406
|
+
```
|
|
407
|
+
进入dispatchBot()
|
|
408
|
+
↓
|
|
409
|
+
根据botType判断AI平台
|
|
410
|
+
├── case 6: ChatGPT API
|
|
411
|
+
├── case 8: Dify
|
|
412
|
+
├── case 9: FastGPT
|
|
413
|
+
├── case 11: Coze V2
|
|
414
|
+
├── case 12: Coze V3
|
|
415
|
+
├── case 13: Q-Anything
|
|
416
|
+
└── ...其他类型
|
|
417
|
+
|
|
418
|
+
调用对应AI客户端
|
|
419
|
+
↓
|
|
420
|
+
传递上下文变量
|
|
421
|
+
├── userId: 用户ID
|
|
422
|
+
├── isMention: 是否@
|
|
423
|
+
├── roomId/roomName: 群信息
|
|
424
|
+
├── file: 文件信息
|
|
425
|
+
└── inputs/variables: 平台特定参数
|
|
426
|
+
|
|
427
|
+
处理流式响应
|
|
428
|
+
↓
|
|
429
|
+
内容审查和过滤
|
|
430
|
+
↓
|
|
431
|
+
返回回复数组 [{type, content, url}, ...]
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### 4.5 MCP服务流程
|
|
435
|
+
|
|
436
|
+
详见 [src/mcp/mcp-server.js](src/mcp/mcp-server.js)
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
ChatMcpServer初始化
|
|
440
|
+
↓
|
|
441
|
+
setupHandlers() 注册工具处理器
|
|
442
|
+
↓
|
|
443
|
+
ListToolsRequestSchema: 列举可用工具
|
|
444
|
+
├── search_friends
|
|
445
|
+
├── search_groups
|
|
446
|
+
├── search_messages
|
|
447
|
+
└── 20+其他工具
|
|
448
|
+
|
|
449
|
+
CallToolRequestSchema: 执行工具
|
|
450
|
+
├── 参数验证 (Zod schema)
|
|
451
|
+
├── 调用对应服务
|
|
452
|
+
└── 返回结果
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## 5. 配置文件说明
|
|
458
|
+
|
|
459
|
+
### 5.1 TypeScript配置
|
|
460
|
+
|
|
461
|
+
**文件**: [tsconfig.json](tsconfig.json)
|
|
462
|
+
|
|
463
|
+
- **编译目标**:ES Next(现代JavaScript)
|
|
464
|
+
- **模块系统**:ESM(ES Modules)
|
|
465
|
+
- **输出目录**:`dist/`
|
|
466
|
+
- **严格模式**:启用所有strict检查
|
|
467
|
+
- **装饰器支持**:启用(用于Sequelize ORM)
|
|
468
|
+
- **Source Map**:生成,便于调试
|
|
469
|
+
|
|
470
|
+
### 5.2 包管理配置
|
|
471
|
+
|
|
472
|
+
**文件**: [package.json](package.json)
|
|
473
|
+
|
|
474
|
+
- **入口点**:`dist/index.js`(ES Module)
|
|
475
|
+
- **关键脚本**:
|
|
476
|
+
- `npm run build`:TypeScript编译
|
|
477
|
+
- `npm run dist`:完整构建
|
|
478
|
+
- `npm run test:wechat`:测试微信
|
|
479
|
+
- `npm run test:wework`:测试企业微信
|
|
480
|
+
- `npm run release`:发布到npm
|
|
481
|
+
- `npm run db:migrate`:数据库迁移
|
|
482
|
+
|
|
483
|
+
### 5.3 代码风格配置
|
|
484
|
+
|
|
485
|
+
**文件**: [.prettierrc](.prettierrc)
|
|
486
|
+
|
|
487
|
+
```json
|
|
488
|
+
{
|
|
489
|
+
"printWidth": 300, // 每行300字符(长行代码)
|
|
490
|
+
"tabWidth": 2, // 缩进2空格
|
|
491
|
+
"semi": false, // 不使用分号
|
|
492
|
+
"singleQuote": true, // 单引号
|
|
493
|
+
"arrowParens": "always" // 箭头函数参数总使用括号
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### 5.4 ESLint配置
|
|
498
|
+
|
|
499
|
+
**文件**: [.eslintrc.js](.eslintrc.js)
|
|
500
|
+
|
|
501
|
+
- 基于Prettier推荐配置
|
|
502
|
+
- 禁用console和未使用变量的警告
|
|
503
|
+
- 支持Node.js ES6环境
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
## 6. 核心类和接口
|
|
508
|
+
|
|
509
|
+
### 6.1 全局配置类
|
|
510
|
+
|
|
511
|
+
**文件**: [src/db/global.js](src/db/global.js)
|
|
512
|
+
|
|
513
|
+
```javascript
|
|
514
|
+
class Config {
|
|
515
|
+
apiKey: string // API密钥
|
|
516
|
+
qrcodeKey: string // 企微二维码
|
|
517
|
+
verifyCode: string // 企微验证码
|
|
518
|
+
gptconfig: Array // GPT配置列表
|
|
519
|
+
allTasks: Array // 所有任务列表
|
|
520
|
+
|
|
521
|
+
// 方法
|
|
522
|
+
getApikey() / setApikey(val)
|
|
523
|
+
getGptConfigById(id)
|
|
524
|
+
updateOneGptConfig(id, info)
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### 6.2 数据库抽象
|
|
529
|
+
|
|
530
|
+
**文件**: [src/db/nedb.js](src/db/nedb.js)
|
|
531
|
+
|
|
532
|
+
```javascript
|
|
533
|
+
class DB {
|
|
534
|
+
find(query, select): Promise<Array> // 查询多条
|
|
535
|
+
findOne(query, select): Promise<Object> // 查询单条
|
|
536
|
+
insert(values): Promise<Object> // 插入
|
|
537
|
+
update(query, values): Promise<Number> // 更新
|
|
538
|
+
remove(query): Promise<Number> // 删除
|
|
539
|
+
sort(orderby) / limit(offset, limit) // 链式调用
|
|
540
|
+
}
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### 6.3 MCP数据模型
|
|
544
|
+
|
|
545
|
+
**目录**: [src/mcp/src/models/](src/mcp/src/models/)
|
|
546
|
+
|
|
547
|
+
使用Sequelize ORM定义:
|
|
548
|
+
- **Friend**:好友信息(robotId, wxid, name, avatar, alias, tags)
|
|
549
|
+
- **Group**:群信息(robotId, wxid, topic, memberCount)
|
|
550
|
+
- **GroupMember**:群成员(robotId, roomWxid, wxid, name, alias)
|
|
551
|
+
- **ChatMessage**:消息记录(robotId, conversationId, content, type, timestamp)
|
|
552
|
+
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
## 7. 通信协议
|
|
556
|
+
|
|
557
|
+
### 7.1 内部通信
|
|
558
|
+
|
|
559
|
+
- **与AiBotK服务**:HTTP/HTTPS (REST API)
|
|
560
|
+
- 获取配置文件
|
|
561
|
+
- 上报机器人状态
|
|
562
|
+
- 管理二维码和验证
|
|
563
|
+
|
|
564
|
+
- **MQTT实时推送**:连接AiBotK消息队列
|
|
565
|
+
- 接收远程指令
|
|
566
|
+
- 实时配置更新
|
|
567
|
+
|
|
568
|
+
### 7.2 AI平台调用
|
|
569
|
+
|
|
570
|
+
- **OpenAI**:官方API + 代理支持
|
|
571
|
+
- **Dify**:HTTP StreamAPI(流式响应)
|
|
572
|
+
- **FastGPT**:HTTP API(支持流式)
|
|
573
|
+
- **Coze**:官方SDK + 自定义客户端
|
|
574
|
+
- **LangChain**:统一LLM接口
|
|
575
|
+
|
|
576
|
+
### 7.3 数据库通信
|
|
577
|
+
|
|
578
|
+
- **NeDB**:本地进程内通信(无网络)
|
|
579
|
+
- **PostgreSQL**:TCP连接(MCP服务)
|
|
580
|
+
- **Redis**:缓存层(LangChain Redis集成)
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
## 8. 构建和部署
|
|
585
|
+
|
|
586
|
+
### 8.1 构建流程
|
|
587
|
+
|
|
588
|
+
```bash
|
|
589
|
+
npm run build
|
|
590
|
+
↓
|
|
591
|
+
TypeScript编译 (tsc)
|
|
592
|
+
↓
|
|
593
|
+
输出到 dist/ 目录
|
|
594
|
+
↓
|
|
595
|
+
生成 dist/index.js 等JavaScript文件
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### 8.2 发布流程
|
|
599
|
+
|
|
600
|
+
```bash
|
|
601
|
+
npm run release
|
|
602
|
+
↓
|
|
603
|
+
verpub工具验证版本
|
|
604
|
+
↓
|
|
605
|
+
发布到npm Registry
|
|
606
|
+
↓
|
|
607
|
+
创建Git标签:{name}@{version}
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
### 8.3 测试
|
|
611
|
+
|
|
612
|
+
```bash
|
|
613
|
+
npm run test:wechat # 微信Puppet测试
|
|
614
|
+
npm run test:wework # 企业微信测试
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
## 9. 扩展点
|
|
620
|
+
|
|
621
|
+
项目设计了多个易于扩展的点:
|
|
622
|
+
|
|
623
|
+
1. **新AI平台**:在 [src/botInstance/](src/botInstance/) 和 [src/proxy/](src/proxy/) 中添加新类
|
|
624
|
+
2. **新事件类型**:在 [src/handlers/](src/handlers/) 中添加 `on-xxx.js` 文件
|
|
625
|
+
3. **新过滤规则**:在 [src/service/msg-filters.js](src/service/msg-filters.js) 中添加
|
|
626
|
+
4. **新数据模型**:使用MCP的Sequelize模型,在 [src/mcp/src/models/](src/mcp/src/models/) 中定义
|
|
627
|
+
5. **新定时任务**:在 [src/task/](src/task/) 中添加
|
|
628
|
+
6. **MCP工具**:在 [src/mcp/src/mcp/schemas.js](src/mcp/src/mcp/schemas.js) 和 [src/mcp/src/mcp/server.js](src/mcp/src/mcp/server.js) 中定义
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## 10. 核心流程总结
|
|
633
|
+
|
|
634
|
+
| 流程 | 关键文件 | 说明 |
|
|
635
|
+
|------|---------|------|
|
|
636
|
+
| 插件初始化 | [src/index.js](src/index.js) | 绑定事件监听器 |
|
|
637
|
+
| 消息处理 | [src/handlers/on-message.js](src/handlers/on-message.js) | 核心消息分发 |
|
|
638
|
+
| AI回复 | [src/proxy/bot/dispatch.js](src/proxy/bot/dispatch.js) | 调用AI平台 |
|
|
639
|
+
| 数据存储 | [src/db/](src/db/) | 本地或数据库存储 |
|
|
640
|
+
| 定时任务 | [src/task/index.js](src/task/index.js) | 调度执行 |
|
|
641
|
+
| MCP查询 | [src/mcp/](src/mcp/) | 高级数据分析 |
|
|
642
|
+
| 事件分发 | [src/service/event-dispatch-service.js](src/service/event-dispatch-service.js) | 自定义事件处理 |
|
|
643
|
+
|
|
644
|
+
---
|
|
645
|
+
|
|
646
|
+
## 11. 项目特色
|
|
647
|
+
|
|
648
|
+
1. **多AI平台支持**:无缝集成13+种AI服务
|
|
649
|
+
2. **灵活的消息处理**:支持复杂的过滤规则和事件分发机制
|
|
650
|
+
3. **高级数据分析**:通过MCP服务提供强大的查询和分析能力
|
|
651
|
+
4. **双存储系统**:本地NeDB用于快速访问,PostgreSQL用于生产级分析
|
|
652
|
+
5. **定时任务调度**:支持灵活的提醒和RSS订阅
|
|
653
|
+
6. **实时通信**:MQTT支持远程控制和配置更新
|
|
654
|
+
7. **插件化架构**:易于扩展和定制
|
|
655
|
+
|
|
656
|
+
---
|
|
657
|
+
|
|
658
|
+
## 附录:关键依赖版本
|
|
659
|
+
|
|
660
|
+
### 核心依赖
|
|
661
|
+
- Node.js: >=16
|
|
662
|
+
- TypeScript: ^5.4
|
|
663
|
+
- Wechaty: ^1.0.108
|
|
664
|
+
|
|
665
|
+
### AI相关
|
|
666
|
+
- @langchain/core: ^0.3.40
|
|
667
|
+
- @langchain/openai: ^0.4.4
|
|
668
|
+
- @coze/api: ^1.0.19
|
|
669
|
+
|
|
670
|
+
### 数据存储
|
|
671
|
+
- sequelize: ^6.37.0
|
|
672
|
+
- pg: ^8.11.0
|
|
673
|
+
- nedb: ^1.8.0
|
|
674
|
+
|
|
675
|
+
### 通信
|
|
676
|
+
- express: ^5.1.0
|
|
677
|
+
- axios: 1.8.2
|
|
678
|
+
- mqtt: ^4.2.6
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
**文档生成时间**: 2026-01-14
|
|
683
|
+
**项目版本**: 参见 [package.json](package.json)
|