dsh-qq-link 1.4.8 → 1.5.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 CHANGED
@@ -1,3 +1,47 @@
1
+ ## 1.5.0 — 2026-11-01
2
+
3
+ **能收「戳一戳」这类通知事件了(可选,默认关)**
4
+
5
+ - 🐞 以前收不到的原因很实在:插件收消息靠**轮询历史**,而「戳一戳」**不是消息** ——
6
+ 历史里永远没有它,OneBot 那边只通过 **HTTP 上报(POST)** 推出来。
7
+ - ✨ 现在多了一个上报入口 `POST <前缀>/notice`:把 QQ 后端的「HTTP 上报」指过来就能收。
8
+ 设置页「收「戳一戳」这类通知」打开才生效(默认关,不配就不影响原来收发)。
9
+ - ✅ 只转「戳一戳」。加群、退群、撤回这些暂时不转 —— 先把这一条走通。
10
+ - ⚠ 上报会把**所有**事件都推过来(包括消息),这个入口**只认 `notice`**,消息照旧走轮询 —— **不会重复转两次**。
11
+ - 🔒 可以填「上报口令」,填了地址就要带 `?token=…`;留空 = 不要口令(只在本机用无所谓)。
12
+
13
+ **设置页那些接口,现在只认「本人」**
14
+
15
+ - 🔒 插件自己挂在 webServer 上的地址**不会自动带 DSH 的登录校验** —— 也就是说,
16
+ 你随便打开一个网页,那个网页都能悄悄 POST 到 `<前缀>/save` 改配置
17
+ (把 NapCat 指到别人的服务器上、或者替你发消息)。
18
+ 现在这类请求要先过宿主的信任检查;`/receive`(外面往插件里推消息的数据口)不受这道门管。
19
+ - ⚠ 写法是**失败就放行**:拿不到 `connection` 服务、老宿主没这个接口、检查本身抛错 —— 全当没事放过去。
20
+ 宁可这一版防不住,也绝不能因为宿主换个版本就把设置页锁死。真正拒绝只有一种:宿主**明确**说不合法(401 / 403)。
21
+ - 每拒一次都会记一行日志 —— 哪天设置页打不开,能一眼看出是不是它干的。
22
+
23
+ **发消息加了超时:NapCat 收了请求却不回时,这一轮不再永远挂着**
24
+
25
+ - 🐞 以前 `发到QQ` 那条 fetch **没有任何超时**。NapCat 卡住(或者网络半通)时请求会一直挂着,
26
+ 这一轮就永远停在「正在发」,后面攒着的消息也全堵在它后面。
27
+ - ✅ 现在单条发送 **60 秒**超时,超了就按「这条发送失败」记一笔,后面的照常走。
28
+ - ⚠ 为什么不用更短的 15 秒:**发图是把图转成 base64 一起 POST 上去的**,一张几 MB 的图在慢机器上
29
+ 十几秒很正常;超时一断这条就丢了(不重试)。60 秒是「卡住了能自己回来、正常发图又不误伤」的折中。
30
+
31
+ ## 1.4.9 — 2026-11-01
32
+
33
+ **反过来了:你在 DSH 窗口里自己聊的话被推到了 QQ**
34
+
35
+ - 🐞 现象:开着「只回 QQ 唤醒」+「自动触发也发」,在窗口里自己聊天,**内容也被发到 QQ**。
36
+ - 根因:1.4.8 修好了「读得到 `source.kind`」,但记「这一轮是谁起的头」那张表是**后写覆盖前写**的。
37
+ 而宿主会跟在你那句话**后面**再塞几条 `user/message`(实测一个回合是 `user` → `runtime-context` → `time-context`),
38
+ 于是你的 `user` 被 `runtime-context` 盖掉 ⇒ 这一轮看起来「不是你打的」⇒ 落到「不是 QQ 唤醒的」那一支,
39
+ 而「自动触发也发」开着就放行了。
40
+ - ✅ 现在**只认第一次**(话头只有一个,就是先开口的那个),而且**跳过搭车的注入**:
41
+ `runtime-context` / `time-context` / `skill-catalog` / `compact-checkpoint` / `model-selection` /
42
+ `her-words` / `memory`,外加 `repeat-tool-reminder*` / `plugin:*` 两类前缀。
43
+ - ⚠ 漏网不会炸,只会让那一轮被当成「自动触发」;DSH 以后要是加了新的注入类型,这份名单要补一行。
44
+
1
45
  ## 1.4.8 — 2026-11-01
2
46
 
3
47
  **QQ 转进来的消息被判成「你在 DSH 窗口里自己打的」—— 「只回 QQ 唤醒」开着时,QQ 那边永远收不到回复**
package/README.md CHANGED
@@ -202,11 +202,37 @@ dsh plugin --profile desktop add github:Yuuyuko-uu/dsh-qq-link
202
202
  - 连不上 / 10 秒没回 / 后端拒绝,三种说法不一样,看它回的那句话就知道是哪一种。
203
203
  - 工具只挂在**绑了 QQ 的会话**上;没绑 QQ 的会话里看不见它们。
204
204
 
205
+ ## 收「戳一戳」(可选)
206
+
207
+ 戳一戳、加群、撤回这些叫**通知事件**,它们**不是消息** —— 插件收消息靠轮询历史,
208
+ 而历史里永远没有「谁戳了你一下」。所以这类只能让 QQ 后端**主动推过来**。
209
+
210
+ 想收的话两步:
211
+
212
+ 1. **设置页 →「收「戳一戳」这类通知」打开**(默认关)。
213
+ 2. 把后端(NapCat / SnowLuma)的 **HTTP 上报** 地址指到:
214
+
215
+ ```
216
+ http://127.0.0.1:<DSH 的端口>/dsh-qq-bridge/notice
217
+ ```
218
+
219
+ 端口就是浏览器打开 DSH 时那个地址里的端口。设置页里那行说明会把它写全。
220
+ 填了「上报口令」的话,地址后面再加 `?token=你的口令`。
221
+
222
+ 说清三件事:
223
+
224
+ - **只转「戳一戳」**。加群、退群、撤回这些暂时不转 —— 先看戳一戳这条通不通。
225
+ - 上报会把**所有**事件都推过来(包括消息),插件**只认 `notice`**,
226
+ 消息照旧走轮询 —— **不会重复转两次**。
227
+ - 上报是**单向**的:它推给插件,插件不用回调它。所以配错了不会影响原来收发消息。
228
+
205
229
  ## 现在就能用的接口
206
230
 
207
231
  - `GET /dsh-qq-bridge/state` —— 配置、日志、会话清单、以及「连着的 QQ 是哪个号/昵称」。
208
232
  - `POST /dsh-qq-bridge/save` —— 存配置(body 里给要改的键)。
209
233
  - `POST /dsh-qq-bridge/test-send` —— **真发**测试句(绕过试运行)。
234
+ - `POST /dsh-qq-bridge/notice` —— 收 QQ 后端推上来的通知事件(要打开「收通知」)。
235
+ - `POST /dsh-qq-bridge/receive` —— 本机别的东西往会话里灌一句话(不是 QQ 来的)。
210
236
 
211
237
  ## 自测(不装插件也能跑)
212
238