dsh-qq-tools 0.8.2 → 0.9.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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # dsh-qq-tools
2
2
 
3
- 给 DSH(DeepSeek Harness)里的大肥鱼会话用的 QQ 群/私聊工具,走 OneBot 11 HTTP + WebSocket。系统表情在 SnowLuma / NapCat 上都能发;收藏表情用 SnowLuma 的自定义表情扩展接口,和 QQ 客户端里的收藏夹是同一份数据。
3
+ 给 DSH(DeepSeek Harness)里的大肥鱼会话用的 QQ 群/私聊工具,走 OneBot 11 HTTP + WebSocket。系统表情在 SnowLuma / NapCat 上都能发;收藏表情、更改头像、好友管理和 QQ 空间走 SnowLuma 的扩展接口,和 QQ 客户端里的数据是同一份。
4
4
 
5
- 8 个工具各自是一个独立的 cordis 组件,外加一个负责选择挂载会话的设置组件,在 DSH 插件页的「包含的组件」里可以逐个开关:
5
+ 11 个工具组各自是一个独立的 cordis 组件,外加一个负责选择挂载会话的设置组件,在 DSH 插件页的「包含的组件」里可以逐个开关:
6
6
 
7
7
  | 组件 | 工具 | 说明 |
8
8
  | --- | --- | --- |
@@ -14,15 +14,18 @@
14
14
  | 收藏表情 | `qq_list_faces` / `qq_favorite_face` | 看/管理 QQ 账号收藏夹(SnowLuma):收藏图片、取消收藏、改备注、移到最前 |
15
15
  | 私聊 | `qq_list_friends` / `qq_get_private_history` / `qq_send_private_message` | 好友列表、私聊记录、发私聊消息;同时负责私聊消息唤醒 |
16
16
  | 戳一戳 | `qq_send_poke` | 戳人;同时负责接收戳一戳事件 |
17
+ | 更改头像 | `qq_set_avatar` | 换自己的 QQ 头像:链接、本机文件,或从聊天记录里取图 |
18
+ | 好友管理 | `qq_get_friend_info` / `qq_list_friend_categories` / `qq_update_friend` / `qq_delete_friend` / `qq_send_like` / `qq_list_friend_requests` / `qq_handle_friend_request` | 好友资料、备注、分组、删好友、名片赞,以及好友申请的查看和处理 |
19
+ | QQ空间 | `qq_list_qzone` / `qq_get_qzone_post` / `qq_send_qzone_post` / `qq_manage_qzone` | 说说和好友动态、详情评论、发说说、点赞/评论/删除/改权限/拉黑 |
17
20
  | 挂载会话 | — | 插件页里的「配置」页面:下拉选择 QQ 消息唤醒哪个 DSH 会话 |
18
21
 
19
- 关掉「发群消息」会同时停掉 @ 提醒轮询,关掉「私聊」会同时停掉私聊消息唤醒,关掉「戳一戳」会同时停掉戳一戳通知;三个只读工具互不影响。关掉「挂载会话」只会让配置页面不可用,已经写进配置的 `targetSession` 仍然生效。
22
+ 关掉「发群消息」会同时停掉 @ 提醒轮询,关掉「私聊」会同时停掉私聊消息唤醒,关掉「戳一戳」会同时停掉戳一戳通知,关掉「好友管理」会同时停掉好友申请收件箱(已经收到的不受影响,但插件重启后普通申请会丢);其他只读工具互不影响。关掉「挂载会话」只会让配置页面不可用,已经写进配置的 `targetSession` 仍然生效。
20
23
 
21
24
  ## 目录结构
22
25
 
23
26
  ```
24
- cordis.patch.yml 9 个组件行
25
- lib/shared.js 共享核心:配置、OneBot、挂载、@ 轮询、私聊唤醒、戳一戳、表情、观察窗
27
+ cordis.patch.yml 12 个组件行
28
+ lib/shared.js 共享核心:配置、OneBot、挂载、@ 轮询、私聊唤醒、戳一戳、表情、头像、好友管理、QQ 空间、观察窗
26
29
  lib/client.js 浏览器半侧:插件页里的挂载会话下拉框
27
30
  lib/index.js 包根 carrier(承载浏览器半侧和挂载会话接口),也是旧的全量入口
28
31
  locale/ 包根行在插件页显示的标题和说明
@@ -34,6 +37,10 @@ tools/qq-send-face/
34
37
  tools/qq-favorite-faces/
35
38
  tools/qq-private-chat/
36
39
  tools/qq-send-poke/
40
+ tools/qq-set-avatar/
41
+ tools/qq-friend-management/
42
+ tools/qq-qzone/
43
+ test/smoke.mjs 离线冒烟测试:假 OneBot HTTP 服务 + 临时 DSH_HOME
37
44
  ```
38
45
 
39
46
  「挂载会话」用的是包根行(模块名 `dsh-qq-tools`,所以插件卡片名仍是 `dsh-qq-tools`):DSH 只从包根发现 `dsh.client`,子路径行不会扫描;`config.carrier: true` 让它只承载设置接口,不会重复挂一遍工具。
@@ -77,7 +84,7 @@ tools/qq-send-poke/
77
84
  - `targetSession` 是目标会话 ID;可以在插件页「挂载会话 → 配置」里下拉选择,也可以直接改这个文件;留空时工具不会挂到任何会话。
78
85
  - `groups` 是允许看/发的群;空数组表示不限制。
79
86
  - `mentionEnabled` / `pokeEnabled` / `privateEnabled` 分别是 @ 轮询、戳一戳事件、私聊唤醒的总闸,对应组件关掉时它们也不会运行。
80
- - `privateUsers` 是允许唤醒和私聊工具的 QQ 白名单;空数组表示不限制。非空时,不在列表里的私聊消息不会唤醒,`qq_list_friends` 也不会列出他们。
87
+ - `privateUsers` 是允许唤醒和私聊工具的 QQ 白名单;空数组表示不限制。非空时,不在列表里的私聊消息不会唤醒,`qq_list_friends` 也不会列出他们;好友资料/备注/分组/删好友/名片赞和查看别人的 QQ 空间也只对名单里的 QQ 生效。好友申请的处理不受这条限制,否则新申请人永远进不来。
81
88
 
82
89
  ## 表情
83
90
 
@@ -105,6 +112,50 @@ tools/qq-send-poke/
105
112
  - `qq_get_private_history` 的消息带 `#message_id`,可以传给 `qq_send_private_message` / `qq_send_face` 的 `reply_to` 做引用回复。
106
113
  - 私聊唤醒的 `source.kind` 是 `qq-private`,和群聊的 `qq-mention` / `qq-followup` / `qq-poke` 区分开。
107
114
 
115
+ ## 更改头像
116
+
117
+ `qq_set_avatar` 换自己的 QQ 头像,走 SnowLuma 的 `set_qq_avatar`。
118
+
119
+ - `file` 传 `http(s)` 链接、`base64://`、`data:image/...` 或本机文件路径;
120
+ - 也可以用 `message_id` + `index` 直接从聊天记录里取一张图(和 `qq_favorite_face` 的取图方式一致);
121
+ - 本机路径指的是 SnowLuma 服务端能读到的路径;SnowLuma 不在同一台机器时用链接或 `base64://`;
122
+ - 工具描述里明确要求只在用户提出换头像时调用,换完不会重复说明。
123
+
124
+ ## 好友管理
125
+
126
+ 好友管理组件提供 7 个工具,数据都来自 SnowLuma 的好友接口:
127
+
128
+ - `qq_get_friend_info`:昵称、备注、分组、性别年龄、等级、VIP、是否单向好友;不在好友列表里的人也会尽量给出陌生人资料。受 `privateUsers` 白名单限制。SnowLuma 的 `get_unidirectional_friend_list` 在部分版本会报 protobuf 错误,这时单向好友显示「未知」。
129
+ - `qq_list_friend_categories`:好友分组和每组里的成员,返回 `category_id` / `category_name`。接口不可用时退回普通好友列表;接口漏掉的人会用普通好友列表补齐,放进「未分组(接口未返回)」(真实环境遇到过 86 个好友只返回 83 个)。
130
+ - `qq_update_friend`:改备注(`remark` 传空字符串清空)或移动分组(`category_id` 或唯一匹配的 `category_name`)。
131
+ - `qq_delete_friend`:删好友,不可撤销;必须显式传 `confirm=true`,`block=true` 会在删除时同时屏蔽对方。
132
+ - `qq_send_like`:给好友名片点赞,`times` 默认 1,最多 20。
133
+ - `qq_list_friend_requests`:待处理的好友申请。普通申请来自插件运行期间的 WebSocket `request` 事件;可疑申请通过 `get_doubt_friends_add_request` 读取。每项都带 `flag`。
134
+ - `qq_handle_friend_request`:按 `flag`(或 `user_id` 在收件箱里查)同意/拒绝,`approve` 必须显式传 `true` 或 `false`;`kind=friend` 处理普通申请,`kind=doubt` 处理可疑申请。
135
+
136
+ SnowLuma 没有「列出历史好友申请」的 HTTP 接口,所以普通申请只在插件启动后收到才进收件箱;更早的申请要去 QQ 客户端看。关掉好友管理组件会停掉这个收件箱的 WebSocket 监听。
137
+
138
+ ## QQ空间
139
+
140
+ QQ空间组件提供 4 个工具,走 SnowLuma 的「空间」扩展:
141
+
142
+ - `qq_list_qzone`:默认列自己的说说;传 `target_uin` 看别人的;`feeds=true` 看好友动态,翻页时把上一页的 `next_cursor` 放进 `cursor`。返回 `tid`、正文、时间、评论数和图片预览(最多 4 张)。好友动态只保留说说(`appid=311`);部分 SnowLuma 版本不解析 feed 的 `tid/content`,工具会从 HTML 里补回 `tid`,补不回来的只能看不能互动;相册、广告等非说说会跳过并提示数量。
143
+ - `qq_get_qzone_post`:看一条说说的详情和评论,返回评论的 `comment_id`、作者 `uin`,以及楼中楼回复。
144
+ - `qq_send_qzone_post`:发说说。`content` 是正文,`images` 支持链接 / `base64://` / 本机路径(最多 9 张,本机路径同样由 SnowLuma 读取),也可以用 `message_id` + `image_indexes` 从消息里取图。`visibility` 取值:
145
+ - `public` 所有人可见(默认)
146
+ - `friends` 好友可见
147
+ - `partial` 指定好友可见(要传 `target_uins`)
148
+ - `private` 仅自己可见
149
+ - `exclude` 指定好友不可见(要传 `target_uins`)
150
+ - `qq_manage_qzone`:`action` 选一个:
151
+ - `like` / `unlike`:点赞或取消赞,`abstime` 传列表里的 `time` 更可靠;
152
+ - `comment`:评论或回复;回复一级评论传 `comment_id` + `comment_uin`,回复楼中楼再传 `reply_uin` + `reply_name`;只有普通评论能带图;
153
+ - `delete`:删除自己空间的一条说说,不可撤销,必须传 `confirm=true`;
154
+ - `set_right`:改自己空间一条说说的可见范围,参数和发说说时的 `visibility` 一致;
155
+ - `ban` / `unban`:拉黑或解除拉黑某人的空间访问(修改的是你自己空间的黑名单)。
156
+
157
+ 这些接口是 SnowLuma 的扩展,NapCat 上不一定都有;接口不可用时工具会返回 OneBot 的错误原文,不会影响群聊/私聊工具。
158
+
108
159
  ## 安装
109
160
 
110
161
  DSH 插件用 `dsh plugin` 安装。`<profile>` 换成你启动 DSH 用的 profile 名(桌面端通常是 `desktop`,Web 端常见 `web`,也可以是 `tui` 或你自己的 profile)。
@@ -115,7 +166,7 @@ DSH 插件用 `dsh plugin` 安装。`<profile>` 换成你启动 DSH 用的 profi
115
166
  dsh plugin --profile <profile> add github:cyhddyx/dsh-qq-tools
116
167
  ```
117
168
 
118
- 本插件是纯 JavaScript,没有构建步骤,所以不需要 `prepare` 脚本,也不需要给 pnpm 加 `allowBuilds` 授权。安装完成后重启 DSH,插件页里应该能看到 8 个组件,每个带开关。
169
+ 本插件是纯 JavaScript,没有构建步骤,所以不需要 `prepare` 脚本,也不需要给 pnpm 加 `allowBuilds` 授权。安装完成后重启 DSH,插件页里应该能看到 11 个工具组(外加「挂载会话」),每个带开关。
119
170
 
120
171
  ### 从 npm 安装(推荐)
121
172
 
@@ -128,7 +179,7 @@ dsh plugin --profile <profile> add dsh-qq-tools
128
179
  需要固定版本时:
129
180
 
130
181
  ```sh
131
- dsh plugin --profile <profile> add dsh-qq-tools@0.8.2
182
+ dsh plugin --profile <profile> add dsh-qq-tools@0.9.0
132
183
  ```
133
184
 
134
185
  ### 本地开发 / 自己改代码
@@ -141,7 +192,7 @@ dsh plugin --profile <profile> add link:/path/to/dsh-qq-tools
141
192
 
142
193
  ```sh
143
194
  pnpm pack
144
- dsh plugin --profile <profile> add ./dsh-qq-tools-0.8.2.tgz
195
+ dsh plugin --profile <profile> add ./dsh-qq-tools-0.9.0.tgz
145
196
  ```
146
197
 
147
198
  `dsh plugin` 会在安装后自动把这个包追加进 profile 的 `dsh.profile.bundles`,不用手改 `package.json`。卸载用:
@@ -154,9 +205,11 @@ dsh plugin --profile <profile> remove dsh-qq-tools
154
205
 
155
206
  - DSH 0.2.x(cordis 插件体系)
156
207
  - Node.js 22+(内置 `fetch` / `WebSocket`)
157
- - SnowLuma 提供 OneBot 11 HTTP 接口和 WebSocket 事件(收藏表情需要 SnowLuma;系统表情 NapCat 也能发)
208
+ - SnowLuma 提供 OneBot 11 HTTP 接口和 WebSocket 事件。系统表情、群聊和私聊 NapCat 也能用;收藏表情、更改头像、好友分组/备注/申请和 QQ 空间依赖 SnowLuma 的扩展接口,NapCat 上不保证可用。
158
209
  - 可选:`sharp`(GIF 拆帧、尺寸被拒时的兜底重编码)。会从 `SHARP_PATH`、插件自己的 `node_modules`、DSH 宿主 runtimeDir(桌面版通过 `process.argv[2]` 传入)等位置自动查找;找不到时 GIF 交给 DSH 显示首帧,大图仍由 DSH 自动归一化(默认单张源图上限 20MiB),图片不会因此丢失。
159
210
 
211
+ 改完代码可以跑 `npm test`:它会起一个假 OneBot HTTP 服务、用临时 `DSH_HOME` 加载工具,检查头像、好友管理、好友申请和 QQ 空间的请求体与校验,不连真实 QQ,也不碰 `~/.dsh/qq-tools-config.json`。
212
+
160
213
  ---
161
214
 
162
- 版本:0.8.2
215
+ 版本:0.9.0
package/cordis.patch.yml CHANGED
@@ -1,10 +1,13 @@
1
- # DSH 大肥鱼 QQ 群/私聊工具:9 个组件,插件页里可以逐个开关
1
+ # DSH 大肥鱼 QQ 群/私聊工具:11 个组件,插件页里可以逐个开关
2
2
  # · 列出 QQ 群 / 看群聊天记录 / 看群成员 —— 只读工具
3
3
  # · 发群消息 —— 同时负责 @ 提醒与群后续轮询
4
4
  # · 发表情 —— 在群里或私聊里发系统表情或 QQ 收藏夹里的自定义表情
5
5
  # · 收藏表情 —— QQ 收藏夹(SnowLuma):qq_list_faces + qq_favorite_face
6
6
  # · 私聊 —— 好友列表 / 私聊记录 / 发私聊消息,同时负责私聊消息唤醒
7
7
  # · 戳一戳 —— 同时负责接收戳一戳事件
8
+ # · 更改头像 —— qq_set_avatar(SnowLuma set_qq_avatar)
9
+ # · 好友管理 —— 资料/备注/分组/删好友/名片赞,以及好友申请收件箱
10
+ # · QQ空间 —— 说说列表、好友动态、详情评论、发说说和管理
8
11
  # · 挂载会话 —— 插件页里的「配置」页面,选择 QQ 消息唤醒哪个 DSH 会话
9
12
  - insert:
10
13
  - id: qq-tools-list-groups
@@ -23,6 +26,12 @@
23
26
  name: 'dsh-qq-tools/tools/qq-private-chat'
24
27
  - id: qq-tools-send-poke
25
28
  name: 'dsh-qq-tools/tools/qq-send-poke'
29
+ - id: qq-tools-set-avatar
30
+ name: 'dsh-qq-tools/tools/qq-set-avatar'
31
+ - id: qq-tools-friend-management
32
+ name: 'dsh-qq-tools/tools/qq-friend-management'
33
+ - id: qq-tools-qzone
34
+ name: 'dsh-qq-tools/tools/qq-qzone'
26
35
  # 包根行:DSH 只从包根发现 dsh.client,浏览器半侧和挂载会话接口都挂在这里。
27
36
  - id: qq-tools-root
28
37
  name: 'dsh-qq-tools'