Include utility modules, shared channels, prompts, read-only skills, wardrobe memory and regression tests. Externalize legacy credentials and exclude private runtime state.
76 lines
5.0 KiB
Markdown
76 lines
5.0 KiB
Markdown
# Shirobana Bot · 白花
|
||
|
||
统一 Telegram / 可选 QQ 桥的 utility bot 后端,包含多模态聊天、受权限控制的工具循环、持久通知、定时提醒、用户记忆、笔记本、私人衣柜和只读 Agent Skills。
|
||
|
||
## 目录
|
||
|
||
- `bot-utility/`:主入口、业务模块、提示词、技能加载器。
|
||
- 根目录 `channel.py`、`tg_channel.py`、`qq_channel.py`、`identity.py`:共享通道和统一身份。
|
||
- `tests/`:隔离回归测试,不需要真实邮箱密码或模型 API Key。
|
||
- `mail-bridge/`:独立邮件桥源代码。hMailServer COM 相关功能需另行在 Windows 部署,不由 bot 主入口自动启动。
|
||
- `bot-utility.service`:可调整的 systemd 部署模板,不是生产服务器的私有配置。
|
||
|
||
## 安装与配置
|
||
|
||
建议 Python 3.12。锁定依赖来自当前运行环境:
|
||
|
||
```bash
|
||
python3 -m venv bot-utility/.venv
|
||
bot-utility/.venv/bin/pip install -r bot-utility/requirements.lock
|
||
cp bot-utility/settings.example.json bot-utility/settings.json
|
||
```
|
||
|
||
在本地私有 `settings.json` 中设置 Telegram token、可选代理及管理员 ID。聊天模式默认普通用户 command、管理员 chat、群聊 command;已保存的用户设置优先。媒体下载模块如需本地代理端口列表,可将 `bot-utility/proxies.example.json` 复制为私有 `bot-utility/proxies.json` 并按实际代理配置填写;不要上传真实代理配置。
|
||
|
||
将 `.env.example` 复制到仓库外的受限环境文件,例如 `/etc/shirobana-bot/bot.env`,由 systemd 的 `EnvironmentFile` 加载。**程序不会自动读取 `.env` 文件。** 密钥为空的示例不能直接用于生产。权限建议 root:root、0600;不要把真实密钥放进 unit 的可读 `Environment=` 行或提交到 Git。
|
||
|
||
```bash
|
||
# 前台测试:先通过你自己的安全方式导入环境变量,再启动。
|
||
cd bot-utility
|
||
.venv/bin/python -B main.py
|
||
```
|
||
|
||
systemd 模板中的用户、目录和环境文件路径需要先调整。代理、OSS/FUSE、Komari、Pixiv 文件服务器、OpenAPI 和邮件桥地址依具体环境配置;部分旧模块保留了现有部署的非秘密域名或目录,迁移部署前应检查。不要为了试运行同时启动两份使用相同 Telegram token 的长轮询实例。
|
||
|
||
### 凭据来源
|
||
|
||
| 用途 | 配置 |
|
||
| --- | --- |
|
||
| 模型调用 | `DEEPSEEK_API_KEY`、`MODELSCOPE_API_KEY` |
|
||
| 白花 Akaros 邮箱 | `AKAROS_MAIL_API_KEY` |
|
||
| Komari 旧式密码登录 | `KOMARI_PASSWORD`;既有 `komari/setting.json` API Key 方式仍兼容 |
|
||
| Pixiv 文件服务器上传 | `PIXIV_CF_PASSWORD` |
|
||
| 直播回调认证 | `BOT_SRS_CALLBACK_SECRET` |
|
||
| Linux bot 访问邮件 COM HTTP 桥 | `MAIL_COM_TOKEN_FILE` 指向私有 token 文件 |
|
||
| 独立 mailWeb 程序 | `HMAIL_ADMIN_PASSWORD`、`MAIL_REGISTER_AUTH_CODE`、`MAIL_FLASK_SECRET_KEY` |
|
||
| 独立 COM 桥 | `MAIL_COM_CONFIG` 指向私有 `com-private.json`;参考 `mail-bridge/com-private.example.json` |
|
||
|
||
Komari/Pixiv 未提供对应凭据时,不会回退到内置密码。mailWeb 的 Flask 签名密钥未配置时每次启动随机生成,持久会话部署应设置稳定的私有密钥。仓库中保留的 SSO 加密/CSRF 协议常量并不是用户密码。
|
||
|
||
Windows 邮件 Web/MCP 附加服务使用 Flask-CORS、MCP SDK 等额外依赖,COM 服务还需要 pywin32/hMailServer;Linux bot 的依赖锁不是这些独立服务的完整部署清单。
|
||
|
||
## 功能说明
|
||
|
||
- 私聊和群聊身份隔离;权限由执行器验证,不由模型自行授权。
|
||
- 多轮工具执行,累计结果摘要,衣柜同轮重复新增保护。
|
||
- 持久化定时提醒、通知投递重试及去重;异常情况下为至少一次投递,不承诺绝对 exactly-once。
|
||
- 长期记忆、备忘录、Todo、每用户独立的衣柜;衣柜默认白色连衣裙,不向群聊提供私人库存。
|
||
- 原生多模态输入与全局贴纸场景库。
|
||
- 只读语言 Skill:见 `bot-utility/skills/README.md`。默认白名单为空;不执行 Skill 脚本或允许其改变工具权限。
|
||
- 衣柜收尾使用独立纯文本润色,不将内部记录 JSON 直接作为聊天内容。
|
||
- `/my`、`/setting`、`/help` 是 Telegram 菜单入口。
|
||
|
||
## 测试
|
||
|
||
```bash
|
||
PYTHONDONTWRITEBYTECODE=1 bot-utility/.venv/bin/python -m unittest discover -s tests -v
|
||
```
|
||
|
||
测试使用临时目录及 mock;不要将测试数据或测试配置替换成生产数据。发布前应在独立 checkout 运行测试,避免导入时创建的状态文件污染运行目录。
|
||
|
||
## 数据与安全边界
|
||
|
||
此仓库仅保存代码、默认提示词和无凭据模板,**不包括**用户账号映射、TG token、API Key、聊天历史、记忆/衣柜数据库、邮件、白果云账号密码、贴纸文件、下载缓存、日志、备份和虚拟环境。
|
||
|
||
`.gitignore` 是防误提交措施,不代替内容审查。新增文件或发布前仍应扫描硬编码密钥,特别是嵌套配置和历史测试样本。生产业务状态可能包含明文敏感数据,应限制文件权限并自行加密备份;现有审计行为未因本次源码发布整体重构。
|