# QQ Bot Channel Plugin for Moltbot

QQ 官方机器人 API Moltbot 渠道插件,支持 C2C 私聊、群聊 @消息、频道消息。

## 功能特性

- **多场景支持**C2C 单聊、QQ @消息、频道公开消息、频道私信
- **自动重连**WebSocket 断连后自动重连,支持 Session Resume
- **消息去重**:自动管理 `msg_seq`,支持对同一消息多次回复
- **系统提示词**:可配置自定义系统提示词注入到 AI 请求
- **错误提示**AI 无响应时自动提示用户检查配置

## 安装

在插件目录下执行:

```bash
clawdbot plugins install .
```

## 配置

### 1. 获取 QQ 机器人凭证

1. 访问 [QQ 开放平台](https://q.qq.com/)
2. 创建机器人应用
3. 获取 `AppID` `AppSecret`ClientSecret
4. Token 格式为 `AppID:AppSecret`,例如 `102146862:Xjv7JVhu7KXkxANbp3HVjxCRgvAPeuAQ`

### 2. 添加配置

#### 方式一:交互式配置

```bash
clawdbot channels add
# 选择 qqbot,按提示输入 Token
```

#### 方式二:命令行配置

```bash
clawdbot channels add --channel qqbot --token "AppID:AppSecret"
```

示例:

```bash
clawdbot channels add --channel qqbot --token "102146862:xxxxxxxx"
```

### 3. 手动编辑配置(可选)

也可以直接编辑 `~/.clawdbot/clawdbot.json`

```json
{
  "channels": {
    "qqbot": {
      "enabled": true,
      "appId": "你的AppID",
      "clientSecret": "你的AppSecret",
      "systemPrompt": "你是一个友好的助手"
    }
  }
}
```

### 4. 环境变量配置(可选)

```bash
export QQBOT_APP_ID="你的AppID"
export QQBOT_CLIENT_SECRET="你的AppSecret"
```

## 配置项说明

| 配置项 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| `appId` | string | | QQ 机器人 AppID |
| `clientSecret` | string | * | AppSecret,与 `clientSecretFile` 二选一 |
| `clientSecretFile` | string | * | AppSecret 文件路径 |
| `enabled` | boolean | | 是否启用,默认 `true` |
| `name` | string | | 账户显示名称 |
| `systemPrompt` | string | | 自定义系统提示词 |

## 支持的消息类型

| 事件类型 | 说明 | Intent |
|----------|------|--------|
| `C2C_MESSAGE_CREATE` | C2C 单聊消息 | `1 << 25` |
| `GROUP_AT_MESSAGE_CREATE` | 群聊 @机器人消息 | `1 << 25` |
| `AT_MESSAGE_CREATE` | 频道 @机器人消息 | `1 << 30` |
| `DIRECT_MESSAGE_CREATE` | 频道私信 | `1 << 12` |

## 使用

### 启动

```bash
clawdbot gateway restart
```

### CLI 配置向导

```bash
clawdbot onboard
# 选择 QQ Bot 进行交互式配置
```

## 注意事项

1. **消息回复限制**QQ 官方 API 限制每条消息最多回复 5 次,超时 60 分钟
2. **URL 限制**QQ 平台不允许消息中包含 URL,插件已内置提示词限制
3. **群消息**:需要在群内 @机器人 才能触发回复
4. **沙箱模式**:新创建的机器人默认在沙箱模式,需要添加测试用户

## 升级

如果需要升级插件,先运行升级脚本清理旧版本:

```bash
# 运行升级脚本(清理旧版本和配置)
./scripts/upgrade.sh

# 重新安装插件
clawdbot plugins install .

# 重新配置
clawdbot channels add --channel qqbot --token "AppID:AppSecret"

# 重启网关
clawdbot gateway restart
```

升级脚本会自动:
- 删除 `~/.clawdbot/extensions/qqbot` 目录
- 清理 `clawdbot.json` 中的 qqbot 相关配置

## 开发

```bash
# 安装依赖
npm install

# 编译
npm run build

# 监听模式
npm run dev
```

## 文件结构

```
qqbot/
├── index.ts          # 入口文件
├── src/
│   ├── api.ts        # QQ Bot API 封装
│   ├── channel.ts    # Channel Plugin 定义
│   ├── config.ts     # 配置解析
│   ├── gateway.ts    # WebSocket 网关
│   ├── onboarding.ts # CLI 配置向导
│   ├── outbound.ts   # 出站消息处理
│   ├── runtime.ts    # 运行时状态
│   └── types.ts      # 类型定义
├── scripts/
│   └── upgrade.sh    # 升级脚本
├── package.json
└── tsconfig.json
```

## 相关链接

- [QQ 机器人官方文档](https://bot.q.qq.com/wiki/)
- [QQ 开放平台](https://q.qq.com/)
- [API v2 文档](https://bot.q.qq.com/wiki/develop/api-v2/)

## License

MIT