@zaofan/dsh-qqbot 1.1.6 → 1.2.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 +23 -6
- package/README_EN.md +10 -0
- package/client/qqbot-settings.js +114 -26
- package/dist/api/group-admin.d.ts +13 -3
- package/dist/api/group-admin.d.ts.map +1 -1
- package/dist/api/group-admin.js +49 -5
- package/dist/api/group-admin.js.map +1 -1
- package/dist/channel-tools.d.ts.map +1 -1
- package/dist/channel-tools.js +386 -14
- package/dist/channel-tools.js.map +1 -1
- package/dist/commands/answer.d.ts +29 -0
- package/dist/commands/answer.d.ts.map +1 -0
- package/dist/commands/answer.js +29 -0
- package/dist/commands/answer.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/misc.d.ts.map +1 -1
- package/dist/commands/misc.js +15 -1
- package/dist/commands/misc.js.map +1 -1
- package/dist/commands/outmode.d.ts.map +1 -1
- package/dist/commands/outmode.js +3 -2
- package/dist/commands/outmode.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/features/broadcast.d.ts.map +1 -1
- package/dist/features/broadcast.js +3 -1
- package/dist/features/broadcast.js.map +1 -1
- package/dist/features/group-hub.d.ts +3 -1
- package/dist/features/group-hub.d.ts.map +1 -1
- package/dist/features/group-hub.js +5 -3
- package/dist/features/group-hub.js.map +1 -1
- package/dist/features/group-join-request.d.ts.map +1 -1
- package/dist/features/group-join-request.js +6 -5
- package/dist/features/group-join-request.js.map +1 -1
- package/dist/features/outbound-mode-switch.d.ts +8 -2
- package/dist/features/outbound-mode-switch.d.ts.map +1 -1
- package/dist/features/outbound-mode-switch.js +2 -2
- package/dist/features/outbound-mode-switch.js.map +1 -1
- package/dist/features/poll-join-requests.js +2 -2
- package/dist/features/poll-join-requests.js.map +1 -1
- package/dist/features/qq-user-questions.d.ts +127 -4
- package/dist/features/qq-user-questions.d.ts.map +1 -1
- package/dist/features/qq-user-questions.js +314 -74
- package/dist/features/qq-user-questions.js.map +1 -1
- package/dist/gateway/bootstrap.d.ts.map +1 -1
- package/dist/gateway/bootstrap.js +17 -0
- package/dist/gateway/bootstrap.js.map +1 -1
- package/dist/gateway/data-root.d.ts +13 -4
- package/dist/gateway/data-root.d.ts.map +1 -1
- package/dist/gateway/data-root.js +22 -12
- package/dist/gateway/data-root.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/transport/outbound.d.ts.map +1 -1
- package/dist/transport/outbound.js +60 -5
- package/dist/transport/outbound.js.map +1 -1
- package/package.json +1 -1
- package/settings-host.js +75 -6
package/README.md
CHANGED
|
@@ -69,6 +69,12 @@
|
|
|
69
69
|
- 收到【审批轮询】= **系统唤醒**——主动 `group_join_requests` 查看新申请,把申请人+验证信息汇报给主人,等主人拍板再批/拒
|
|
70
70
|
- 消息里带 `@bot` = 有人 @ 本机器人(`@bot` 就是自己)
|
|
71
71
|
- 会话归属、工作区挂载等宿主问题已按官方机制修好(移植上游 PR #21,幂等、全 fail-soft)
|
|
72
|
+
- **官方接口文档**(写扩展、查事件字段/错误码、确认按钮与卡片字段时先看这里):QQ 机器人 api-v2 文档 <https://bot.q.qq.com/wiki/develop/api-v2/>
|
|
73
|
+
- **你可以自己写 markdown、自己写工具、自己写斜杠命令**(不用等人给你做功能):
|
|
74
|
+
- 卡片正文就是**你直接写的 markdown**(`#` 标题、加粗、``、代码块)——**本插件没有模板引擎,模板就是你**;要"带按钮的卡片"则走 botplay 事件或 dock 卡片编辑器(按钮回调须由 host 注册)。
|
|
75
|
+
- 工具/命令写在**账号数据目录**的 `.qqbot-extensions/{tools,commands}/`,**不在插件包内** → **升级/重装插件(换 node_modules)不会覆盖你的扩展**,扩展原样保留。
|
|
76
|
+
- 工具 `run(args, env)` 的 `env` 里有 `sender` + `replyTarget`(内置 `send_media` 用的同一个发送器),**工具能自己发 markdown 卡/图/语音/文件**:所以「调接口取数据 → 拼卡片 → 发出去」一个工具就能闭环,不必绕回你。用户说"给我写个点歌工具"时,照契约现场写即可。
|
|
77
|
+
- 生效方式:工具发 `/tools-reload`(或调 `tools_reload`)即时生效;命令需重启宿主;**同名工具改内容会被注册表跳过 → 换名或重启**。
|
|
72
78
|
|
|
73
79
|
> 🛡️ 仓库**不含**任何机器人凭据、图库数据、日志与个人路径(发布前已清理)。AppID/AppSecret 请走环境变量或 Web 面板注入,**不要提交进 git**。
|
|
74
80
|
|
|
@@ -233,10 +239,11 @@ npx @deepseek-ai/dsh web --patch /path/to/dsh-qqbot/cordis.dev.yml
|
|
|
233
239
|
|
|
234
240
|
**群组管理四个独立开关(dock 设置, v1.1.4+)**: `唤醒AI`=唤醒群管会话 AI 处理; `注入群管会话`=hub web 注记(不唤醒); `通知普通群`=申请所在群 web 注记(不唤醒); `唤醒普通群AI`=唤醒申请所在群 AI——事件与轮询两条链路都生效, 互不干扰。
|
|
235
241
|
|
|
236
|
-
**跨群/跨会话工具**(v1.1.0+):
|
|
242
|
+
**跨群/跨会话工具**(v1.1.0+ / **v1.2.0 扩充**):
|
|
237
243
|
- `group_join_requests(gid=…)` / `group_approve_join(member_openids=…)`: 传 `gid` 可查询/审批**指定群**的入群申请(不限于当前会话群), 支持一次批量审批多人;
|
|
238
|
-
- `session_list`: 列出全部会话(含群注册表里的"潜在群", 重启后仍可靠)
|
|
239
|
-
- `
|
|
244
|
+
- `session_list` / `session_wake`: 列出全部会话(含群注册表里的"潜在群", 重启后仍可靠)供寻址 / 向指定会话发消息并唤醒对方 LLM(可带 `media` 跨群发图);
|
|
245
|
+
- **`broadcast_send`(v1.2.0)**: **一键群发** —— 同一段内容一次发到多个群/私聊, `targets` 直接写**分组名 / 群名 / 备注或 openid**; 走插件广播队列(串行+失败重试, 与 dock「📤 群发 · 广播」面板**同一份任务**), 默认直接发, 返回逐目标 `message_id`, 2 分钟内可 `action:"recall"` 撤回;
|
|
246
|
+
- **`target_group`(v1.2.0)**: **分组管理** —— list/create/rename/delete/add/remove, 读写的正是 dock「📇 群组管理 → 🗂 分组」那份数据 → **AI 与主人共用同一份分组**: 主人在面板分好组, AI 直接"发给群友"就能群发。
|
|
240
247
|
|
|
241
248
|
**配置项**(Web 面板 ⑥ 可改, 见下表 `groupAdmin.*`)
|
|
242
249
|
|
|
@@ -249,7 +256,8 @@ npx @deepseek-ai/dsh web --patch /path/to/dsh-qqbot/cordis.dev.yml
|
|
|
249
256
|
| `provider` | string | `deepseek-official` | LLM 提供商名称 |
|
|
250
257
|
| `model` | string | `deepseek-chat` | 模型名称 |
|
|
251
258
|
| `preset` | string | - | Agent preset id |
|
|
252
|
-
| `cwd` | string | `process.cwd()` | Agent 工作目录 |
|
|
259
|
+
| `cwd` | string | `process.cwd()` | Agent 工作目录(**不是**数据目录) |
|
|
260
|
+
| `dataRoot` | string | `{cwd}/dshqqbot` | 插件数据根(表情包 / `.qqbot` / `.qqbot-extensions`)。**默认就在 `{cwd}/dshqqbot`** —— 工作目录保持干净; 想放别处显式配置; 老数据首次启动自动迁入 |
|
|
253
261
|
| `requireMention` | boolean | `true` | 群聊是否需要 @bot 才触发 |
|
|
254
262
|
| `groupPrompt` | string | - | 群聊额外 system prompt |
|
|
255
263
|
| `directPrompt` | string | - | 私聊额外 system prompt |
|
|
@@ -272,6 +280,7 @@ npx @deepseek-ai/dsh web --patch /path/to/dsh-qqbot/cordis.dev.yml
|
|
|
272
280
|
|------|------|
|
|
273
281
|
| `/outmode` | 查看当前出站模式与四档说明 |
|
|
274
282
|
| `/outmode adaptive` | 切到 **适配主动**(默认): 收到真人消息前5条带引用回你, 之后自动转独立消息, 连发不被吞 |
|
|
283
|
+
| `/outmode detail` | 切到 **详细主动**(v1.2.0): 聊天同"适配主动", 但**额外把 AI 的工具调用/结果也推到 QQ**(看进度用, 消息会变多) |
|
|
275
284
|
| `/outmode passive` | 切到 **被动**: 始终回复你那条(连发约4~5条后被QQ吞) |
|
|
276
285
|
| `/outmode silent` | 切到 **完全不出站**: 她照常思考但不向QQ发任何回复(web可对话) |
|
|
277
286
|
| `/outmode nothink` | 切到 **完全不思考**: QQ入站不唤醒AI, 消息只记录(逃生通道, 可随时切回) |
|
|
@@ -286,6 +295,7 @@ npx @deepseek-ai/dsh web --patch /path/to/dsh-qqbot/cordis.dev.yml
|
|
|
286
295
|
| `/botplay` | 出互动事件目录卡(点事件直接触发, 自动翻页); `/botplay 事件名` 直接触发(如 `/botplay 签到`) |
|
|
287
296
|
| `/perm` | 切换权限档: `/perm` 查看; `/perm 只读\|工作区\|全权` 切换(即时生效) |
|
|
288
297
|
| `/new [preset]` | 以指定人格开新会话(旧会话存档可回看); `/presets` 看可用人格 |
|
|
298
|
+
| `/答 <内容>` / `/ans` | **回答提问卡片**(v1.2.0): 按钮点不动或想自己打字时用 —— `/答 A`(选第1个)、`/答 1 3`(多选)、`/答 #2 B`(多个提问时指定第2问)、`/答 你的话`(不是选项 → 当自由回答原样转给 AI) |
|
|
289
299
|
| `/bot-help` | 查看所有指令 |
|
|
290
300
|
| `/tools-reload` | 热刷新 QQ 通道工具(开发用, 新工具无需重启即可用) |
|
|
291
301
|
|
|
@@ -339,9 +349,16 @@ export default {
|
|
|
339
349
|
|
|
340
350
|
### 给 AI 的要点(让 AI 帮用户写扩展时照此办)
|
|
341
351
|
1. 命令/工具文件都放**账号数据目录**的 `.qqbot-extensions/` 下(dataRoot 优先, 无则 cwd), 别放插件包内。
|
|
352
|
+
→ **升级/重装插件(换 node_modules)只动插件本体, 不会覆盖扩展目录**, 用户的扩展永久保留。
|
|
342
353
|
2. 工具入参 schema 用 JSON Schema 风格; **可选参数不带 required 字段**。
|
|
343
|
-
3.
|
|
344
|
-
|
|
354
|
+
3. `run(args, env)` 的 `env = { cwd, manager, sender, replyTarget, exec }`:
|
|
355
|
+
- `sender` + `replyTarget` 就是内置 `send_media` 用的发送器 → **工具可以自己发 markdown 卡片 / 图片 / 语音 / 文件**, 不用把内容再交回 AI。
|
|
356
|
+
- 工具返回 `{ ok, msg }`(msg 作为工具结果回给 AI); 命令返回纯文本。
|
|
357
|
+
4. 卡片正文由**你(AI)直接写 markdown**(标题/加粗/``/代码块), **本插件没有模板引擎, 不需要也不会用配置型模板**。
|
|
358
|
+
5. 生效方式: 工具发 `/tools-reload` 或调 `tools_reload` —— 新工具即时生效; **同名工具改内容会被工具注册表跳过(`already registered`) → 换名或重启宿主**; 命令一律需重启宿主(`/bot-restart`)。
|
|
359
|
+
6. 能力边界: **扩展工具无法注册"按钮点击回调"** —— 按钮回调只能由 host 侧的 botplay 事件 / dock 卡片编辑器注册。纯扩展方案的交互范式 = "卡片 + 用户回个编号", 由 AI 当状态机再调一次工具。
|
|
360
|
+
7. 示范(点歌): ①工具里 fetch 搜索接口 → ②拼一段 markdown(封面/歌名/歌手/歌词) → ③`sender.sendMarkdown(replyTarget, 卡片)` → ④要试听就 `sender.sendMedia(...)` → ⑤返回 `{ok:true,msg:'已发卡'}`。
|
|
361
|
+
8. **接口字段别猜**: 写扩展遇到不确定的官方字段/事件/错误码, 先查官方 api-v2 文档 <https://bot.q.qq.com/wiki/develop/api-v2/> (按钮 `action.type` 0=跳转/1=回调/2=指令、键盘 5 行上限、错误码等都在里面), 不要凭印象写。
|
|
345
362
|
|
|
346
363
|
## 富媒体指令(AI 回复里写标记,自动变成真消息)
|
|
347
364
|
|
package/README_EN.md
CHANGED
|
@@ -260,6 +260,16 @@ export default {
|
|
|
260
260
|
```
|
|
261
261
|
Then run `/tools-reload` (or ask the AI to call the `tools_reload` tool). Commands need a host restart.
|
|
262
262
|
|
|
263
|
+
**For AI agents — you can write these yourself (no feature request needed):**
|
|
264
|
+
- Card bodies are **plain markdown you write** (`#`, bold, ``, fenced code). This plugin has **no template engine — the model is the engine**. Cards with buttons go through a botplay event or the dock card editor (button callbacks must be registered host-side).
|
|
265
|
+
- Extensions live in the **account data directory** (`.qqbot-extensions/`), never inside the plugin package → **upgrading or reinstalling the plugin never overwrites them**.
|
|
266
|
+
- `run(args, env)` receives `env = { cwd, manager, sender, replyTarget, exec }`. `sender` + `replyTarget` is the very same sender the built-in `send_media` tool uses, so a tool can **post markdown cards / images / voice / files by itself**: "fetch an API → build markdown → send" closes the loop inside one tool.
|
|
267
|
+
- Tools reply `{ ok, msg }` (fed back to you as the tool result); commands return plain text.
|
|
268
|
+
- Hot reload: `/tools-reload` (or call `tools_reload`) picks up **new** tools; **editing a tool under the same name is skipped by the registry → rename it or restart the host**; commands always need a restart.
|
|
269
|
+
- Limitation: extensions **cannot register button callbacks** — those require a botplay event or the dock card editor. Extension-only flows are "card + user replies a number", with the AI acting as the state machine.
|
|
270
|
+
- Example (song request): fetch a search API → build a markdown card (cover / title / artist / lyrics) → `sender.sendMarkdown(replyTarget, card)` → optionally `sender.sendMedia(...)` for a preview → return `{ ok: true, msg: 'card sent' }`.
|
|
271
|
+
- API reference: when a field/event/error code is unclear, read the official QQ bot api-v2 docs <https://bot.q.qq.com/wiki/develop/api-v2/> instead of guessing (button `action.type` 0=link / 1=callback / 2=command, keyboard 5-row limit, error codes…).
|
|
272
|
+
|
|
263
273
|
## Core Modules
|
|
264
274
|
|
|
265
275
|
```
|
package/client/qqbot-settings.js
CHANGED
|
@@ -220,7 +220,7 @@ window.__ModuleLoader__.load({
|
|
|
220
220
|
groupPrompt: typeof v.groupPrompt === 'string' ? v.groupPrompt : DEFAULT_GROUP_PROMPT,
|
|
221
221
|
enableApprovals: v.enableApprovals === true,
|
|
222
222
|
approvalTimeoutMs: typeof v.approvalTimeoutMs === 'number' ? v.approvalTimeoutMs : 120000,
|
|
223
|
-
outboundMode: (v.outboundMode === '
|
|
223
|
+
outboundMode: (v.outboundMode === 'detail' || v.outboundMode === 'passive' || v.outboundMode === 'silent' || v.outboundMode === 'nothink' ? v.outboundMode : 'adaptive'),
|
|
224
224
|
groupAdmin: { enabled: v.groupAdmin && v.groupAdmin.enabled === true, owners: Array.isArray(v.groupAdmin && v.groupAdmin.owners) ? v.groupAdmin.owners : [], manageGroup: v.groupAdmin && typeof v.groupAdmin.manageGroup === 'string' ? v.groupAdmin.manageGroup : '', watchJoinRequests: !!(v.groupAdmin && v.groupAdmin.watchJoinRequests), notifyInGroup: v.groupAdmin && v.groupAdmin.notifyInGroup !== false },
|
|
225
225
|
}
|
|
226
226
|
setCfg(base); setRev(d.revision); setMsg('')
|
|
@@ -269,7 +269,7 @@ window.__ModuleLoader__.load({
|
|
|
269
269
|
groupPrompt: typeof gpOverride === 'string' ? gpOverride : (typeof cfg.groupPrompt === 'string' ? cfg.groupPrompt : ''),
|
|
270
270
|
enableApprovals: cfg.enableApprovals === true,
|
|
271
271
|
approvalTimeoutMs: typeof cfg.approvalTimeoutMs === 'number' ? cfg.approvalTimeoutMs : 120000,
|
|
272
|
-
outboundMode: cfg.outboundMode === '
|
|
272
|
+
outboundMode: cfg.outboundMode === 'detail' || cfg.outboundMode === 'passive' || cfg.outboundMode === 'silent' || cfg.outboundMode === 'nothink' ? cfg.outboundMode : 'adaptive',
|
|
273
273
|
groupAdmin: { enabled: cfg.groupAdmin && cfg.groupAdmin.enabled === true, owners: Array.isArray(cfg.groupAdmin && cfg.groupAdmin.owners) ? cfg.groupAdmin.owners : [], manageGroup: cfg.groupAdmin && typeof cfg.groupAdmin.manageGroup === 'string' ? cfg.groupAdmin.manageGroup : '', watchJoinRequests: !!(cfg.groupAdmin && cfg.groupAdmin.watchJoinRequests), notifyInGroup: cfg.groupAdmin && cfg.groupAdmin.notifyInGroup !== false },
|
|
274
274
|
}
|
|
275
275
|
fetch(UPDATE, {
|
|
@@ -285,7 +285,7 @@ window.__ModuleLoader__.load({
|
|
|
285
285
|
groupPrompt: typeof v2.groupPrompt === 'string' ? v2.groupPrompt : (typeof cfg.groupPrompt === 'string' ? cfg.groupPrompt : DEFAULT_GROUP_PROMPT),
|
|
286
286
|
enableApprovals: v2.enableApprovals === true,
|
|
287
287
|
approvalTimeoutMs: typeof v2.approvalTimeoutMs === 'number' ? v2.approvalTimeoutMs : 120000,
|
|
288
|
-
outboundMode: (v2.outboundMode === '
|
|
288
|
+
outboundMode: (v2.outboundMode === 'detail' || v2.outboundMode === 'passive' || v2.outboundMode === 'silent' || v2.outboundMode === 'nothink' ? v2.outboundMode : 'adaptive'),
|
|
289
289
|
groupAdmin: { enabled: v2.groupAdmin && v2.groupAdmin.enabled === true, owners: Array.isArray(v2.groupAdmin && v2.groupAdmin.owners) ? v2.groupAdmin.owners : [], manageGroup: v2.groupAdmin && typeof v2.groupAdmin.manageGroup === 'string' ? v2.groupAdmin.manageGroup : '', watchJoinRequests: !!(v2.groupAdmin && v2.groupAdmin.watchJoinRequests), notifyInGroup: v2.groupAdmin && v2.groupAdmin.notifyInGroup !== false },
|
|
290
290
|
})
|
|
291
291
|
setRev(d.revision); setMsg('已保存 ✓(live 生效)')
|
|
@@ -319,7 +319,7 @@ window.__ModuleLoader__.load({
|
|
|
319
319
|
NumRow({ label: '群里没人 @ 她时,隔几秒才回一次(0=每条都回)', value: cfg.behavior.freeIntervalSec, onChange: function (v) { setBehavior({ freeIntervalSec: v }) } }),
|
|
320
320
|
NumRow({ label: '有人 @ 她时,两次回复至少隔几秒(0=随叫随到)', value: cfg.behavior.mentionIntervalSec, onChange: function (v) { setBehavior({ mentionIntervalSec: v }) } }),
|
|
321
321
|
NumRow({ label: '私聊里隔几秒回一次(0=不限制)', value: cfg.behavior.directIntervalSec, onChange: function (v) { setBehavior({ directIntervalSec: v }) } }),
|
|
322
|
-
h('div', { style: { fontSize: 12, color: '#666', margin: '10px 0 2px' } }, '出站方式(连发消息 QQ 端丢失时切主动):'), h('div', { style: { display: 'flex', gap: 14, alignItems: 'center', flexWrap: 'wrap' } }, ['adaptive', 'passive', 'silent', 'nothink'].map(function (m) { var cur = (cfg.outboundMode || 'adaptive'); if (cur === 'active') cur = 'adaptive'; return h('label', { style: { display: 'inline-flex', gap: 5, alignItems: 'center', fontSize: 12, color: '#333', cursor: 'pointer' } }, h('input', { type: 'radio', name: 'qqs-outbound', checked: cur === m, onChange: function () { setCfg(function (c) { return Object.assign({}, c, { outboundMode: m }) }) } }), m === 'adaptive' ? '适配主动(推荐默认)' : (m === 'passive' ? '被动(只回最后一句)' : (m === 'silent' ? '完全不出站(静默)' : '完全不思考(QQ入站不唤醒,仅设置页)'))) })), h('div', { style: { fontSize: 12, color: '#888' } }, '适配主动=刚收到真人消息时前5条带引用回你, 第6条起自动转独立新消息(连发不被QQ吞); 一段时间没新消息的主动推送(定时等)也走独立消息。被动=始终回你那条(连发约4~5条后被QQ吞)。完全不出站=照常思考但不向QQ发任何回复(AI 可用工具切回)。完全不思考=QQ入站不唤醒AI, 消息只记录(仅本页可开; 唤醒请发 /outmode adaptive)。保存即热更新, 不用重启。'), h('div', { style: { fontSize: 12, color: '#666', margin: '10px 0 2px' } }, '延迟聚合(另一套机制,和上面冷却不冲突): 她收到消息先等一小会儿, 把连发的话攒一起综合回, 免得只回第一句。'),
|
|
322
|
+
h('div', { style: { fontSize: 12, color: '#666', margin: '10px 0 2px' } }, '出站方式(连发消息 QQ 端丢失时切主动):'), h('div', { style: { display: 'flex', gap: 14, alignItems: 'center', flexWrap: 'wrap' } }, ['adaptive', 'detail', 'passive', 'silent', 'nothink'].map(function (m) { var cur = (cfg.outboundMode || 'adaptive'); if (cur === 'active') cur = 'adaptive'; return h('label', { style: { display: 'inline-flex', gap: 5, alignItems: 'center', fontSize: 12, color: '#333', cursor: 'pointer' } }, h('input', { type: 'radio', name: 'qqs-outbound', checked: cur === m, onChange: function () { setCfg(function (c) { return Object.assign({}, c, { outboundMode: m }) }) } }), m === 'adaptive' ? '适配主动(推荐默认)' : (m === 'detail' ? '详细主动(连工具调用一起推)' : (m === 'passive' ? '被动(只回最后一句)' : (m === 'silent' ? '完全不出站(静默)' : '完全不思考(QQ入站不唤醒,仅设置页)')))) })), h('div', { style: { fontSize: 12, color: '#888' } }, '适配主动=刚收到真人消息时前5条带引用回你, 第6条起自动转独立新消息(连发不被QQ吞); 一段时间没新消息的主动推送(定时等)也走独立消息。被动=始终回你那条(连发约4~5条后被QQ吞)。完全不出站=照常思考但不向QQ发任何回复(AI 可用工具切回)。完全不思考=QQ入站不唤醒AI, 消息只记录(仅本页可开; 唤醒请发 /outmode adaptive)。保存即热更新, 不用重启。'), h('div', { style: { fontSize: 12, color: '#666', margin: '10px 0 2px' } }, '延迟聚合(另一套机制,和上面冷却不冲突): 她收到消息先等一小会儿, 把连发的话攒一起综合回, 免得只回第一句。'),
|
|
323
323
|
BoolRow({ label: '开启延迟聚合(不勾=回到来一条回一条)', value: dbc.enabled !== false, onChange: function (v) { setBehavior({ debounce: { ...dbc, enabled: v } }) } }),
|
|
324
324
|
NumRow({ label: '对方停口几秒后她才开口(默认3;0=不停顿)', value: dbc.silenceSec != null ? dbc.silenceSec : 3, onChange: function (v) { setBehavior({ debounce: { ...dbc, silenceSec: v } }) } }),
|
|
325
325
|
NumRow({ label: '攒满几条立即开口,不等对方停(默认10)', value: dbc.maxMsgs != null ? dbc.maxMsgs : 10, onChange: function (v) { setBehavior({ debounce: { ...dbc, maxMsgs: v } }) } }),
|
|
@@ -1887,7 +1887,9 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
1887
1887
|
|
|
1888
1888
|
// ── 面板状态(每个实例独立保存, 切回不丢) ──
|
|
1889
1889
|
var state = { ns: '', accts: [], gid: '', groups: [], tab: 'chat', sendScope: 'group', sendTo: '', sendName: '', sendText: '', insertCtx: true, targetQ: '', c2cs: [], joins: null, mutes: null, members: null, muteSecs: '60', bindGid: '', bindName: '', msg: '', busy: '', wantPeer: null, lookedUp: false, detected: null, detectedHit: null, chatItems: [], chatMore: false, chatBusy: '', chatErr: '', chatOldest: 0, chatText: '', chatIns: true, outMode: '', outRev: undefined, bpEvents: [], bpSel: null, bpDraft: null, rosterSel: {}, rosterScope: 'all', rosterQ: '', hubSid: '', hubRev: undefined, hubBusy: '', hubMsg: '', gaEnabled: false, gaPoll: false, gaPollWake: true, gaHubNotify: true, gaNotifyGroup: true, gaInterval: 5, gaMinCount: 1, gaMsg: '', gaBusy: '', bcDraft: null, bcTasks: null, cardMd: '', cardBtns: '', cardGid: '', cardBusy: '', cardQ: '', tgGroups: [], tgCur: '' }
|
|
1890
|
-
// 🗂 自定义目标分组(仿 QQ
|
|
1890
|
+
// 🗂 自定义目标分组(仿 QQ 分组): 2026-09-12 起**host 持久化**({dataRoot}/.qqbot/target-groups.json),
|
|
1891
|
+
// localStorage 只当秒开缓存 —— 这样 **AI 与主人共用同一份分组**(agent 侧 broadcast_send 可直接写分组名群发),
|
|
1892
|
+
// 顺带修掉"换个浏览器分组就没了"的老毛病。
|
|
1891
1893
|
// 结构: [{ id, name, members: ['group:xxx' | 'c2c:yyy', ...] }]
|
|
1892
1894
|
try {
|
|
1893
1895
|
var _tg = localStorage.getItem('qqs-target-groups')
|
|
@@ -1895,6 +1897,27 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
1895
1897
|
} catch (e) {}
|
|
1896
1898
|
function saveTgGroups() {
|
|
1897
1899
|
try { localStorage.setItem('qqs-target-groups', JSON.stringify(state.tgGroups || [])) } catch (e) {}
|
|
1900
|
+
// 同步 host(与 AI 共用); 失败不影响本地缓存与当前操作
|
|
1901
|
+
try {
|
|
1902
|
+
fetch(api('group/target-groups'), {
|
|
1903
|
+
method: 'POST', headers: { 'content-type': 'application/json' },
|
|
1904
|
+
body: JSON.stringify({ ns: state.ns || undefined, groups: state.tgGroups || [] }),
|
|
1905
|
+
}).catch(function () {})
|
|
1906
|
+
} catch (e) {}
|
|
1907
|
+
}
|
|
1908
|
+
function loadTgGroupsFromHost() {
|
|
1909
|
+
fetch(api('group/target-groups' + (state.ns ? '?ns=' + encodeURIComponent(state.ns) : '')), { cache: 'no-store' })
|
|
1910
|
+
.then(function (r) { return r.json() }).then(function (d) {
|
|
1911
|
+
if (!d || !d.ok) return
|
|
1912
|
+
var host = Array.isArray(d.groups) ? d.groups : []
|
|
1913
|
+
if (host.length > 0) {
|
|
1914
|
+
state.tgGroups = host
|
|
1915
|
+
try { localStorage.setItem('qqs-target-groups', JSON.stringify(host)) } catch (e) {}
|
|
1916
|
+
} else if ((state.tgGroups || []).length > 0) {
|
|
1917
|
+
saveTgGroups() // 迁移: 本地有、host 还空 → 推上去(第一次打开新版时发生一次)
|
|
1918
|
+
}
|
|
1919
|
+
if (state.tab === 'roster' || state.tab === 'broadcast') paintBody()
|
|
1920
|
+
}).catch(function () {})
|
|
1898
1921
|
}
|
|
1899
1922
|
// 📇 群组管理 M1: 勾选集合本地持久化(刷新/重开不丢, 供后续群发/批量操作使用)
|
|
1900
1923
|
try { var _rs = localStorage.getItem('qqs-roster-sel'); if (_rs) { var _rso = JSON.parse(_rs); if (_rso && typeof _rso === 'object') state.rosterSel = _rso } } catch (e) {}
|
|
@@ -1947,7 +1970,7 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
1947
1970
|
function loadOutMode() {
|
|
1948
1971
|
if (state.tab !== 'out') return
|
|
1949
1972
|
fetch(READ + (state.ns ? '?' + outNsQ() : '')).then(function (r) { return r.json() }).then(function (d) {
|
|
1950
|
-
if (d && d.value) { state.outMode = (d.value.outboundMode === '
|
|
1973
|
+
if (d && d.value) { state.outMode = (d.value.outboundMode === 'detail' || d.value.outboundMode === 'passive' || d.value.outboundMode === 'silent' || d.value.outboundMode === 'nothink' ? d.value.outboundMode : 'adaptive'); state.outRev = d.revision; paintBody() }
|
|
1951
1974
|
}).catch(function () {})
|
|
1952
1975
|
}
|
|
1953
1976
|
// ⚙️ 出站方式: 保存(全量 patch 只带 outboundMode; settings.update 部分合并)
|
|
@@ -1961,7 +1984,7 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
1961
1984
|
method: 'POST', headers: { 'content-type': 'application/json' },
|
|
1962
1985
|
body: JSON.stringify({ ns: state.ns || undefined, patch: patch, expectedRevision: curRev }),
|
|
1963
1986
|
}).then(function (r) { return r.json().catch(function () { return null }) }).then(function (d) {
|
|
1964
|
-
if (d && d.value) { state.outMode = (d.value.outboundMode === '
|
|
1987
|
+
if (d && d.value) { state.outMode = (d.value.outboundMode === 'detail' || d.value.outboundMode === 'passive' || d.value.outboundMode === 'silent' || d.value.outboundMode === 'nothink' ? d.value.outboundMode : 'adaptive'); state.outRev = d.revision; var h2 = panel ? panel.querySelector('#dk-out-hint') : null; if (h2) h2.textContent = '已保存 ✓ live 热更新已生效(不用重启)' }
|
|
1965
1988
|
else {
|
|
1966
1989
|
var conflicted = !!(d && d.error && String(d.error).indexOf('changed since it was read') >= 0)
|
|
1967
1990
|
if (conflicted && !attempt) { refreshOutModeAndRetry(m) }
|
|
@@ -2371,6 +2394,30 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2371
2394
|
var ta = panel && panel.querySelector('#dk-bc-text')
|
|
2372
2395
|
if (ta) ta.focus()
|
|
2373
2396
|
}
|
|
2397
|
+
/**
|
|
2398
|
+
* 撤回"勾选目标"最近一条广播消息(2026-09-12 主人要求): **不必去任务列表翻 task_id** ——
|
|
2399
|
+
* 服务端自己找该目标最新的、已成功且有 message_id 的广播记录(2 分钟窗口内)。
|
|
2400
|
+
* 主人原话: "直接在勾选里面加撤回按钮, 无条件发送撤回"。
|
|
2401
|
+
*/
|
|
2402
|
+
function recallSelectedLast() {
|
|
2403
|
+
var tg = rosterSelectedTargets()
|
|
2404
|
+
if (!tg.length) { rosterHint('先勾选要撤回的目标'); return }
|
|
2405
|
+
if (!window.confirm('撤回这些目标**最近一条广播消息**?\n\n' + tg.slice(0, 8).map(function (t) { return '· ' + (t.name || t.peerId) }).join('\n') + (tg.length > 8 ? '\n…' : '') + '\n\n(发出超过 2 分钟的会失败)')) return
|
|
2406
|
+
rosterHint('撤回中…')
|
|
2407
|
+
apiPost('group/recall-last', { ns: state.ns || undefined, targets: tg.map(function (t) { return { scope: t.scope, peerId: t.peerId } }) }).then(function (d) {
|
|
2408
|
+
if (!d || !d.ok) { rosterHint('❌ ' + ((d && d.error) || '撤回失败')); return }
|
|
2409
|
+
var rs = d.results || []
|
|
2410
|
+
var okN = rs.filter(function (r) { return r.ok }).length
|
|
2411
|
+
var fails = rs.filter(function (r) { return !r.ok })
|
|
2412
|
+
rosterHint('✅ 已撤回 ' + okN + '/' + rs.length + ' 个' + (fails.length ? ';失败 ' + fails.length + ' 个: ' + fails.slice(0, 2).map(function (r) { return (r.err || '未知') }).join(' / ') : ''))
|
|
2413
|
+
}).catch(function () { rosterHint('❌ 撤回异常') })
|
|
2414
|
+
}
|
|
2415
|
+
/** 选目标页的提示行(与 bcHint 同款, 元素 id 不同) */
|
|
2416
|
+
function rosterHint(t) {
|
|
2417
|
+
state.msg = t || ''
|
|
2418
|
+
var el = panel && panel.querySelector('#dk-roster-hint')
|
|
2419
|
+
if (el) el.textContent = t || ''
|
|
2420
|
+
}
|
|
2374
2421
|
function bcHint(t) {
|
|
2375
2422
|
state.msg = t || ''
|
|
2376
2423
|
var el = panel && panel.querySelector('.dk-msg#dk-bc-hint')
|
|
@@ -2412,6 +2459,9 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2412
2459
|
if (!panel) return
|
|
2413
2460
|
var sendB = panel.querySelector('#dk-roster-send')
|
|
2414
2461
|
if (sendB) sendB.onclick = function () { openBroadcastDraft('') }
|
|
2462
|
+
// ↩ 撤回勾选项最近消息(2026-09-12): 选目标页与广播页共用同一个按钮 id(tab 互斥渲染)
|
|
2463
|
+
var recallB = panel.querySelector('#dk-roster-recall')
|
|
2464
|
+
if (recallB) recallB.onclick = function () { recallSelectedLast() }
|
|
2415
2465
|
// 广播子页: 跳去「📇 群组管理」勾选目标(2026-09-10)
|
|
2416
2466
|
var gotoB = panel.querySelector('#dk-bc-goto')
|
|
2417
2467
|
if (gotoB) gotoB.onclick = function () { state.tab = 'roster'; paintBody(); bindBodyEvents() }
|
|
@@ -2424,15 +2474,23 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2424
2474
|
var text = ta ? ta.value.trim() : state.bcDraft.text
|
|
2425
2475
|
if (!text) { bcHint('内容不能为空'); return }
|
|
2426
2476
|
var targets = state.bcDraft.targets
|
|
2477
|
+
bcHint('发送中…')
|
|
2427
2478
|
apiPost('group/broadcast/create', { ns: state.ns || undefined, type: 'text', text: text, targets: targets }).then(function (d) {
|
|
2428
|
-
if (!d || !d.ok || !d.task) { bcHint((d && d.error) || '创建失败'); return }
|
|
2479
|
+
if (!d || !d.ok || !d.task) { bcHint('❌ ' + ((d && d.error) || '创建失败')); return }
|
|
2429
2480
|
// 二次确认: 已弹「确认群发」按钮, 这里直接 confirm 入队
|
|
2430
2481
|
return apiPost('group/broadcast/confirm', { ns: state.ns || undefined, task_id: d.task.task_id }).then(function (d2) {
|
|
2431
2482
|
state.bcDraft = null
|
|
2432
|
-
if (d2 && d2.ok) {
|
|
2433
|
-
|
|
2483
|
+
if (d2 && d2.ok) {
|
|
2484
|
+
// 2026-09-12 修: 确认后**切到「📢 广播」子页** —— 任务列表(含逐目标撤回)只在该页渲染,
|
|
2485
|
+
// 以前留在「🎯 选目标」页: 界面毫无变化(主人以为没反应/是 bug), 也从来没见过撤回按钮。
|
|
2486
|
+
state.tab = 'broadcast'
|
|
2487
|
+
state.msg = '✅ 已确认群发 ' + targets.length + ' 个目标(逐目标发送中, 2 分钟内可逐目标撤回)'
|
|
2488
|
+
paintBody(); bindBodyEvents()
|
|
2489
|
+
loadBroadcastTasks(true)
|
|
2490
|
+
startBroadcastAdvance()
|
|
2491
|
+
} else { bcHint('❌ ' + ((d2 && (d2.msg || d2.error)) || '确认失败')) }
|
|
2434
2492
|
})
|
|
2435
|
-
}).catch(function () { bcHint('创建异常') })
|
|
2493
|
+
}).catch(function () { bcHint('❌ 创建异常') })
|
|
2436
2494
|
}
|
|
2437
2495
|
var refreshB = panel.querySelector('#dk-bc-refresh')
|
|
2438
2496
|
if (refreshB) refreshB.onclick = function () { loadBroadcastTasks(true) }
|
|
@@ -2441,15 +2499,19 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2441
2499
|
var b = e.target
|
|
2442
2500
|
var cn = b.getAttribute && b.getAttribute('data-bccancel')
|
|
2443
2501
|
if (cn) { apiPost('group/broadcast/cancel', { ns: state.ns || undefined, task_id: cn }).then(function () { loadBroadcastTasks(true) }); return }
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
var
|
|
2449
|
-
|
|
2450
|
-
var
|
|
2451
|
-
|
|
2452
|
-
apiPost('group/broadcast/recall', { ns: state.ns || undefined, task_id:
|
|
2502
|
+
// 逐目标撤回(2026-09-12 重做): 任务卡片里每个"已发出"的目标自带「↩ 撤回」按钮, 点一下直接撤 ——
|
|
2503
|
+
// 不再弹 window.prompt 让主人手填 peerId 后 6 位(旧交互隐蔽又别扭, 主人根本没找到过)。
|
|
2504
|
+
var r1 = b.getAttribute && b.getAttribute('data-bcrecall1')
|
|
2505
|
+
if (r1) {
|
|
2506
|
+
var parts = String(r1).split('|')
|
|
2507
|
+
var t1 = (state.bcTasks || []).find(function (x) { return x.task_id === parts[0] })
|
|
2508
|
+
var who = t1 && t1.targets.find(function (t2) { return t2.peerId === parts[1] })
|
|
2509
|
+
bcHint('撤回中…')
|
|
2510
|
+
apiPost('group/broadcast/recall', { ns: state.ns || undefined, task_id: parts[0], peerId: parts[1] }).then(function (d) {
|
|
2511
|
+
bcHint(d && d.ok ? ('✅ 已撤回 ' + ((who && who.name) || parts[1])) : ('❌ ' + ((d && d.err) || '撤回失败')))
|
|
2512
|
+
loadBroadcastTasks(false)
|
|
2513
|
+
})
|
|
2514
|
+
return
|
|
2453
2515
|
}
|
|
2454
2516
|
}
|
|
2455
2517
|
}
|
|
@@ -2753,19 +2815,38 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2753
2815
|
+ '<button class="dk-btn ok" id="dk-bc-confirm">✅ 确认群发(发 ' + bc.targets.length + ' 个目标)</button>'
|
|
2754
2816
|
+ '<span class="dk-msg" style="flex:1;text-align:right;font-size:11px;color:#c23131">⚠️ 高影响操作: 发送后 2 分钟内可逐目标撤回</span></div>'
|
|
2755
2817
|
}
|
|
2818
|
+
// 反馈行(2026-09-12 修): bcHint() 一直在找 `#dk-bc-hint`, 但本面板从未渲染过这个元素
|
|
2819
|
+
// → 点「确认群发」后界面**零反馈**(消息其实已经发出去了, 主人以为没反应/是 bug)。
|
|
2820
|
+
out += '<div class="dk-row"><span class="dk-msg" id="dk-bc-hint" style="color:#2f9e44;font-size:12px;margin:2px 0"></span></div>'
|
|
2756
2821
|
if (state.bcTasks && state.bcTasks.length) {
|
|
2757
2822
|
out += '<div class="dk-row"><b style="font-size:12px">📋 群发任务</b>'
|
|
2758
2823
|
+ '<button class="dk-btn" id="dk-bc-refresh" style="margin-left:auto">🔄 刷新进度</button></div>'
|
|
2759
2824
|
state.bcTasks.forEach(function (tk) {
|
|
2760
2825
|
var stc = { draft: '#888', queued: '#1971c2', sending: '#f08c00', partial_failed: '#e03131', done: '#2f9e44', cancelled: '#868e96' }[tk.state] || '#888'
|
|
2761
2826
|
var okN = tk.targets.filter(function (t2) { return tk.results[t2.peerId] && tk.results[t2.peerId].ok }).length
|
|
2762
|
-
|
|
2827
|
+
// 2 分钟撤回窗口(以服务端为准): 从任务完成时刻起算的剩余秒数
|
|
2828
|
+
var left = ''
|
|
2829
|
+
if ((tk.state === 'done' || tk.state === 'partial_failed') && tk.done_at) {
|
|
2830
|
+
var sec = Math.floor((tk.done_at + 120000 - Date.now()) / 1000)
|
|
2831
|
+
left = sec > 0 ? ('可撤 ' + sec + 's') : '已过撤回窗口'
|
|
2832
|
+
}
|
|
2833
|
+
out += '<div class="dk-item" style="border:1px solid #eee;border-radius:6px;margin:2px 0;padding:4px 6px;display:block">'
|
|
2834
|
+
+ '<div style="display:flex;align-items:center;gap:6px">'
|
|
2763
2835
|
+ '<span style="font-size:11px;font-weight:700;color:' + stc + '">' + ({ draft: '草稿', queued: '排队中', sending: '发送中', partial_failed: '部分失败', done: '已完成', cancelled: '已中止' }[tk.state] || tk.state) + '</span>'
|
|
2764
2836
|
+ '<span style="flex:1;font-size:11px;color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"> ' + esc(String(tk.payload.content || '').slice(0, 30)) + '</span>'
|
|
2765
|
-
+ '<span style="font-size:11px;color:#666">' + okN + '/' + tk.targets.length + '</span>'
|
|
2837
|
+
+ '<span style="font-size:11px;color:#666">' + okN + '/' + tk.targets.length + (left ? ' · ' + left : '') + '</span>'
|
|
2766
2838
|
+ (tk.state === 'queued' || tk.state === 'sending' ? '<button class="dk-btn no" data-bccancel="' + esc(tk.task_id) + '" style="margin-left:6px">⏹ 中止</button>' : '')
|
|
2767
|
-
+ (tk.state === 'done' || tk.state === 'partial_failed' ? '<button class="dk-btn" data-bcrecall="' + esc(tk.task_id) + '" style="margin-left:6px" title="撤回该任务 2 分钟内已发的消息(逐目标)">↩ 撤回</button>' : '')
|
|
2768
2839
|
+ '</div>'
|
|
2840
|
+
// 逐目标明细 + 该目标的「↩ 撤回」(2026-09-12): 谁发出去了、谁失败了、谁能撤, 一眼看清
|
|
2841
|
+
tk.targets.forEach(function (t2) {
|
|
2842
|
+
var r2 = tk.results && tk.results[t2.peerId]
|
|
2843
|
+
var mark = !r2 ? '⏳ 待发' : (r2.ok ? '✅ 已发' : ('❌ ' + esc(String(r2.err || '失败'))))
|
|
2844
|
+
out += '<div style="display:flex;align-items:center;gap:6px;font-size:11px;color:#555;padding-left:6px">'
|
|
2845
|
+
+ '<span style="flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">' + (t2.scope === 'group' ? '👥' : '👤') + ' ' + esc(t2.name || String(t2.peerId).slice(0, 12)) + ' <span style="color:#aaa">…' + esc(String(t2.peerId).slice(-4)) + '</span> ' + mark + '</span>'
|
|
2846
|
+
+ (r2 && r2.ok ? '<button class="dk-btn no" data-bcrecall1="' + esc(tk.task_id) + '|' + esc(t2.peerId) + '" style="font-size:11px">↩ 撤回</button>' : '')
|
|
2847
|
+
+ '</div>'
|
|
2848
|
+
})
|
|
2849
|
+
out += '</div>'
|
|
2769
2850
|
})
|
|
2770
2851
|
}
|
|
2771
2852
|
out += '</div>'
|
|
@@ -2820,7 +2901,7 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2820
2901
|
+ '<button class="dk-btn ok" id="dk-tg-add"' + (state.tgCur ? '' : ' disabled') + ' title="把上面勾选的目标加入当前分组">➕ 勾选的加入本组</button>'
|
|
2821
2902
|
+ '<button class="dk-btn" id="dk-tg-remove"' + (state.tgCur ? '' : ' disabled') + ' title="把勾选的从当前分组移出">➖ 从本组移出</button>'
|
|
2822
2903
|
+ '<button class="dk-btn" id="dk-tg-pickall"' + (state.tgCur ? '' : ' disabled') + ' title="勾选当前分组的全部成员">☑ 选中本组</button>'
|
|
2823
|
-
+ '<span class="dk-msg" style="font-size:11px;color:#888"
|
|
2904
|
+
+ '<span class="dk-msg" style="font-size:11px;color:#888">分组已存到 host(与 AI 共用): 直接说"发给【分组名】"即可群发</span>'
|
|
2824
2905
|
+ '</div>'
|
|
2825
2906
|
body += '<div class="dk-row">范围: '
|
|
2826
2907
|
+ '<label style="display:inline-flex;align-items:center;gap:4px;cursor:pointer;font-size:12px"><input type="radio" name="dk-rscope" value="all"' + (state.rosterScope === 'all' ? ' checked' : '') + '> 全部</label>'
|
|
@@ -2923,7 +3004,9 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2923
3004
|
+ '<button class="dk-btn" id="dk-roster-all">全选(当前范围)</button>'
|
|
2924
3005
|
+ '<button class="dk-btn" id="dk-roster-clear">清空</button>'
|
|
2925
3006
|
+ '<span class="dk-msg" style="flex:1;text-align:right;color:#2f9e44">已选 ' + rosterSelN() + ' 个</span>'
|
|
2926
|
-
+ '<button class="dk-btn ok" id="dk-roster-send">🚀 群发勾选项</button
|
|
3007
|
+
+ '<button class="dk-btn ok" id="dk-roster-send">🚀 群发勾选项</button>'
|
|
3008
|
+
+ '<button class="dk-btn no" id="dk-roster-recall" title="撤回这些目标最近一条广播消息(2 分钟内有效); 不用去任务列表翻 task_id">↩ 撤回勾选项最近消息</button></div>'
|
|
3009
|
+
body += '<div class="dk-row"><span class="dk-msg" id="dk-roster-hint" style="color:#2f9e44;font-size:12px"></span></div>'
|
|
2927
3010
|
body += '<div class="dk-list" id="dk-roster-list"></div>'
|
|
2928
3011
|
// ── M3 群发面板(与「📤 群发 · 广播」子页共用, 2026-09-10 抽成 broadcastPanel) ──
|
|
2929
3012
|
body += broadcastPanel()
|
|
@@ -2936,7 +3019,9 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2936
3019
|
body += '<div class="dk-row" style="gap:6px;flex-wrap:wrap">'
|
|
2937
3020
|
+ '<button class="dk-btn" id="dk-bc-goto">📇 去勾选目标</button>'
|
|
2938
3021
|
+ '<button class="dk-btn ok" id="dk-roster-send"' + (btg.length ? '' : ' disabled') + ' title="把勾选的目标纳入群发">🚀 群发勾选项</button>'
|
|
3022
|
+
+ '<button class="dk-btn no" id="dk-roster-recall" title="撤回这些目标最近一条广播消息(2 分钟内有效)">↩ 撤回勾选项最近消息</button>'
|
|
2939
3023
|
+ '</div>'
|
|
3024
|
+
body += '<div class="dk-row"><span class="dk-msg" id="dk-roster-hint" style="color:#2f9e44;font-size:12px"></span></div>'
|
|
2940
3025
|
if (btg.length) {
|
|
2941
3026
|
body += '<div class="dk-item" style="border:1px solid #eef7ee;border-radius:6px;margin:4px 0;padding:3px 6px;max-height:16vh;overflow:auto">'
|
|
2942
3027
|
btg.forEach(function (t2) {
|
|
@@ -2950,9 +3035,10 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
2950
3035
|
if (om === 'nothink') body += '<div class="dk-msg" style="color:#c23131;margin:2px 0">⚠️ 当前为「完全不思考」(设置页开启): QQ 入站不唤醒 AI。发 /outmode adaptive 可唤醒。</div>'
|
|
2951
3036
|
body += '<div class="dk-row" style="font-weight:700;font-size:13px;margin:4px 0 2px">⇄ 出站方式(保存即热更新,不用重启)</div>'
|
|
2952
3037
|
body += '<div class="dk-row">'
|
|
2953
|
-
+ ['adaptive','passive','silent'].map(function (m2) { return '<label style="display:inline-flex;align-items:center;gap:4px;cursor:pointer;font-size:12px;color:#333"><input type="radio" name="dk-outmode" value="' + m2 + '"' + (om === m2 ? ' checked' : '') + '> ' + (m2==='adaptive' ? '适配主动(推荐默认)' : (m2==='passive' ? '被动(只回最后一句)' : '完全不出站(静默)')) + '</label>' }).join('')
|
|
3038
|
+
+ ['adaptive','detail','passive','silent'].map(function (m2) { return '<label style="display:inline-flex;align-items:center;gap:4px;cursor:pointer;font-size:12px;color:#333"><input type="radio" name="dk-outmode" value="' + m2 + '"' + (om === m2 ? ' checked' : '') + '> ' + (m2==='adaptive' ? '适配主动(推荐默认)' : (m2==='detail' ? '详细主动(连工具调用一起推)' : (m2==='passive' ? '被动(只回最后一句)' : '完全不出站(静默)'))) + '</label>' }).join('')
|
|
2954
3039
|
+ '</div>'
|
|
2955
3040
|
body += '<div class="dk-msg" style="line-height:1.6">适配主动=和QQ有关的会话回复都发到QQ: 刚收到真人消息时前5条带引用回你(能看到回的是哪句), 第6条起自动转独立新消息, 连发不被QQ吞; 定时/后台等没有新真人消息的主动推送也走独立消息。'
|
|
3041
|
+
body += '详细主动=聊天行为与适配主动完全一样, 但额外把 AI 的工具调用(🔧 工具调用)与工具结果也推到 QQ —— 能在 QQ 上看她正在干什么; 消息会明显变多, 看完记得切回适配主动。'
|
|
2956
3042
|
body += '被动=始终以「回复你那条」发出, 连发约4~5条后会被QQ吞掉。完全不出站=本机静默, 不向QQ发任何回复(AI 可用工具随时切回)。本开关对纯web(没绑QQ)的会话不生效。</div>'
|
|
2957
3043
|
body += '<span class="dk-msg" id="dk-out-hint" style="color:#2f9e44;margin:4px 0"></span>'
|
|
2958
3044
|
} else if (state.tab === 'card') {
|
|
@@ -3081,6 +3167,8 @@ var QQS_CSS = ".qqs-btn{font:inherit;color:#333;background:linear-gradient(180de
|
|
|
3081
3167
|
if (state.tab === 'card') bindCardEvents()
|
|
3082
3168
|
// 📤 广播子页: 绑定群发按钮 + 刷新任务列表(任务列表静默拉取, 不重绘 → 防死循环)
|
|
3083
3169
|
if (state.tab === 'broadcast') { bindBroadcastEvents(); loadBroadcastTasks(false, true); startBroadcastAdvance() }
|
|
3170
|
+
// 分组(host 持久化, 与 AI 共用): 进选目标/广播页时拉一次, 保证多浏览器与 AI 侧看到的是同一份
|
|
3171
|
+
if (state.tab === 'roster' || state.tab === 'broadcast') loadTgGroupsFromHost()
|
|
3084
3172
|
// 注: 📤 群发子标签栏的点击绑定由上面 bindBodyEvents() 统一处理(它含 [data-subtab])
|
|
3085
3173
|
// 首次进入聊天 tab 自动拉最新一页
|
|
3086
3174
|
if (state.tab === 'chat' && !state.chatItems.length && !state.chatBusy) loadChat(true)
|
|
@@ -65,7 +65,12 @@ export type ApiResult<T> = {
|
|
|
65
65
|
human: string;
|
|
66
66
|
};
|
|
67
67
|
};
|
|
68
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* 官方错误码 → 人话(可扩充; code 映射不到时回落通用文案)。
|
|
70
|
+
* 2026-09-12 增强(主人要求"错误人话化"): 不只说"哪里错了", 还要给**可执行的下一步** ——
|
|
71
|
+
* 之前只覆盖群管理类码, 发消息类的报错会把裸码抛给用户/AI(如"被动回复时间或次数超过限制"),
|
|
72
|
+
* 以致 AI 得自己猜怎么绕。
|
|
73
|
+
*/
|
|
69
74
|
export declare function mapErrHuman(code: string | number, gateHuman?: string): string;
|
|
70
75
|
export interface GroupAdminOptions {
|
|
71
76
|
appId: string;
|
|
@@ -151,9 +156,14 @@ export declare class GroupAdminClient {
|
|
|
151
156
|
}>>;
|
|
152
157
|
/**
|
|
153
158
|
* 撤回机器人自己发的消息(官方撤回窗口 2 分钟, 仅能撤自己发的)。
|
|
154
|
-
*
|
|
159
|
+
* ⚠️ 2026-09-12 修(主人实测报 **11001**): 原实现打的是 `/v2/messages/{id}` —— **官方没有这个路径**,
|
|
160
|
+
* 正确路径按场景分(官方文档已核对):
|
|
161
|
+
* 群聊 DELETE `/v2/groups/{group_openid}/messages/{message_id}`
|
|
162
|
+
* 单聊 DELETE `/v2/users/{user_openid}/messages/{message_id}`
|
|
163
|
+
* @param peerId 群 openid(scope=group) 或 用户 openid(scope=c2c)
|
|
164
|
+
* @param msgId 发送成功时返回的 message_id
|
|
155
165
|
*/
|
|
156
|
-
recallMessage(msgId: string): Promise<ApiResult<Record<string, unknown>>>;
|
|
166
|
+
recallMessage(peerId: string, msgId: string, scope?: 'group' | 'c2c'): Promise<ApiResult<Record<string, unknown>>>;
|
|
157
167
|
}
|
|
158
168
|
/** 工厂: 每实例一个 client(配置来自各 bot config.appId/appSecret) */
|
|
159
169
|
export declare function createGroupAdmin(opts: GroupAdminOptions): GroupAdminClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-admin.d.ts","sourceRoot":"","sources":["../../src/api/group-admin.ts"],"names":[],"mappings":"AAqBA,yDAAyD;AACzD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO1E,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CAC1H;AAUD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAQrJ;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IACjH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/G;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEvG
|
|
1
|
+
{"version":3,"file":"group-admin.d.ts","sourceRoot":"","sources":["../../src/api/group-admin.ts"],"names":[],"mappings":"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"}
|
package/dist/api/group-admin.js
CHANGED
|
@@ -51,10 +51,16 @@ export function verifyHuman(vi) {
|
|
|
51
51
|
return VERIFY_METHOD_HUMAN[vi.method] ?? `验证方式:${vi.method}`;
|
|
52
52
|
return '';
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* 官方错误码 → 人话(可扩充; code 映射不到时回落通用文案)。
|
|
56
|
+
* 2026-09-12 增强(主人要求"错误人话化"): 不只说"哪里错了", 还要给**可执行的下一步** ——
|
|
57
|
+
* 之前只覆盖群管理类码, 发消息类的报错会把裸码抛给用户/AI(如"被动回复时间或次数超过限制"),
|
|
58
|
+
* 以致 AI 得自己猜怎么绕。
|
|
59
|
+
*/
|
|
55
60
|
export function mapErrHuman(code, gateHuman) {
|
|
56
61
|
const c = String(code);
|
|
57
62
|
const table = {
|
|
63
|
+
// ── 群管理/权限类 ──
|
|
58
64
|
'11253': gateHuman || '该能力官方尚未开放/未授权(内邀中或需白名单), 请联系平台运营',
|
|
59
65
|
'11703': gateHuman || '机器人无该接口权限: 需为该群管理员, 或该能力尚未对应用开放(探针实测 2026-09-05)',
|
|
60
66
|
'40103004': '不能操作该成员: 群主/管理员/机器人不可被禁言(只能禁普通成员)',
|
|
@@ -63,8 +69,40 @@ export function mapErrHuman(code, gateHuman) {
|
|
|
63
69
|
'40101': '频控: 请求太快, 稍等再试',
|
|
64
70
|
'403': '机器人缺少群管理员身份或未授权',
|
|
65
71
|
'401': '访问凭证无效, 请刷新后重试',
|
|
72
|
+
'11001': '接口或参数不正确(实测: 调用的 API 路径/字段写错时会返回它) —— 检查 URL 与参数, 不是网络问题',
|
|
73
|
+
// ── 消息发送类(2026-09-12 补: 每条都给"怎么办") ──
|
|
74
|
+
'304103': '被动回复的 msg_id 已过期(窗口 5 分钟): 去掉 msg_id 改**主动消息**, 或等群里有人先说一句',
|
|
75
|
+
'40034005': '回复的 msg_id 已过期(被动回复 5 分钟内有效): 改**主动消息**发送, 或让群里先有人说话',
|
|
76
|
+
'304036': '机器人没有 Markdown 模板权限: 改用 `type=text` 纯文本(或去 QQ 开放平台申请 Markdown 模板)',
|
|
77
|
+
'40034008': 'markdown 参数里有空值: 每个模板参数都要有值',
|
|
78
|
+
'40034009': 'markdown 参数里有换行符: 去掉参数中的换行',
|
|
79
|
+
'40034010': '模板参数里不能含 markdown 语法: 参数用纯文本',
|
|
80
|
+
'40034006': '内容违规: 改一下措辞(去掉敏感词/可疑链接)',
|
|
81
|
+
'40034029': '键盘按钮超限(最多 5 行 × 每行 5 个): 减少按钮数量',
|
|
82
|
+
'304004': '无权限使用该 ARK 模板',
|
|
83
|
+
'305007': 'keyboard 结构不对: 检查 rows/buttons 层级',
|
|
84
|
+
'340069': 'msg_type 无效: 只能 0=文本 / 2=markdown / 7=富媒体',
|
|
85
|
+
'22006': '消息类型与内容不匹配: msg_type 要和实际内容字段对应',
|
|
86
|
+
'40034004': '富媒体转存失败(平台没能下载你的 URL): 换可直连的直链, 或改用本地文件上传后重试',
|
|
87
|
+
'304080': 'file_info 无效/已过期: 重新上传文件再发(带 ttl)',
|
|
88
|
+
'304064': '订阅消息未授权: 需用户先授权订阅',
|
|
66
89
|
};
|
|
67
|
-
|
|
90
|
+
const hit = table[c] ?? table[String(Number(c))];
|
|
91
|
+
if (hit)
|
|
92
|
+
return hit;
|
|
93
|
+
// 有些错误不是数字码而是官方 message 文本(如"被动回复时间或次数超过限制") → 关键词兜底, 同样给下一步
|
|
94
|
+
if (!/^\d+$/u.test(c)) {
|
|
95
|
+
if (/被动|回复.*(超|限)/u.test(c)) {
|
|
96
|
+
return `被动回复超限(同一条 msg_id 最多回 ~5 条 / 5 分钟窗口): 去掉 msg_id 改主动消息, 或隔 5 秒重试 · 原文: ${c}`;
|
|
97
|
+
}
|
|
98
|
+
if (/频|限流|太快|too\s*many/iu.test(c))
|
|
99
|
+
return `触发频控, 等 5~10 秒再试 · 原文: ${c}`;
|
|
100
|
+
if (/过期|expire/iu.test(c))
|
|
101
|
+
return `引用的消息已过期(被动回复 5 分钟窗口): 改用主动消息 · 原文: ${c}`;
|
|
102
|
+
if (/markdown|模板/iu.test(c))
|
|
103
|
+
return `Markdown 模板问题: 改用 type=text 纯文本最稳 · 原文: ${c}`;
|
|
104
|
+
}
|
|
105
|
+
return `调用失败(错误码 ${c}), 请稍后重试`;
|
|
68
106
|
}
|
|
69
107
|
/** per-appId token 缓存(带过期提前刷新与并发单飞) */
|
|
70
108
|
class TokenCache {
|
|
@@ -242,10 +280,16 @@ export class GroupAdminClient {
|
|
|
242
280
|
}
|
|
243
281
|
/**
|
|
244
282
|
* 撤回机器人自己发的消息(官方撤回窗口 2 分钟, 仅能撤自己发的)。
|
|
245
|
-
*
|
|
283
|
+
* ⚠️ 2026-09-12 修(主人实测报 **11001**): 原实现打的是 `/v2/messages/{id}` —— **官方没有这个路径**,
|
|
284
|
+
* 正确路径按场景分(官方文档已核对):
|
|
285
|
+
* 群聊 DELETE `/v2/groups/{group_openid}/messages/{message_id}`
|
|
286
|
+
* 单聊 DELETE `/v2/users/{user_openid}/messages/{message_id}`
|
|
287
|
+
* @param peerId 群 openid(scope=group) 或 用户 openid(scope=c2c)
|
|
288
|
+
* @param msgId 发送成功时返回的 message_id
|
|
246
289
|
*/
|
|
247
|
-
async recallMessage(msgId) {
|
|
248
|
-
|
|
290
|
+
async recallMessage(peerId, msgId, scope = 'group') {
|
|
291
|
+
const base = scope === 'c2c' ? '/v2/users' : '/v2/groups';
|
|
292
|
+
return this.call('DELETE', `${base}/${encodeURIComponent(peerId)}/messages/${encodeURIComponent(msgId)}`);
|
|
249
293
|
}
|
|
250
294
|
}
|
|
251
295
|
/** 工厂: 每实例一个 client(配置来自各 bot config.appId/appSecret) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-admin.js","sourceRoot":"","sources":["../../src/api/group-admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4CAA4C;AAC5C,MAAM,SAAS,GAAG,2CAA2C,CAAC;AAC9D,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAE1C,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAqD;IAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE;IACtE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,EAAE;IACvF,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;IAC5D,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;IAC9D,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE;IACzD,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAClD,CAAC;AAqBF,mDAAmD;AACnD,MAAM,mBAAmB,GAA2B;IAClD,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;CACX,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAiH;IAC3I,MAAM,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,EAAE,EAAE,cAAc;QAAE,OAAO,EAAE,CAAC,cAAc,CAAC;IACjD,IAAI,EAAE,EAAE,MAAM;QAAE,OAAO,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;IAC7E,OAAO,EAAE,CAAC;AACZ,CAAC;AASD,wCAAwC;AACxC,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,SAAkB;IACnE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,SAAS,IAAI,kCAAkC;QACxD,OAAO,EAAE,SAAS,IAAI,kDAAkD;QACxE,UAAU,EAAE,mCAAmC;QAC/C,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,gBAAgB;KACxB,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC;AACzE,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU;IACN,KAAK,GAAG,IAAI,GAAG,EAA+C,CAAC;IAC/D,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEtD,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,SAAiB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,MAAM;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QAChE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;oBACjC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;iBACzD,CAAC,CAAC;gBACH,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoF,CAAC;gBAChH,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtF,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBACvG,OAAO,CAAC,CAAC,YAAY,CAAC;YACxB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;AAC/C,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC/F,CAAC;AAUD,MAAM,OAAO,gBAAgB;IAIE;IAHZ,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1B,KAAK,CAA0B;IAEhD,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;QAClD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CACzF,CAAC;IACJ,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,iBAAiB,EAAE,EAAE,CAAC;IAChG,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,MAA2C,EAAE,IAAY,EAAE,IAAc;QAC7F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;YAC5C,MAAM;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,KAAK,EAAE;gBAC/B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC5D,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA2F,CAAC;QACzI,IAAI,CAAC,iBAAiB,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;QACjH,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAM,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,aAAa,CACjB,GAAW,EACX,aAAuB,EACvB,cAAc,GAAG,KAAK;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,uBAAuB,EAAE;YACrF,cAAc,EAAE,aAAa;YAC7B,uBAAuB,EAAE,cAAc;SACxC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,kBAAkB,CACtB,GAAW,EACX,YAAoB,EACpB,EAAyB,EACzB,IAAuF;QAEvF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,0BAA0B,kBAAkB,CAAC,YAAY,CAAC,EAAE,EAAE;YAC1H,EAAE;YACF,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACzF,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,YAAY,CAAC,GAAW;QAI5B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CACjB,GAAW,EACX,YAAoB,EACpB,YAA2B;QAE3B,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;YAC5E,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,OAAe;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,kCAAkC;QAC1F,MAAM,MAAM,GAAG,0EAA0E,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxG,MAAM,IAAI,GAA4B,MAAM;YAC1C,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;YACzD,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,GAAW,EACX,QAAgB,EAChB,QAAkC;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;QACvD,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACxG,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,OAAe;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;QACvD,MAAM,MAAM,GAAG,0EAA0E,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxG,MAAM,IAAI,GAA4B,MAAM;YAC1C,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;YACzD,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,UAAkB,EAClB,QAAgB,EAChB,QAAkC;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;QACvD,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACxG,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;CAEF;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,iBAAiB,CAAC,GAAuB;IACvD,OAAO,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC"}
|
|
1
|
+
{"version":3,"file":"group-admin.js","sourceRoot":"","sources":["../../src/api/group-admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-tools.d.ts","sourceRoot":"","sources":["../src/channel-tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-tools.d.ts","sourceRoot":"","sources":["../src/channel-tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAuElE,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,wBAAwB,CAAC;AAC1C,eAAO,MAAM,MAAM,UAAY,CAAC;AAShC,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAI/D;AAkFD,mDAAmD;AACnD,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+/CvD"}
|