@ryantest/openclaw-qqbot 0.0.1
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/LICENSE +22 -0
- package/README.md +483 -0
- package/README.zh.md +478 -0
- package/bin/qqbot-cli.js +243 -0
- package/clawdbot.plugin.json +16 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +26 -0
- package/dist/src/admin-resolver.d.ts +27 -0
- package/dist/src/admin-resolver.js +122 -0
- package/dist/src/api.d.ts +156 -0
- package/dist/src/api.js +599 -0
- package/dist/src/channel.d.ts +11 -0
- package/dist/src/channel.js +354 -0
- package/dist/src/config.d.ts +25 -0
- package/dist/src/config.js +161 -0
- package/dist/src/credential-backup.d.ts +31 -0
- package/dist/src/credential-backup.js +66 -0
- package/dist/src/gateway.d.ts +18 -0
- package/dist/src/gateway.js +1265 -0
- package/dist/src/image-server.d.ts +68 -0
- package/dist/src/image-server.js +462 -0
- package/dist/src/inbound-attachments.d.ts +58 -0
- package/dist/src/inbound-attachments.js +234 -0
- package/dist/src/known-users.d.ts +100 -0
- package/dist/src/known-users.js +263 -0
- package/dist/src/message-queue.d.ts +50 -0
- package/dist/src/message-queue.js +115 -0
- package/dist/src/onboarding.d.ts +10 -0
- package/dist/src/onboarding.js +203 -0
- package/dist/src/outbound-deliver.d.ts +48 -0
- package/dist/src/outbound-deliver.js +462 -0
- package/dist/src/outbound.d.ts +203 -0
- package/dist/src/outbound.js +1102 -0
- package/dist/src/proactive.d.ts +170 -0
- package/dist/src/proactive.js +399 -0
- package/dist/src/ref-index-store.d.ts +70 -0
- package/dist/src/ref-index-store.js +273 -0
- package/dist/src/reply-dispatcher.d.ts +35 -0
- package/dist/src/reply-dispatcher.js +311 -0
- package/dist/src/runtime.d.ts +3 -0
- package/dist/src/runtime.js +10 -0
- package/dist/src/session-store.d.ts +52 -0
- package/dist/src/session-store.js +254 -0
- package/dist/src/slash-commands.d.ts +71 -0
- package/dist/src/slash-commands.js +1179 -0
- package/dist/src/startup-greeting.d.ts +30 -0
- package/dist/src/startup-greeting.js +78 -0
- package/dist/src/stt.d.ts +21 -0
- package/dist/src/stt.js +70 -0
- package/dist/src/tools/channel.d.ts +16 -0
- package/dist/src/tools/channel.js +234 -0
- package/dist/src/tools/remind.d.ts +2 -0
- package/dist/src/tools/remind.js +247 -0
- package/dist/src/types.d.ts +175 -0
- package/dist/src/types.js +1 -0
- package/dist/src/typing-keepalive.d.ts +27 -0
- package/dist/src/typing-keepalive.js +64 -0
- package/dist/src/update-checker.d.ts +34 -0
- package/dist/src/update-checker.js +166 -0
- package/dist/src/user-messages.d.ts +8 -0
- package/dist/src/user-messages.js +8 -0
- package/dist/src/utils/audio-convert.d.ts +89 -0
- package/dist/src/utils/audio-convert.js +704 -0
- package/dist/src/utils/file-utils.d.ts +55 -0
- package/dist/src/utils/file-utils.js +150 -0
- package/dist/src/utils/image-size.d.ts +51 -0
- package/dist/src/utils/image-size.js +234 -0
- package/dist/src/utils/media-tags.d.ts +14 -0
- package/dist/src/utils/media-tags.js +164 -0
- package/dist/src/utils/payload.d.ts +112 -0
- package/dist/src/utils/payload.js +186 -0
- package/dist/src/utils/platform.d.ts +137 -0
- package/dist/src/utils/platform.js +390 -0
- package/dist/src/utils/text-parsing.d.ts +32 -0
- package/dist/src/utils/text-parsing.js +80 -0
- package/dist/src/utils/upload-cache.d.ts +34 -0
- package/dist/src/utils/upload-cache.js +93 -0
- package/index.ts +31 -0
- package/moltbot.plugin.json +16 -0
- package/node_modules/@eshaz/web-worker/LICENSE +201 -0
- package/node_modules/@eshaz/web-worker/README.md +134 -0
- package/node_modules/@eshaz/web-worker/browser.js +17 -0
- package/node_modules/@eshaz/web-worker/cjs/browser.js +16 -0
- package/node_modules/@eshaz/web-worker/cjs/node.js +219 -0
- package/node_modules/@eshaz/web-worker/index.d.ts +4 -0
- package/node_modules/@eshaz/web-worker/node.js +223 -0
- package/node_modules/@eshaz/web-worker/package.json +54 -0
- package/node_modules/@wasm-audio-decoders/common/index.js +5 -0
- package/node_modules/@wasm-audio-decoders/common/package.json +36 -0
- package/node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js +231 -0
- package/node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderWorker.js +129 -0
- package/node_modules/@wasm-audio-decoders/common/src/puff/README +67 -0
- package/node_modules/@wasm-audio-decoders/common/src/puff/build_puff.js +31 -0
- package/node_modules/@wasm-audio-decoders/common/src/puff/puff.c +863 -0
- package/node_modules/@wasm-audio-decoders/common/src/puff/puff.h +35 -0
- package/node_modules/@wasm-audio-decoders/common/src/utilities.js +3 -0
- package/node_modules/@wasm-audio-decoders/common/types.d.ts +7 -0
- package/node_modules/mpg123-decoder/README.md +265 -0
- package/node_modules/mpg123-decoder/dist/mpg123-decoder.min.js +185 -0
- package/node_modules/mpg123-decoder/dist/mpg123-decoder.min.js.map +1 -0
- package/node_modules/mpg123-decoder/index.js +8 -0
- package/node_modules/mpg123-decoder/package.json +58 -0
- package/node_modules/mpg123-decoder/src/EmscriptenWasm.js +464 -0
- package/node_modules/mpg123-decoder/src/MPEGDecoder.js +200 -0
- package/node_modules/mpg123-decoder/src/MPEGDecoderWebWorker.js +21 -0
- package/node_modules/mpg123-decoder/types.d.ts +30 -0
- package/node_modules/silk-wasm/LICENSE +21 -0
- package/node_modules/silk-wasm/README.md +85 -0
- package/node_modules/silk-wasm/lib/index.cjs +16 -0
- package/node_modules/silk-wasm/lib/index.d.ts +70 -0
- package/node_modules/silk-wasm/lib/index.mjs +16 -0
- package/node_modules/silk-wasm/lib/silk.wasm +0 -0
- package/node_modules/silk-wasm/lib/utils.d.ts +4 -0
- package/node_modules/silk-wasm/package.json +39 -0
- package/node_modules/simple-yenc/.github/FUNDING.yml +1 -0
- package/node_modules/simple-yenc/.prettierignore +1 -0
- package/node_modules/simple-yenc/LICENSE +7 -0
- package/node_modules/simple-yenc/README.md +163 -0
- package/node_modules/simple-yenc/dist/esm.js +1 -0
- package/node_modules/simple-yenc/dist/index.js +1 -0
- package/node_modules/simple-yenc/package.json +50 -0
- package/node_modules/simple-yenc/rollup.config.js +27 -0
- package/node_modules/simple-yenc/src/simple-yenc.js +302 -0
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +13 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/node_modules/ws/lib/receiver.js +706 -0
- package/node_modules/ws/lib/sender.js +602 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +554 -0
- package/node_modules/ws/lib/websocket.js +1393 -0
- package/node_modules/ws/package.json +69 -0
- package/node_modules/ws/wrapper.mjs +8 -0
- package/openclaw.plugin.json +16 -0
- package/package.json +76 -0
- package/scripts/cleanup-legacy-plugins.sh +124 -0
- package/scripts/proactive-api-server.ts +369 -0
- package/scripts/send-proactive.ts +293 -0
- package/scripts/set-markdown.sh +156 -0
- package/scripts/test-sendmedia.ts +116 -0
- package/scripts/upgrade-via-alt-pkg.sh +307 -0
- package/scripts/upgrade-via-npm.ps1 +296 -0
- package/scripts/upgrade-via-npm.sh +301 -0
- package/scripts/upgrade-via-source.sh +774 -0
- package/skills/qqbot-channel/SKILL.md +263 -0
- package/skills/qqbot-channel/references/api_references.md +521 -0
- package/skills/qqbot-media/SKILL.md +56 -0
- package/skills/qqbot-remind/SKILL.md +149 -0
- package/src/admin-resolver.ts +140 -0
- package/src/api.ts +819 -0
- package/src/bot-logs-2026-03-21T11-21-47(2).txt +46 -0
- package/src/channel.ts +381 -0
- package/src/config.ts +187 -0
- package/src/credential-backup.ts +72 -0
- package/src/gateway.log +43 -0
- package/src/gateway.ts +1404 -0
- package/src/image-server.ts +539 -0
- package/src/inbound-attachments.ts +304 -0
- package/src/known-users.ts +353 -0
- package/src/message-queue.ts +169 -0
- package/src/onboarding.ts +274 -0
- package/src/openclaw-2026-03-21.log +3729 -0
- package/src/openclaw-plugin-sdk.d.ts +522 -0
- package/src/outbound-deliver.ts +552 -0
- package/src/outbound.ts +1266 -0
- package/src/proactive.ts +530 -0
- package/src/ref-index-store.ts +357 -0
- package/src/reply-dispatcher.ts +334 -0
- package/src/runtime.ts +14 -0
- package/src/session-store.ts +303 -0
- package/src/slash-commands.ts +1305 -0
- package/src/startup-greeting.ts +98 -0
- package/src/stt.ts +86 -0
- package/src/tools/channel.ts +281 -0
- package/src/tools/remind.ts +296 -0
- package/src/types.ts +183 -0
- package/src/typing-keepalive.ts +59 -0
- package/src/update-checker.ts +179 -0
- package/src/user-messages.ts +7 -0
- package/src/utils/audio-convert.ts +803 -0
- package/src/utils/file-utils.ts +167 -0
- package/src/utils/image-size.ts +266 -0
- package/src/utils/media-tags.ts +182 -0
- package/src/utils/payload.ts +265 -0
- package/src/utils/platform.ts +435 -0
- package/src/utils/text-parsing.ts +82 -0
- package/src/utils/upload-cache.ts +128 -0
- package/tsconfig.json +16 -0
package/README.zh.md
ADDED
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
**简体中文 | [English](README.md)**
|
|
4
|
+
|
|
5
|
+
<img width="120" src="https://img.shields.io/badge/🤖-QQ_Bot-blue?style=for-the-badge" alt="QQ Bot" />
|
|
6
|
+
|
|
7
|
+
# QQ Bot — OpenClaw 渠道插件
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
**让你的 AI 助手接入 QQ — 私聊、群聊、富媒体,一个插件全搞定。**
|
|
11
|
+
|
|
12
|
+
### 🚀 当前版本: `v1.6.4`
|
|
13
|
+
|
|
14
|
+
[](./LICENSE)
|
|
15
|
+
[](https://bot.q.qq.com/wiki/)
|
|
16
|
+
[](https://github.com/tencent-connect/openclaw-qqbot)
|
|
17
|
+
[](https://nodejs.org/)
|
|
18
|
+
[](https://www.typescriptlang.org/)
|
|
19
|
+
|
|
20
|
+
<br/>
|
|
21
|
+
|
|
22
|
+
扫描二维码加入群聊,一起交流
|
|
23
|
+
|
|
24
|
+
<img width="400" alt="QQ 群二维码" src="./docs/images/developer_group.png" />
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## ✨ 功能特性
|
|
31
|
+
|
|
32
|
+
| 功能 | 说明 |
|
|
33
|
+
|------|------|
|
|
34
|
+
| 🔒 **多场景支持** | C2C 私聊、群聊 @消息 |
|
|
35
|
+
| 🖼️ **富媒体消息** | 支持图片、语音、视频、文件的收发 |
|
|
36
|
+
| 🎙️ **语音能力 (STT/TTS)** | 语音转文字自动转录 & 文字转语音回复 |
|
|
37
|
+
| 🔥 **一键热更新** | 私聊发送 `/bot-upgrade` 即可完成版本升级,无需登录服务器 |
|
|
38
|
+
| ⏰ **定时推送** | 支持定时任务触发后主动推送消息 |
|
|
39
|
+
| 🔗 **URL 无限制** | 私聊可直接发送 URL |
|
|
40
|
+
| ⌨️ **输入状态** | 实时显示"Bot 正在输入中…"状态 |
|
|
41
|
+
| 📝 **Markdown** | 完整支持 Markdown 格式消息 |
|
|
42
|
+
| 🛠️ **原生命令** | 支持 OpenClaw 原生命令 |
|
|
43
|
+
| 💬 **引用上下文** | 解析 QQ `REFIDX_*` 引用消息,并将引用内容注入 AI 上下文 |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 📸 功能展示
|
|
48
|
+
|
|
49
|
+
> **说明:** 本插件仅作为**消息通道**,负责在 QQ 和 OpenClaw 之间传递消息。图片理解、语音转录、AI 画图等能力取决于你配置的 **AI 模型**以及在 OpenClaw 中安装的 **skill**,而非插件本身提供。
|
|
50
|
+
|
|
51
|
+
### 💬 引用消息上下文(REFIDX)
|
|
52
|
+
|
|
53
|
+
QQ 的引用事件通常只携带索引键(如 `REFIDX_xxx`),不直接返回原始消息全文。插件已支持从本地持久化索引中解析引用内容,并注入 AI 上下文,帮助模型更准确理解“用户引用的是哪条消息”。
|
|
54
|
+
|
|
55
|
+
- 入站/出站消息中的 `ref_idx` 会自动建立索引。
|
|
56
|
+
- 存储位置:`~/.openclaw/qqbot/data/ref-index.jsonl`(网关重启后仍可恢复)。
|
|
57
|
+
- 引用内容支持文本 + 媒体摘要(图片/语音/视频/文件)。
|
|
58
|
+
|
|
59
|
+
<img width="360" src="docs/images/ref_msg.png" alt="引用消息上下文演示" />
|
|
60
|
+
|
|
61
|
+
### 🎙️ 语音消息(STT)
|
|
62
|
+
|
|
63
|
+
配置 STT 后,插件会自动将语音转录为文字再交给 AI 处理。整个过程对用户完全透明——发语音就像发文字一样自然,AI 听得懂你在说什么。
|
|
64
|
+
|
|
65
|
+
> **你**:*(发送一段语音)*"明天深圳天气怎么样"
|
|
66
|
+
>
|
|
67
|
+
> **QQBot**:明天(3月7日 周六)深圳的天气预报 🌤️ ...
|
|
68
|
+
|
|
69
|
+
<img width="360" src="docs/images/fc7b2236896cfba3a37c94be5d59ce3e_720.jpg" alt="听语音演示" />
|
|
70
|
+
|
|
71
|
+
### 📄 文件理解
|
|
72
|
+
|
|
73
|
+
用户发文件给 AI,AI 同样能接住。不管是一本小说还是一份报告,AI 会自动识别文件内容并给出智能回复。
|
|
74
|
+
|
|
75
|
+
> **你**:*(发送《战争与和平》TXT 文件)*
|
|
76
|
+
>
|
|
77
|
+
> **QQBot**:收到!你上传了列夫·托尔斯泰的《战争与和平》中文版文本。从内容来看,这是第一章的开头……你想让我做什么?
|
|
78
|
+
|
|
79
|
+
<img width="360" src="docs/images/07bff56ab68e03173d2af586eeb3bcee_720.jpg" alt="AI理解用户发送的文件" />
|
|
80
|
+
|
|
81
|
+
### 🖼️ 图片理解
|
|
82
|
+
|
|
83
|
+
如果主模型支持视觉(如腾讯混元 `hunyuan-vision`),用户发图片 AI 也能看懂。这是多模态模型的通用能力,非插件专属功能。
|
|
84
|
+
|
|
85
|
+
> **你**:*(发送一张图片)*
|
|
86
|
+
>
|
|
87
|
+
> **QQBot**:哈哈,好可爱!这是QQ企鹅穿上小龙虾套装吗?🦞🐧 ...
|
|
88
|
+
|
|
89
|
+
<img width="360" src="docs/images/59d421891f813b0d3c0cbe12574b6a72_720.jpg" alt="图片理解演示" />
|
|
90
|
+
|
|
91
|
+
### 🎨 图片发送
|
|
92
|
+
|
|
93
|
+
> **你**:画一只猫咪
|
|
94
|
+
>
|
|
95
|
+
> **QQBot**:画好啦!一只可爱的简笔小猫咪🐱🎨
|
|
96
|
+
|
|
97
|
+
AI 可直接发送图片,支持本地文件路径和网络 URL。格式:jpg/png/gif/webp/bmp。
|
|
98
|
+
|
|
99
|
+
<img width="360" src="docs/images/4645f2b3a20822b7f8d6664a708529eb_720.jpg" alt="发图片演示" />
|
|
100
|
+
|
|
101
|
+
### 🔊 语音发送
|
|
102
|
+
|
|
103
|
+
> **你**:给我讲一个笑话
|
|
104
|
+
>
|
|
105
|
+
> **QQBot**:*(发送一条语音消息)*
|
|
106
|
+
|
|
107
|
+
AI 可直接发送语音消息。格式:mp3/wav/silk/ogg,无需安装 ffmpeg。
|
|
108
|
+
|
|
109
|
+
<img width="360" src="docs/images/21dce8bfc553ce23d1bd1b270e9c516c.jpg" alt="发语音演示" />
|
|
110
|
+
|
|
111
|
+
### ⏰ 定时提醒(主动消息)
|
|
112
|
+
|
|
113
|
+
> **你**:5分钟后提醒我吃饭
|
|
114
|
+
>
|
|
115
|
+
> **QQBot**:先确认已创建提醒,到点后再主动推送语音 + 文本提醒
|
|
116
|
+
|
|
117
|
+
该能力依赖 OpenClaw cron 调度与主动消息能力。若未收到提醒,常见原因是 QQ 侧拦截了机器人主动消息。
|
|
118
|
+
|
|
119
|
+
<img width="360" src="docs/images/reminder.jpg" alt="定时提醒演示" />
|
|
120
|
+
|
|
121
|
+
### 📎 文件发送
|
|
122
|
+
|
|
123
|
+
> **你**:战争与和平的第一章截取一下发文件给我
|
|
124
|
+
>
|
|
125
|
+
> **QQBot**:*(发送 .txt 文件)*
|
|
126
|
+
|
|
127
|
+
AI 可直接发送文件。任意格式,最大 20MB。
|
|
128
|
+
|
|
129
|
+
<img width="360" src="docs/images/17cada70df90185d45a2d6dd36e92f2f_720.jpg" alt="发文件演示" />
|
|
130
|
+
|
|
131
|
+
### 🎬 视频发送
|
|
132
|
+
|
|
133
|
+
> **你**:发一个演示视频给我
|
|
134
|
+
>
|
|
135
|
+
> **QQBot**:*(发送视频)*
|
|
136
|
+
|
|
137
|
+
AI 可直接发送视频,支持本地文件和公网 URL。
|
|
138
|
+
|
|
139
|
+
<img width="360" src="docs/images/85d03b8a216f267ab7b2aee248a18a41_720.jpg" alt="发视频演示" />
|
|
140
|
+
|
|
141
|
+
> **底层细节:** 上传去重缓存、有序队列发送、音频格式多层降级。
|
|
142
|
+
|
|
143
|
+
### 🛠️ 斜杠指令
|
|
144
|
+
|
|
145
|
+
插件内置一组斜杠指令,在消息进入 AI 队列前拦截处理,即时响应,用于诊断和管理。
|
|
146
|
+
|
|
147
|
+
#### `/bot-ping` — 延迟测试
|
|
148
|
+
|
|
149
|
+
> **你**:`/bot-ping`
|
|
150
|
+
>
|
|
151
|
+
> **QQBot**:✅ pong!⏱ 延迟: 602ms(网络传输: 602ms,插件处理: 0ms)
|
|
152
|
+
|
|
153
|
+
测量从 QQ 服务器推送到插件响应的端到端延迟,细分网络传输和插件处理两段耗时。
|
|
154
|
+
|
|
155
|
+
<img width="360" src="docs/images/slash-ping.jpg" alt="Ping 演示" />
|
|
156
|
+
|
|
157
|
+
#### `/bot-version` — 版本信息
|
|
158
|
+
|
|
159
|
+
> **你**:`/bot-version`
|
|
160
|
+
>
|
|
161
|
+
> **QQBot**:🦞框架版本:OpenClaw 2026.3.13 (61d171a) / 🤖QQBot 插件版本:v1.6.3 / 🌟官方 GitHub 仓库
|
|
162
|
+
|
|
163
|
+
一目了然查看框架版本、插件版本,并可直接跳转官方仓库。
|
|
164
|
+
|
|
165
|
+
<img width="360" src="docs/images/slash-version.jpg" alt="Version 演示" />
|
|
166
|
+
|
|
167
|
+
#### `/bot-help` — 指令列表
|
|
168
|
+
|
|
169
|
+
> **你**:`/bot-help`
|
|
170
|
+
>
|
|
171
|
+
> **QQBot**:列出所有可用的斜杠指令及说明,指令可点击快速输入。
|
|
172
|
+
|
|
173
|
+
<img width="360" src="docs/images/slash-help.jpg" alt="Help 演示" />
|
|
174
|
+
|
|
175
|
+
#### `/bot-upgrade` — 一键热更新
|
|
176
|
+
|
|
177
|
+
> **你**:`/bot-upgrade`
|
|
178
|
+
>
|
|
179
|
+
> **QQBot**:📌当前版本 v1.6.3 / ✅发现新版本 v1.6.4 / 点击下方按钮确认升级
|
|
180
|
+
|
|
181
|
+
在私聊中发送即可完成版本升级,全程无需登录服务器。支持的用法:
|
|
182
|
+
|
|
183
|
+
| 命令 | 说明 |
|
|
184
|
+
|------|------|
|
|
185
|
+
| `/bot-upgrade` | 检查是否有新版本,展示确认按钮 |
|
|
186
|
+
| `/bot-upgrade --latest` | 确认升级到最新版本 |
|
|
187
|
+
| `/bot-upgrade --version 1.6.4` | 升级到指定版本 |
|
|
188
|
+
| `/bot-upgrade --force` | 强制重新安装当前版本 |
|
|
189
|
+
|
|
190
|
+
升级流程自动备份凭证,升级前校验版本是否存在于 npm,升级失败自动恢复。
|
|
191
|
+
|
|
192
|
+
<<<<<<< Updated upstream
|
|
193
|
+
<!-- TODO: 补充 /bot-upgrade 截图 -->
|
|
194
|
+
=======
|
|
195
|
+
> **平台支持:** 热更新目前支持 **Linux** 和 **macOS**。Windows 暂不支持热更,发送 `/bot-upgrade` 后会返回手动升级指引。
|
|
196
|
+
|
|
197
|
+
<img width="360" src="docs/images/hot-update.jpg" alt="热更新演示" />
|
|
198
|
+
>>>>>>> Stashed changes
|
|
199
|
+
|
|
200
|
+
#### `/bot-logs` — 日志导出
|
|
201
|
+
|
|
202
|
+
> **你**:`/bot-logs`
|
|
203
|
+
>
|
|
204
|
+
> **QQBot**:📋 日志已打包(约 2000 行),正在发送文件… *(发送 .txt 文件)*
|
|
205
|
+
|
|
206
|
+
导出最近约 2000 行网关日志为文件,方便快速排查问题。
|
|
207
|
+
|
|
208
|
+
<img width="360" src="docs/images/slash-logs.jpg" alt="Logs 演示" />
|
|
209
|
+
|
|
210
|
+
#### 用法查询
|
|
211
|
+
|
|
212
|
+
所有指令都支持 `?` 后缀查看用法说明:
|
|
213
|
+
|
|
214
|
+
> **你**:`/bot-upgrade ?`
|
|
215
|
+
>
|
|
216
|
+
> **QQBot**:📖 /bot-upgrade 用法:…
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 🚀 快速开始
|
|
221
|
+
|
|
222
|
+
### 第一步 — 在 QQ 开放平台创建机器人
|
|
223
|
+
|
|
224
|
+
1. 前往 [QQ 开放平台](https://q.qq.com/),用**手机 QQ 扫描页面二维码**即可注册/登录。若尚未注册,扫码后系统会自动完成注册并绑定你的 QQ 账号。
|
|
225
|
+
|
|
226
|
+
<img width="3246" height="1886" alt="Clipboard_Screenshot_1772980354" src="https://github.com/user-attachments/assets/d8491859-57e8-47e4-9d39-b21138be54d0" />
|
|
227
|
+
|
|
228
|
+
2. 手机 QQ 扫码后选择**同意**,即完成注册,进入 QQ 机器人配置页。
|
|
229
|
+
3. 点击**创建机器人**,即可直接新建一个 QQ 机器人。
|
|
230
|
+
|
|
231
|
+
<img width="720" alt="创建机器人" src="docs/images/create_robot.png" />
|
|
232
|
+
|
|
233
|
+
> ⚠️ 机器人创建后会自动出现在你的 QQ 消息列表中,并发送第一条消息。但在完成下面的配置之前,发消息会提示"该机器人去火星了",属于正常现象。
|
|
234
|
+
|
|
235
|
+
<img width="400" alt="机器人打招呼" src="docs/images/bot_say_hello.jpg" />
|
|
236
|
+
|
|
237
|
+
4. 在机器人页面中找到 **AppID** 和 **AppSecret**,分别点击右侧**复制**按钮,保存到记事本或备忘录中。**AppSecret 不支持明文保存,离开页面后再查看会强制重置,请务必妥善保存。**
|
|
238
|
+
|
|
239
|
+
<img width="720" alt="找到 AppID 和 AppSecret" src="docs/images/find_appid_secret.png" />
|
|
240
|
+
|
|
241
|
+
> 详细图文教程请参阅 [官方指南](https://cloud.tencent.com/developer/article/2626045)。
|
|
242
|
+
|
|
243
|
+
### 第二步 — 安装 / 升级插件
|
|
244
|
+
|
|
245
|
+
**方式一:远程一键执行(最简单,无需 clone 仓库)**
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh \
|
|
249
|
+
| bash -s -- --appid YOUR_APPID --secret YOUR_SECRET
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
一行命令搞定:下载脚本 → 清理旧插件 → 安装 → 配置通道 → 启动服务。完成后打开 QQ 即可开始聊天!
|
|
253
|
+
|
|
254
|
+
> 首次安装**必须**传 `--appid` 和 `--secret`。后续升级如已有配置:
|
|
255
|
+
> ```bash
|
|
256
|
+
> curl -fsSL https://raw.githubusercontent.com/tencent-connect/openclaw-qqbot/main/scripts/upgrade-via-npm.sh | bash
|
|
257
|
+
> ```
|
|
258
|
+
|
|
259
|
+
**方式二:本地脚本(已 clone 仓库时使用)**
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# 通过 npm 安装
|
|
263
|
+
bash ./scripts/upgrade-via-npm.sh --appid YOUR_APPID --secret YOUR_SECRET
|
|
264
|
+
|
|
265
|
+
# 或通过源码安装
|
|
266
|
+
bash ./scripts/upgrade-via-source.sh --appid YOUR_APPID --secret YOUR_SECRET
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**常用参数:**
|
|
270
|
+
|
|
271
|
+
| 参数 | 说明 |
|
|
272
|
+
|------|------|
|
|
273
|
+
| `--appid <id> --secret <secret>` | 配置通道(首次安装必填,或更换凭证时使用) |
|
|
274
|
+
| `--version <版本号>` | 安装指定版本(仅 npm 脚本) |
|
|
275
|
+
| `--self-version` | 安装本地 `package.json` 中的版本(仅 npm 脚本) |
|
|
276
|
+
| `-h` / `--help` | 查看完整用法 |
|
|
277
|
+
|
|
278
|
+
> 也可通过环境变量 `QQBOT_APPID` / `QQBOT_SECRET` 设置。
|
|
279
|
+
|
|
280
|
+
**方式三:手动安装 / 升级**
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# 卸载旧插件(首次安装可跳过)
|
|
284
|
+
openclaw plugins uninstall qqbot
|
|
285
|
+
openclaw plugins uninstall openclaw-qqbot
|
|
286
|
+
|
|
287
|
+
# 安装最新版本
|
|
288
|
+
openclaw plugins install @tencent-connect/openclaw-qqbot@latest
|
|
289
|
+
|
|
290
|
+
# 配置通道(首次安装必做)
|
|
291
|
+
openclaw channels add --channel qqbot --token "AppID:AppSecret"
|
|
292
|
+
|
|
293
|
+
# 启动 / 重启
|
|
294
|
+
openclaw gateway restart
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### 第三步 — 测试
|
|
298
|
+
|
|
299
|
+
打开 QQ,找到你的机器人,发条消息试试!
|
|
300
|
+
|
|
301
|
+
<div align="center">
|
|
302
|
+
<img width="500" alt="聊天演示" src="https://github.com/user-attachments/assets/b2776c8b-de72-4e37-b34d-e8287ce45de1" />
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## ⚙️ 进阶配置
|
|
308
|
+
|
|
309
|
+
### 多账户配置(Multi-Bot)
|
|
310
|
+
|
|
311
|
+
支持在同一个 OpenClaw 实例下同时运行多个 QQ 机器人。
|
|
312
|
+
|
|
313
|
+
#### 配置方式
|
|
314
|
+
|
|
315
|
+
编辑 `~/.openclaw/openclaw.json`,在 `channels.qqbot` 下增加 `accounts` 字段:
|
|
316
|
+
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"channels": {
|
|
320
|
+
"qqbot": {
|
|
321
|
+
"enabled": true,
|
|
322
|
+
"appId": "111111111",
|
|
323
|
+
"clientSecret": "secret-of-bot-1",
|
|
324
|
+
|
|
325
|
+
"accounts": {
|
|
326
|
+
"bot2": {
|
|
327
|
+
"enabled": true,
|
|
328
|
+
"appId": "222222222",
|
|
329
|
+
"clientSecret": "secret-of-bot-2"
|
|
330
|
+
},
|
|
331
|
+
"bot3": {
|
|
332
|
+
"enabled": true,
|
|
333
|
+
"appId": "333333333",
|
|
334
|
+
"clientSecret": "secret-of-bot-3"
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**说明:**
|
|
343
|
+
|
|
344
|
+
- 顶层的 `appId` / `clientSecret` 是**默认账户**(accountId = `"default"`)
|
|
345
|
+
- `accounts` 下的每个 key(如 `bot2`、`bot3`)就是该账户的 `accountId`
|
|
346
|
+
- 每个账户都可以独立配置 `enabled`、`name`、`allowFrom`、`systemPrompt` 等字段
|
|
347
|
+
- 也可以不配顶层默认账户,只在 `accounts` 里配置所有机器人
|
|
348
|
+
|
|
349
|
+
通过 CLI 添加第二个机器人(如果框架支持 `--account` 参数):
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
#### 向指定账户的用户发送消息
|
|
356
|
+
|
|
357
|
+
使用 `openclaw message send` 发消息时,需要通过 `--account` 参数指定使用哪个机器人发送:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# 使用默认机器人发送(不指定 --account 时自动使用 default)
|
|
361
|
+
openclaw message send --channel "qqbot" \
|
|
362
|
+
--target "qqbot:c2c:OPENID" \
|
|
363
|
+
--message "hello from default bot"
|
|
364
|
+
|
|
365
|
+
# 使用 bot2 发送
|
|
366
|
+
openclaw message send --channel "qqbot" \
|
|
367
|
+
--account bot2 \
|
|
368
|
+
--target "qqbot:c2c:OPENID" \
|
|
369
|
+
--message "hello from bot2"
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Target 格式支持:**
|
|
373
|
+
|
|
374
|
+
| 格式 | 说明 |
|
|
375
|
+
|------|------|
|
|
376
|
+
| `qqbot:c2c:OPENID` | 私聊 |
|
|
377
|
+
| `qqbot:group:GROUP_OPENID` | 群聊 |
|
|
378
|
+
| `qqbot:channel:CHANNEL_ID` | 频道 |
|
|
379
|
+
|
|
380
|
+
> ⚠️ **注意**:每个机器人的用户 OpenID 是不同的。机器人 A 收到的用户 OpenID 不能用机器人 B 去发消息,否则会返回 500 错误。必须用对应机器人的 accountId 去给该机器人的用户发消息。
|
|
381
|
+
|
|
382
|
+
#### 工作原理
|
|
383
|
+
|
|
384
|
+
- 启动 `openclaw gateway` 后,所有 `enabled: true` 的账户会同时启动 WebSocket 连接
|
|
385
|
+
- 每个账户独立维护 Token 缓存(基于 `appId` 隔离),互不干扰
|
|
386
|
+
- 接收消息时,日志会带上 `[qqbot:accountId]` 前缀方便排查
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
### 语音能力配置(STT / TTS)
|
|
391
|
+
|
|
392
|
+
#### STT(语音转文字)— 自动转录用户发来的语音消息
|
|
393
|
+
|
|
394
|
+
STT 支持两级配置,按优先级查找:
|
|
395
|
+
|
|
396
|
+
| 优先级 | 配置路径 | 作用域 |
|
|
397
|
+
|--------|----------|--------|
|
|
398
|
+
| 1(highest) | `channels.qqbot.stt` | 插件专属 |
|
|
399
|
+
| 2(fallback) | `tools.media.audio.models[0]` | 框架级 |
|
|
400
|
+
|
|
401
|
+
```json
|
|
402
|
+
{
|
|
403
|
+
"channels": {
|
|
404
|
+
"qqbot": {
|
|
405
|
+
"stt": {
|
|
406
|
+
"provider": "your-provider",
|
|
407
|
+
"model": "your-stt-model"
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
- `provider` — 引用 `models.providers` 中的 key,自动继承 `baseUrl` 和 `apiKey`
|
|
415
|
+
- 设置 `enabled: false` 可禁用
|
|
416
|
+
- 配置后,用户发来的语音消息会自动转换(SILK→WAV)并转录为文字
|
|
417
|
+
|
|
418
|
+
#### TTS(文字转语音)— 机器人发送语音消息
|
|
419
|
+
|
|
420
|
+
| 优先级 | 配置路径 | 作用域 |
|
|
421
|
+
|--------|----------|--------|
|
|
422
|
+
| 1(highest) | `channels.qqbot.tts` | 插件专属 |
|
|
423
|
+
| 2(fallback) | `messages.tts` | 框架级 |
|
|
424
|
+
|
|
425
|
+
```json
|
|
426
|
+
{
|
|
427
|
+
"channels": {
|
|
428
|
+
"qqbot": {
|
|
429
|
+
"tts": {
|
|
430
|
+
"provider": "your-provider",
|
|
431
|
+
"model": "your-tts-model",
|
|
432
|
+
"voice": "your-voice"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
- `provider` — 引用 `models.providers` 中的 key,自动继承 `baseUrl` 和 `apiKey`
|
|
440
|
+
- `voice` — 语音音色
|
|
441
|
+
- 设置 `enabled: false` 可禁用(默认:`true`)
|
|
442
|
+
- 配置后,AI 可生成并发送语音消息
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## 📚 文档与链接
|
|
447
|
+
|
|
448
|
+
- [升级指南](docs/UPGRADE_GUIDE.zh.md) — 完整升级路径与迁移说明
|
|
449
|
+
- [命令参考](docs/commands.md) — OpenClaw CLI 常用命令
|
|
450
|
+
- [更新日志](CHANGELOG.md) — 各版本变更记录
|
|
451
|
+
|
|
452
|
+
## 🤝 贡献者
|
|
453
|
+
|
|
454
|
+
感谢所有为本项目做出贡献的开发者!
|
|
455
|
+
|
|
456
|
+
<a href="https://github.com/tencent-connect/openclaw-qqbot/graphs/contributors">
|
|
457
|
+
<img src="https://contrib.rocks/image?repo=tencent-connect/openclaw-qqbot" />
|
|
458
|
+
</a>
|
|
459
|
+
|
|
460
|
+
## 💖 致谢
|
|
461
|
+
|
|
462
|
+
特别感谢 [@sliverp](https://github.com/sliverp) 对项目的核心贡献!
|
|
463
|
+
|
|
464
|
+
<a href="https://github.com/sliverp"><img src="https://avatars.githubusercontent.com/u/38134380?v=4" width="48" height="48" alt="sliverp" title="sliverp"/></a>
|
|
465
|
+
|
|
466
|
+
感谢[腾讯云Lighthouse](https://cloud.tencent.com/product/lighthouse)的深度合作,养小龙虾,首选腾讯云Lighthouse!
|
|
467
|
+
|
|
468
|
+
<a href="https://cloud.tencent.com/product/lighthouse">
|
|
469
|
+
<img alt="腾讯云 Lighthouse" src="./docs/images/lighthouse_head.png" height="500" style="max-width:80%; height:auto;"/>
|
|
470
|
+
</a>
|
|
471
|
+
|
|
472
|
+
## ⭐ Star History
|
|
473
|
+
|
|
474
|
+
<div align="center">
|
|
475
|
+
|
|
476
|
+
[](https://www.star-history.com/#tencent-connect/openclaw-qqbot&type=date&legend=top-left)
|
|
477
|
+
|
|
478
|
+
</div>
|