dsh-qq-moony 0.0.0-stage → 0.4.0
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/CHANGELOG.md +47 -0
- package/LICENSE +21 -0
- package/README.md +209 -2
- package/client.js +449 -0
- package/cordis.patch.yml +12 -0
- package/icon.svg +13 -0
- package/index.js +997 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +60 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## 0.4.0 — 2026-10-25
|
|
4
|
+
|
|
5
|
+
群聊从"只回 @"变成"会参与聊天"。
|
|
6
|
+
|
|
7
|
+
**新增**
|
|
8
|
+
- 群聊「参与聊天」:每群记最近 30 条现场,隔 8–20 分钟给一次插话机会;冷场 5 分钟不开口
|
|
9
|
+
- 群聊拆成两个开关:接消息(只回 @)/ 参与聊天(会自己插话)
|
|
10
|
+
- 群聊参数全部可在设置页调:窗口条数、机会间隔、冷场窗口、同群冷却、日额、群号白名单
|
|
11
|
+
- 设置页对「参与聊天」标注 token 成本警告
|
|
12
|
+
- README 增加「群聊的额外一条」:放进熟人群之前的判断
|
|
13
|
+
|
|
14
|
+
**修复**
|
|
15
|
+
- 群聊白名单为空时不再误判为"已开启"
|
|
16
|
+
|
|
17
|
+
## 0.3.0 — 2026-10-25
|
|
18
|
+
|
|
19
|
+
这一版把"能发能收"变成"能自己活着"。
|
|
20
|
+
|
|
21
|
+
**新增**
|
|
22
|
+
- 收消息自检:90 秒没有任何帧(NapCat 每 30 秒心跳)就主动重连;连接/断开/触发都写日志
|
|
23
|
+
- 群聊接话(默认关):白名单 + 只接被 @ 的 + 同群冷却 10 分钟 + 全群日额 20
|
|
24
|
+
- 主动说话:随机间隔(区间内抽),到点给它一次"想说就说"的机会
|
|
25
|
+
- QQ 空间自动发说说:开关 + 自由提示词 + 随机间隔
|
|
26
|
+
- 打开 DSH 自动拉起 NapCat(`-q` 快速登录,免扫码)
|
|
27
|
+
- 设置页:连接状态、四个开关、间隔与额度、空间提示词,带「保存更改」
|
|
28
|
+
|
|
29
|
+
**修复**
|
|
30
|
+
- 配置文件带 BOM 时整份配置被忽略(读取时剥 BOM,写入改用无 BOM)
|
|
31
|
+
- webServer 未就绪导致接口挂不上(改 `ctx.inject` 等它出现)
|
|
32
|
+
- 15 秒轮询会覆盖正在输入的数字(改草稿态 + 显式保存)
|
|
33
|
+
- 图片消息先只记 `[image]`,现在会下载到本地并记路径
|
|
34
|
+
|
|
35
|
+
## 0.2.0 — 2026-10-25
|
|
36
|
+
|
|
37
|
+
- `qq_send` 支持图片(`file:///` + 正斜杠)
|
|
38
|
+
- `qq_stickers` 列出攒下来的图
|
|
39
|
+
- 收消息内置 WebSocket,不再需要外部监听脚本
|
|
40
|
+
- 自动回复改走 `sessionController.prompt`(不再用 agent 内部方法)
|
|
41
|
+
- 自动回复附记忆片段(MEMORY.md 末尾 + 当天日记)
|
|
42
|
+
|
|
43
|
+
## 0.1.0 — 2026-10-25
|
|
44
|
+
|
|
45
|
+
- 第一个能跑起来的版本:`qq_status` / `qq_send` / `qq_read` / `qq_qzone`
|
|
46
|
+
- 限速防封(随机 2–7 秒、20/时、60/天)
|
|
47
|
+
- 配置走 `<DSH_HOME>/qq-moony/config.json`
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Seventy-JJ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,210 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-qq-moony
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
把 QQ 小号接进 DeepSeek Harness。
|
|
4
|
+
|
|
5
|
+
装完之后,Harness 里的 Agent 就有了第二个出口:发消息、收消息、发表情包、发 QQ 空间说说,还能自己主动找人。**它只当手,不当腿**——QQ 客户端和 NapCat 得你自己先备好。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dsh plugin add dsh-qq-moony
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
当前版本:**0.3.0**。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 一、它能干什么
|
|
16
|
+
|
|
17
|
+
| 工具 | 干什么 |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `qq_status` | 小号在不在线、登录的是谁、今天发了多少、还剩多少额度 |
|
|
20
|
+
| `qq_send` | 发消息。私聊写 QQ 号,群聊写 `group:群号`;`image` 可以只发图或图文一起 |
|
|
21
|
+
| `qq_read` | 读最近收到的消息 |
|
|
22
|
+
| `qq_stickers` | 列出攒下来的图(别人发来的表情包都自动存本地) |
|
|
23
|
+
| `qq_qzone` | 发一条 QQ 空间说说 |
|
|
24
|
+
|
|
25
|
+
除工具之外,还有几件自动的事:
|
|
26
|
+
|
|
27
|
+
**收消息不用外部脚本。** 插件启动时自己连 NapCat 的 WebSocket(默认 `ws://127.0.0.1:3001`),收到的消息进内存缓冲并写盘。
|
|
28
|
+
|
|
29
|
+
**断线自检。** NapCat 每 30 秒发一次心跳;超过 90 秒没有任何帧,插件主动断开重连。连接、断开、自检触发都写进日志——不会再出现"线断了没人知道"。
|
|
30
|
+
|
|
31
|
+
**图片会真的取下来。** 别人发图,下载到 `<DSH_HOME>/qq-moony/media/`,记录里留本地路径,Agent 可以直接打开看。
|
|
32
|
+
|
|
33
|
+
**自动回复(可选)。** 收到私聊,随机等 2–7 秒,把来信投进一个专用会话,那边的 Agent 用 `qq_send` 回过去。投递时自动附一段记忆(`memory/MEMORY.md` 末尾 + 当天日记,约 2000 字)。
|
|
34
|
+
|
|
35
|
+
**主动说话(可选)。** 每隔一段随机时间,给它一次"想说什么就说,也可以不说"的机会。
|
|
36
|
+
|
|
37
|
+
**QQ 空间自动发说说(可选)。** 你写一段要求(内容、语气、频率都行),到点把这段原话交给它判断发不发。
|
|
38
|
+
|
|
39
|
+
**群聊(可选,两个开关分开)。**
|
|
40
|
+
- *接消息*:白名单里的群,被 @ 才应。
|
|
41
|
+
- *参与聊天*:每群记着最近三十条,隔 8–20 分钟给一次"要不要插一句"的机会,把这现场交给它判断,接不住就什么都不发。冷场(五分钟没人说话)不开口;同群冷却十分钟;群里一天最多二十条。
|
|
42
|
+
|
|
43
|
+
**打开 DSH 就自带 NapCat。** 启动时探一下 3000 端口,没通就用 `-q` 快速登录把 NapCat 拉起来——免扫码,几秒上线。
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 二、装之前必须先有
|
|
48
|
+
|
|
49
|
+
1. **QQ NT**(9.9.x)。老版 QQ 9.7 注不进去,这是死条件。
|
|
50
|
+
2. **[NapCat](https://github.com/NapNeko/NapCatQQ)** Shell 版。Windows 上用 `launcher-user.bat` 启动。
|
|
51
|
+
3. **OneBot 服务开着**:HTTP 默认 `http://127.0.0.1:3000`,WebSocket 默认 `ws://127.0.0.1:3001`,两处都要设 token。
|
|
52
|
+
|
|
53
|
+
### ⚠️ 一定要用小号
|
|
54
|
+
|
|
55
|
+
**不要拿常用号、更不要拿主号。**
|
|
56
|
+
|
|
57
|
+
NapCat 是接管整个 QQ 客户端的行为——消息收发、登录态、空间说说,全都在它的手里。QQ 那边对"非官方客户端"的判定不透明,封号也不讲道理。用主号意味着:**你的好友、群、聊天记录、空间,一起陪绑。**
|
|
58
|
+
|
|
59
|
+
小号出事的代价是"再注册一个",主号出事的代价是你没法估。
|
|
60
|
+
|
|
61
|
+
另外:小号也别绑钱包、别实名做要紧的事、别进你非去不可的群。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 三、设置页(名字叫「QQ嗦嗨嗨」)
|
|
66
|
+
|
|
67
|
+
装完重启 DSH,设置里会多一项 **QQ嗦嗨嗨**:
|
|
68
|
+
|
|
69
|
+
- **连接状态**:在线没有、登录的是谁、今天发了多少、上限多少
|
|
70
|
+
- **主动说话**:开关(点一下即时保存)
|
|
71
|
+
- **自动回复**:开关
|
|
72
|
+
- **主动间隔**:最短 / 最长(分钟),每次从区间里随机抽
|
|
73
|
+
- **每小时上限 / 每天上限**:数字,1–200 / 1–1000
|
|
74
|
+
- **群聊**:两个开关(接消息 / 参与聊天)+ 群号白名单 + 六个可调的数
|
|
75
|
+
- **QQ 空间自动发说说**:开关 + 一段提示词 + 随机间隔
|
|
76
|
+
|
|
77
|
+
开关即时生效;数字和提示词走草稿,改完点右下角**保存更改**。
|
|
78
|
+
|
|
79
|
+
⚠️ **群聊"参与聊天"很费 token**:每给一次机会都等于跑一整轮会话,哪怕它最后决定不说话。间隔别设太短。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 四、配置
|
|
84
|
+
|
|
85
|
+
优先级:**本地配置文件 > bundle patch 里的 config > 代码默认值**。
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
<DSH_HOME>/qq-moony/config.json
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"baseUrl": "http://127.0.0.1:3000",
|
|
94
|
+
"token": "你的 OneBot token",
|
|
95
|
+
"uin": 123456789,
|
|
96
|
+
|
|
97
|
+
"wsUrl": "ws://127.0.0.1:3001",
|
|
98
|
+
"listen": true,
|
|
99
|
+
"staleTimeoutMs": 90000,
|
|
100
|
+
|
|
101
|
+
"napCatDir": "C:\\path\\to\\napcat",
|
|
102
|
+
"qqUin": 123456789,
|
|
103
|
+
"autoStartNapCat": true,
|
|
104
|
+
|
|
105
|
+
"perHour": 20,
|
|
106
|
+
"perDay": 60,
|
|
107
|
+
|
|
108
|
+
"autoReply": false,
|
|
109
|
+
"replyTo": [],
|
|
110
|
+
"replyDelayMinMs": 2000,
|
|
111
|
+
"replyDelayMaxMs": 7000,
|
|
112
|
+
"sessionId": "qq-moony-auto",
|
|
113
|
+
"cwd": "",
|
|
114
|
+
"autoContext": true,
|
|
115
|
+
"maxContextChars": 2000,
|
|
116
|
+
|
|
117
|
+
"groupReply": false,
|
|
118
|
+
"groupChat": false,
|
|
119
|
+
"groupWhitelist": [],
|
|
120
|
+
"groupContextSize": 30,
|
|
121
|
+
"groupChatEveryMinMin": 8,
|
|
122
|
+
"groupChatEveryMinMax": 20,
|
|
123
|
+
"groupActiveWindowMin": 5,
|
|
124
|
+
"groupCooldownMin": 10,
|
|
125
|
+
"groupPerDay": 20,
|
|
126
|
+
|
|
127
|
+
"proactive": false,
|
|
128
|
+
"proactiveEveryMinMin": 45,
|
|
129
|
+
"proactiveEveryMinMax": 90,
|
|
130
|
+
|
|
131
|
+
"qzoneAuto": false,
|
|
132
|
+
"qzonePrompt": "",
|
|
133
|
+
"qzoneEveryMinMin": 120,
|
|
134
|
+
"qzoneEveryMinMax": 240
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
几个关键项:
|
|
139
|
+
|
|
140
|
+
- `token`:写错会报 `token verify failed`,这是第一道坎。
|
|
141
|
+
- `replyTo`:自动回复的私聊白名单;空数组表示谁发都回。
|
|
142
|
+
- `groupWhitelist`:群白名单;空数组等于群聊没开。
|
|
143
|
+
- `cwd`:自动回复会话的工作目录。指到你的工作区,它才会带上你的人设文件和记忆。
|
|
144
|
+
- `maxContextChars`:每条自动回复附多少字记忆。调小省钱,调大记得住。
|
|
145
|
+
- `staleTimeoutMs`:多久没收到帧就重连。
|
|
146
|
+
|
|
147
|
+
⚠️ **配置文件不要带 BOM。** PowerShell 的 `Set-Content` 写 UTF-8 会带 BOM,Node 的 `JSON.parse` 会抛错,整份配置被当成不存在。用这个写:
|
|
148
|
+
|
|
149
|
+
```powershell
|
|
150
|
+
[System.IO.File]::WriteAllText("路径", $json, [System.Text.UTF8Encoding]::new($false))
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
(插件读的时候已经会剥 BOM,但写文件那边的坑还是留着。)
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 五、防封
|
|
158
|
+
|
|
159
|
+
写在代码里,不靠自觉:
|
|
160
|
+
|
|
161
|
+
- 每条消息发出前**随机等 2–7 秒**
|
|
162
|
+
- **一小时 / 一天上限**,到顶直接拒发(不是提醒,是拒绝)
|
|
163
|
+
- 群里默认不接;开了也只接白名单 + 被 @ 的,且同群冷却 10 分钟、全群日额 20
|
|
164
|
+
- 额度记账在 `<DSH_HOME>/qq-moony/sent.log`,跨会话累计
|
|
165
|
+
|
|
166
|
+
真正决定会不会被封的是拿它做什么。插件只能保证不让你手滑:
|
|
167
|
+
|
|
168
|
+
**只回不主动、不群发、不刷屏、不加好友、不发链接。**
|
|
169
|
+
|
|
170
|
+
### 群聊的额外一条
|
|
171
|
+
|
|
172
|
+
放进熟人群之前想清楚:那儿的人未必认识这个号。一个陌生头像突然接话,第一反应是"这谁"。要是正赶上聊私事(家人、成绩、室友之间的事),插一句就不只是尴尬。
|
|
173
|
+
|
|
174
|
+
建议:先只开"接消息",让别人 `@` 一次看看反应;觉得合适再开"参与聊天"。
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 六、已知限制
|
|
179
|
+
|
|
180
|
+
- **不装 NapCat、不注入 QQ。** 那部分在客户端侧,插件碰不到。
|
|
181
|
+
- **不是官方机器人。** 走客户端协议端,有封号风险,别拿主号试。
|
|
182
|
+
- **不支持语音、文件。** 目前只处理文字和图片。
|
|
183
|
+
- **主动、空间、自动回复、群聊共用一个会话**(`qq-moony-auto`),理论上会互相排队。
|
|
184
|
+
- **自动回复是"另一个我"**:同工作区、共享记忆和文件,但不共享你正在聊的那个窗口的上下文。
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 七、出问题先看这里
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
<DSH_HOME>/qq-moony/debug.log
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
常见症状按顺序排查:
|
|
195
|
+
|
|
196
|
+
1. **`token verify failed`** → token 写错,或 NapCat 那边没设。
|
|
197
|
+
2. **能发不能收** → 看 debug.log 有没有 `WebSocket 已连上`;没有就查 3001 端口和 NapCat 的 `websocketServers`。
|
|
198
|
+
3. **收到消息但不回** → 看有没有"自动回复检查"那行;有检查没投递,多半是白名单或 `autoReply` 没开;投递了没回应,看 `sessionId` 对应的会话起没起来。
|
|
199
|
+
4. **页面报 `SyntaxError: ... not valid JSON`** → 接口没挂上,重启一次 DSH。
|
|
200
|
+
5. **设置页改了没生效** → 检查是不是带 BOM;数字项要点"保存更改"。
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 八、版本
|
|
205
|
+
|
|
206
|
+
见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
207
|
+
|
|
208
|
+
## License
|
|
209
|
+
|
|
210
|
+
MIT
|