管理 CloseCrab bot 配置(Firestore)。添加新 bot、给已有 bot 添加 channel、切换 channel、查看配置。当用户说"添加一个 bot"、"新建 bot"、"加个飞书 channel"、"加个 discord channel"、"切换到飞书"、"bot 配置"、"add bot"、"add channel"等关键词时触发。
Scanned 9/13/2026
Install to Claude Code
npx -y skills add yangwhale/CloseCrab --skill bot-config --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Bot Config?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/yangwhale-bot-config)More formats (shields.io, HTML) on the badges page.
---
name: bot-config
description: 管理 CloseCrab bot 配置(Firestore)。添加新 bot、给已有 bot 添加 channel、切换 channel、查看配置。当用户说"添加一个 bot"、"新建 bot"、"加个飞书 channel"、"加个 discord channel"、"切换到飞书"、"bot 配置"、"add bot"、"add channel"等关键词时触发。
---
# Bot Config 管理
所有 bot 配置存储在 Firestore(由 `FIRESTORE_PROJECT` / `FIRESTORE_DATABASE` 环境变量配置),通过 `scripts/config-manage.py` 管理。
## 管理脚本位置
```
~/CloseCrab/scripts/config-manage.py
```
## 支持的操作
### 1. 查看
```bash
# 列出所有 bot
python3 ~/CloseCrab/scripts/config-manage.py list
# 查看某个 bot 配置(密钥自动打码)
python3 ~/CloseCrab/scripts/config-manage.py show <bot_name>
```
### 2. 创建新 bot
用 AskUserQuestion 收集以下信息:
1. **Bot 名称** — 英文小写,用于 Firestore document ID 和 `run.sh <name>` 启动
2. **首选 channel 类型** — discord / feishu / lark / dingtalk
3. **channel 凭据** — 根据类型不同(见下方各 channel 指南)
```bash
python3 ~/CloseCrab/scripts/config-manage.py create <bot_name> \
--channel <type> \
--description "描述" \
[channel-specific options]
```
### 3. 给已有 bot 添加 channel
```bash
python3 ~/CloseCrab/scripts/config-manage.py add-channel <bot_name> <channel_type> [options]
```
### 4. 切换活跃 channel
```bash
python3 ~/CloseCrab/scripts/config-manage.py set-channel <bot_name> <channel_type>
```
### 5. 修改配置字段
```bash
python3 ~/CloseCrab/scripts/config-manage.py set <bot_name> <field> <value>
```
### 6. 删除 bot
```bash
python3 ~/CloseCrab/scripts/config-manage.py delete <bot_name> --yes
```
---
## Channel 创建指南
### Discord
**需要的信息:**
- `--token` — Bot Token
**可选:**
- `--log-channel-id` — 日志频道 ID
- `--auto-respond-channels` — 自动回复频道 ID(逗号分隔)
**获取方式:**
1. 打开 [Discord Developer Portal](https://discord.com/developers/applications)
2. 点击 **New Application** → 起名 → 创建
3. 左侧 **Bot** 页面:
- 点 **Reset Token** 复制 Token(只显示一次!)
- 开启 3 个 Privileged Intents:**Presence Intent**、**Server Members Intent**、**Message Content Intent**
4. 左侧 **OAuth2** 页面:
- Scopes: 勾选 `bot`、`applications.commands`
- Bot Permissions: Send Messages, Read Message History, Embed Links, Attach Files, View Channels
- 复制生成的 URL,在浏览器打开邀请 bot 进服务器
5. 左侧 **Installation** 页面:
- **禁用 User Install**(安全考虑)
6. 获取频道 ID:Discord 设置 → 高级 → 开启开发者模式 → 右键频道 → 复制频道 ID
**示例:**
```bash
python3 ~/CloseCrab/scripts/config-manage.py create mybot \
--channel discord \
--token "MTQ3xxx..." \
--log-channel-id "1234567890" \
--auto-respond-channels "1111111111,2222222222"
```
---
### 飞书 (Feishu)
**需要的信息:**
- `--app-id` — 应用 App ID
- `--app-secret` — 应用 App Secret
**可选:**
- `--log-chat-id` — 日志群 Chat ID
- `--allowed-open-ids` — 允许的用户 Open ID(逗号分隔)
- `--auto-respond-chats` — 自动回复群 Chat ID(逗号分隔)
**获取方式:**
1. 打开 [飞书开放平台](https://open.feishu.cn/app)
2. 点击 **创建企业自建应用**
3. 在应用详情页的 **凭证与基础信息** 中获取 **App ID** 和 **App Secret**
4. 左侧 **添加应用能力** → 添加 **机器人**
5. **权限管理** → 申请以下权限:
- `im:message` — 获取与发送消息
- `im:message.group_at_msg` — 接收群聊 @机器人消息
- `im:message.p2p_msg` — 接收私聊消息
- `im:chat` — 获取群信息
- `contact:user.base:readonly` — 获取用户基本信息(可选)
6. **事件与回调** → **事件配置**:
- 启用 **长连接 (WebSocket)** 模式(推荐,无需公网 IP)
- 订阅事件:`im.message.receive_v1`(接收消息)
7. **版本管理与发布** → 创建版本 → 申请发布 → 管理员审批
8. 发布后在飞书客户端搜索 bot 名称即可发起对话
**示例:**
```bash
python3 ~/CloseCrab/scripts/config-manage.py add-channel mybot feishu \
--app-id "cli_a932b22651785cb2" \
--app-secret "VEvf3daX..."
```
---
### Lark (国际版飞书)
**需要的信息:**
- `--app-id` — 应用 App ID(`cli_` 开头)
- `--app-secret` — 应用 App Secret
**获取方式:**
1. 打开 [Lark Developer Console](https://open.larksuite.com/app)
2. 步骤与飞书相同,但注意:
- Lark Standard 版 **API 限额仅 10,000 次/月**(飞书基础版目前 1M/月)
- 域名用 `open.larksuite.com` 而非 `open.feishu.cn`
- SDK domain 用 `LARK_DOMAIN` 而非 `FEISHU_DOMAIN`
**注意事项:**
- 如果同时有飞书和 Lark 应用,需要分别创建两个应用(不同的 App ID)
- Lark 的 API quota 很低,建议只在必须接入国际用户时使用
**示例:**
```bash
python3 ~/CloseCrab/scripts/config-manage.py add-channel mybot lark \
--app-id "cli_a948237ceff89eef" \
--app-secret "L46GVtnm..."
```
---
### 钉钉 (DingTalk)
**需要的信息:**
- `--client-id` — 应用 Client ID(`ding` 开头)
- `--client-secret` — 应用 Client Secret
**获取方式:**
1. 打开 [钉钉开放平台](https://open-dev.dingtalk.com/)
2. 应用开发 → 企业内部开发 → 创建应用
3. 在 **应用凭证** 中获取 **Client ID** 和 **Client Secret**
4. 添加 **消息收发** 能力
5. 配置事件订阅(Stream 模式,无需公网 IP)
**示例:**
```bash
python3 ~/CloseCrab/scripts/config-manage.py create dingbot \
--channel dingtalk \
--client-id "dingxxx" \
--client-secret "xxx"
```
---
## 创建后的操作
bot 配置写入 Firestore 后,还需要:
1. **启动 bot**:
```bash
cd ~/CloseCrab && ./run.sh <bot_name>
```
2. **远程机器部署**(如需在其他机器运行):
```bash
ssh <machine> "cd ~/CloseCrab && git pull && ./run.sh <bot_name>"
```
不需要 `.env` 文件,配置全从 Firestore 读取。
3. **加入 Team**(可选):
```bash
python3 ~/CloseCrab/scripts/config-manage.py set <bot_name> team \
'{"role":"teammate","leader_bot_id":"1473626xxx","team_channel_id":"1477228xxx"}'
```
## 交互式引导
当用户没有提供完整信息时,用 AskUserQuestion 逐步引导:
1. 先问 **bot 名称**和 **channel 类型**
2. 根据 channel 类型,展示上方对应的「获取方式」步骤
3. 等用户提供凭据后执行创建命令
4. 创建完成后提示用户启动 bot
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!