docs: README 重写为 ops-assistant 框架版
- 版本说明更正(0.0.1 起版,注明由 xiaji-go 演进而来) - 新增 OPS 命令参考(/cf /cpa /cfdav /sub /mail) - 新增 Runbook 自动化章节(严格断言 / 结果回传 / 任务审计) - 补充开发与发布流程、模块凭据存储说明
This commit is contained in:
+1
-1
@@ -28,4 +28,4 @@ config.yaml
|
||||
Thumbs.db
|
||||
|
||||
# Go
|
||||
vendor/
|
||||
vendor/ops-runner
|
||||
|
||||
@@ -1,59 +1,53 @@
|
||||
# 🦞 虾记 Xiaji-Go
|
||||
# 🛠️ Ops-Assistant
|
||||
|
||||
一个支持 **Telegram Bot** 和 **QQ Bot** 的智能记账机器人,带 Web 管理后台。
|
||||
多平台 Bot + 自动化运维一体的私人助理服务:**智能记账**、**Runbook 工单执行**、**模块化 OPS 命令**(Cloudflare / CPA / 订阅 / cfdav / 邮箱),带 Web 管理后台。
|
||||
|
||||
> 当前稳定版本:`v1.1.12`
|
||||
> 项目由 Xiaji-Go(记账机器人)演进更名而来;当前 `VERSION` 为 `0.0.1`(框架重构后重新起版,历史记账版本线为 v1.1.x)。
|
||||
|
||||
## 🆕 v1.1.12 更新
|
||||
## 🆕 框架版更新要点
|
||||
|
||||
- 新增渠道管理页:`/channels`(移动端优先,统一 UI)
|
||||
- 新增审计页面:`/audit`(中文化)
|
||||
- 新增一键生效接口:`POST /api/v1/admin/channels/:platform/apply`
|
||||
- 渠道配置安全增强:`***` 脱敏占位符不会覆盖真实 secrets
|
||||
- apply 失败返回增强:失败时返回 `stage` 与 `committed` 字段
|
||||
- 首页/登录/渠道/审计页面版本显示统一为 `vX.Y.Z`
|
||||
- **项目更名**:`xiaji-go` → `ops-assistant`(go.mod / 二进制 / systemd 同步)
|
||||
- **模块化命令框架**:`internal/core/module` 统一命令模板、门控(feature flag / confirm / dry-run)、错误标签(ecode)、结果格式化回传
|
||||
- **Runbook 执行器增强**(`internal/core/runbook`):
|
||||
- 新增动作:`http.get` / `http.post` / `assert.json`(支持 `expect_success` 严格断言,API 失败不再假阳性)
|
||||
- 目标主机管理(`ops_targets`,默认 seed:hwsg / wjynl)
|
||||
- 任务与步骤全程落库(`ops_jobs` / `ops_job_steps`),Web 后台可查
|
||||
- **查询类命令结果直接回传**(此前仅回执 job 号)
|
||||
- **CF 模块增强**:DNS 查询支持**传域名自动解析 zone_id**;`dns list / zones / workers list` 结果可读回传;API `success:false` 时任务真失败并回传错误摘要
|
||||
- **新增模块**:`cpa`(usage 备份/恢复)、`cfdav`、`mail`、`sub`(订阅管理与到期提醒)
|
||||
- **QQ Bot**:AI 命令加载器、每日订阅提醒调度(09:00)
|
||||
- **Web 后台**:模块设置页(CF / CPA / cfdav / AI)、OPS 任务页、渠道管理、审计页
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
- **多平台支持**:同时接入 Telegram Bot 和 QQ Bot(WebSocket 模式)
|
||||
- **智能记账**:发送自然语言自动识别金额和消费分类(基于 jieba 分词)
|
||||
- **150+ 预设分类关键词**:餐饮、交通、购物、饮品、水果、住房、医疗、娱乐等
|
||||
- **Web 管理后台**:响应式设计,支持记录查看、删除、CSV 导出
|
||||
- **金额精确**:使用分(int64)存储,避免浮点精度问题
|
||||
- **优雅关闭**:支持 SIGTERM/SIGINT 信号,干净退出
|
||||
- **多平台接入**:QQ 官方 Bot(WebSocket)、Telegram Bot、飞书(通道层预留)
|
||||
- **智能记账**:自然语言识别金额与消费分类(jieba 分词,150+ 预设关键词)
|
||||
- **OPS 命令**:`/cf` `/cpa` `/cfdav` `/sub` `/mail`,写操作带 dry-run / 确认门控
|
||||
- **Runbook 自动化**:YAML 定义、步骤编排、断言校验、任务审计
|
||||
- **Web 管理后台**:记录查看 / 删除 / CSV 导出、模块与渠道配置、任务与审计查看
|
||||
- **金额精确**:分(int64)存储,避免浮点误差
|
||||
- **优雅关闭**:SIGTERM/SIGINT 干净退出
|
||||
|
||||
## 📦 快速开始
|
||||
|
||||
### 二进制运行
|
||||
|
||||
```bash
|
||||
# 1. 复制配置文件
|
||||
cp config.yaml.example config.yaml
|
||||
|
||||
# 2. 编辑配置(填入 Bot Token 等信息)
|
||||
vi config.yaml
|
||||
|
||||
# 3. 运行
|
||||
./xiaji-go
|
||||
vi config.yaml # 填入 Bot Token 等
|
||||
./ops-assistant
|
||||
```
|
||||
|
||||
### Docker 运行
|
||||
|
||||
```bash
|
||||
# 1. 准备配置文件
|
||||
cp config.yaml.example config.yaml
|
||||
vi config.yaml
|
||||
|
||||
# 2. 使用 docker-compose
|
||||
cp config.yaml.example config.yaml && vi config.yaml
|
||||
docker-compose up -d
|
||||
|
||||
# 或直接 docker run
|
||||
docker run -d \
|
||||
--name xiaji-go \
|
||||
-p 9521:9521 \
|
||||
# 或
|
||||
docker run -d --name ops-assistant -p 9621:9621 \
|
||||
-v $(pwd)/config.yaml:/app/config.yaml:ro \
|
||||
-v $(pwd)/data:/app/data \
|
||||
ouaone/xiaji-go:latest
|
||||
ouaone/ops-assistant:latest
|
||||
```
|
||||
|
||||
### 从源码编译
|
||||
@@ -61,8 +55,6 @@ docker run -d \
|
||||
```bash
|
||||
# 需要 Go 1.22+、GCC(gojieba 依赖 CGO)
|
||||
make build
|
||||
|
||||
# 交叉编译 Linux
|
||||
make build-linux
|
||||
```
|
||||
|
||||
@@ -70,7 +62,7 @@ make build-linux
|
||||
|
||||
```yaml
|
||||
server:
|
||||
port: 9521 # Web 后台端口
|
||||
port: 9621 # Web 后台端口
|
||||
key: "your-secret-key" # 会话密钥
|
||||
|
||||
database:
|
||||
@@ -78,108 +70,164 @@ database:
|
||||
|
||||
admin:
|
||||
username: "admin" # Web 后台用户名
|
||||
password: "your_password" # Web 后台密码
|
||||
password: "your_password" # 弱密码启动时会告警
|
||||
|
||||
telegram:
|
||||
enabled: true # 是否启用 Telegram Bot
|
||||
token: "YOUR_BOT_TOKEN" # BotFather 获取的 Token
|
||||
enabled: true
|
||||
token: "YOUR_BOT_TOKEN"
|
||||
|
||||
qqbot:
|
||||
enabled: false # 是否启用 QQ Bot
|
||||
appid: "YOUR_APPID" # QQ 开放平台 AppID
|
||||
secret: "YOUR_SECRET" # QQ 开放平台 AppSecret
|
||||
enabled: false
|
||||
appid: "YOUR_APPID"
|
||||
secret: "YOUR_SECRET"
|
||||
```
|
||||
|
||||
## 💬 使用方式
|
||||
> **模块凭据**(CF API Token、CPA 管理令牌、cfdav 账号等)保存在数据库 `app_settings` 表,通过 Web 后台「模块设置」页配置,**不写入配置文件**;渠道 secrets 在数据库内加密存储(`enc:v1:` 前缀)。
|
||||
|
||||
### Telegram Bot 命令
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `/start` | 欢迎信息 |
|
||||
| `/help` | 使用帮助 |
|
||||
| `/list` | 最近 10 条记录 |
|
||||
| `/today` | 今日消费汇总 |
|
||||
| 直接发消息 | 自动记账(如"午饭 25元") |
|
||||
## 💬 记账功能
|
||||
|
||||
### QQ Bot 关键词
|
||||
|
||||
| 关键词 | 说明 |
|
||||
|--------|------|
|
||||
| `帮助` / `菜单` / `功能` | 显示帮助 |
|
||||
| `帮助` / `菜单` | 显示帮助 |
|
||||
| `查看` / `记录` / `列表` | 最近 10 条记录 |
|
||||
| `今日` / `今天` | 今日消费汇总 |
|
||||
| 直接发消息 | 自动记账 |
|
||||
| 直接发消息 | 自动记账(如"午饭 25元") |
|
||||
|
||||
### 记账格式
|
||||
### Telegram Bot 命令
|
||||
|
||||
支持多种自然语言格式:
|
||||
`/start` `/help` `/list` `/today`,或直接发消息自动记账。
|
||||
|
||||
### 支持格式与分类
|
||||
|
||||
```
|
||||
午饭 25元
|
||||
打车 ¥30
|
||||
买咖啡15块
|
||||
车费10元
|
||||
超市买水果38.5
|
||||
午饭 25元 / 打车 ¥30 / 买咖啡15块 / 超市买水果38.5
|
||||
```
|
||||
|
||||
### 消费分类
|
||||
预设 150+ 关键词覆盖:🍜 餐饮、🚗 交通、🛒 购物、☕ 饮品、🍎 水果、🍪 零食、🏠 住房、📱 通讯、💊 医疗、🎮 娱乐、📚 教育、🚬 烟酒。
|
||||
|
||||
系统预设了 150+ 个关键词,自动匹配以下分类:
|
||||
## 🧰 OPS 命令参考
|
||||
|
||||
| 分类 | 示例关键词 |
|
||||
|------|-----------|
|
||||
| 🍜 餐饮 | 早饭、午饭、晚饭、外卖、火锅、面条 |
|
||||
| 🚗 交通 | 打车、车费、地铁、公交、加油 |
|
||||
| 🛒 购物 | 买、淘宝、超市、衣服、手机 |
|
||||
| ☕ 饮品 | 咖啡、奶茶、星巴克、可乐 |
|
||||
| 🍎 水果 | 水果、苹果、香蕉、西瓜 |
|
||||
| 🍪 零食 | 零食、面包、蛋糕、甜品 |
|
||||
| 🏠 住房 | 房租、水电、物业、宽带 |
|
||||
| 📱 通讯 | 话费、流量、充值 |
|
||||
| 💊 医疗 | 看病、药、医院、挂号 |
|
||||
| 🎮 娱乐 | 电影、游戏、健身、旅游 |
|
||||
| 📚 教育 | 书、课、培训、学费 |
|
||||
| 🚬 烟酒 | 烟、白酒、红酒 |
|
||||
> 需先在 Web 后台启用对应模块开关(如 `enable_module_cf`)并配置凭据。查询类命令**直接回传格式化结果**;写操作回执 job 号,支持 `--dry-run` 预览。
|
||||
|
||||
### Cloudflare(`/cf`)
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `/cf status` | runbook 链路自检 |
|
||||
| `/cf zones` | 列出账号下站点 |
|
||||
| `/cf dns list <zone_id 或域名>` | DNS 记录列表(域名自动解析;🟠 = 已开橙云) |
|
||||
| `/cf dns update <id> <content>` | 更新记录内容 |
|
||||
| `/cf dnsadd <name> <content> [on/off] [type]` | 新增记录 |
|
||||
| `/cf dnsset <id 或 name> <content>` | 按名设置记录内容 |
|
||||
| `/cf dnsdel <id 或 name>` | 删除记录 |
|
||||
| `/cf dnsproxy <id 或 name> on\|off` | 切换橙云/灰云 |
|
||||
| `/cf workers list` | Workers 脚本列表 |
|
||||
|
||||
### CPA(CLIProxyAPI 管理)
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `/cpa status` | usage 快照(requests / tokens) |
|
||||
| `/cpa usage backup` | 实时导出 usage 并打包备份(含 sha256/meta) |
|
||||
| `/cpa usage restore <备份包>` | 恢复 usage(import 接口优先,不停服) |
|
||||
|
||||
### 其他模块
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `/cfdav users` | cfdav 用户列表 |
|
||||
| `/cfdav add <email> <password> [admin]` | 新增用户 |
|
||||
| `/cfdav del <user_id>` | 删除用户 |
|
||||
| `/mail status` | 邮箱服务状态 |
|
||||
| `/sub add` | 新增订阅(引导式流程) |
|
||||
| `/sub list` | 订阅列表 |
|
||||
| `/sub report [category\|cycle\|due <7\|30\|overdue>]` | 订阅报表 |
|
||||
| `/sub del <id>` | 删除订阅 |
|
||||
| `/sub cancel` | 取消进行中的新增流程 |
|
||||
| `/ops modules` | 查看模块启用状态 |
|
||||
|
||||
## 📜 Runbook(自动化工单)
|
||||
|
||||
`runbooks/*.yaml` 定义自动化任务,由执行器按步骤编排运行:
|
||||
|
||||
- **动作**:`ssh.exec`(远程目标)、`shell.exec`(本机)、`http.get` / `http.post`、`file.upload` / `file.extract`、`assert.json`、`sleep`
|
||||
- **严格断言**:`assert.json` 支持 `expect_success: true` —— API 返回 `success:false` 时任务判失败,错误码与摘要直接回传给用户(杜绝"执行成功但结果无效"的假阳性)
|
||||
- **结果回传**:查询类命令的 stdout 经模块格式化后直接发回聊天窗口
|
||||
- **全程审计**:每次执行落库 `ops_jobs` / `ops_job_steps`(rc、stdout/stderr tail、耗时),Web 后台「OPS 任务」页可查
|
||||
|
||||
示例(`runbooks/cf_dns_list.yaml`):解析 zone → API 查询 → `assert.json` 校验 `success=true` → 格式化回传。
|
||||
|
||||
## 🌐 Web 管理后台
|
||||
|
||||
访问 `http://localhost:9521`:
|
||||
访问 `http://localhost:9621`:
|
||||
|
||||
- 📊 今日支出 / 本月支出 / 总记录数统计
|
||||
- 📋 最近 50 条记录列表
|
||||
- 🔍 按分类筛选
|
||||
- 🗑️ 删除记录
|
||||
- 📥 CSV 导出(Excel 兼容 BOM 编码)
|
||||
- 📊 记账统计 / 最近记录 / 分类筛选 / CSV 导出
|
||||
- 🧩 模块设置:CF / CPA / cfdav / AI
|
||||
- 🔌 渠道管理:QQ / Telegram / 飞书 配置与连接测试
|
||||
- 🧾 OPS 任务与目标主机管理
|
||||
- 🛡️ 审计日志
|
||||
|
||||
## 🏗️ 项目结构
|
||||
|
||||
```
|
||||
xiaji-go/
|
||||
├── cmd/main.go # 入口文件
|
||||
ops-assistant/
|
||||
├── cmd/
|
||||
│ ├── main.go # 服务入口
|
||||
│ ├── ops-runner/ # CLI 直跑 runbook(运维侧入口)
|
||||
│ └── runbook_test.go # runbook 联调探针(-tags runbooktest)
|
||||
├── config/config.go # 配置加载与验证
|
||||
├── version/version.go # 版本信息
|
||||
├── models/models.go # 数据模型与分类关键词
|
||||
├── models/models.go # 数据模型(GORM + AutoMigrate)
|
||||
├── internal/
|
||||
│ ├── bot/telegram.go # Telegram Bot
|
||||
│ ├── qq/qq.go # QQ Bot (WebSocket)
|
||||
│ ├── service/finance.go # 记账核心服务(jieba 分词)
|
||||
│ └── web/server.go # Web 管理后台
|
||||
├── templates/index.html # Web 前端页面
|
||||
│ ├── core/
|
||||
│ │ ├── command/ # 命令解析
|
||||
│ │ ├── ecode/ # 错误码与标签
|
||||
│ │ ├── module/ # 命令模板 / 门控 / 格式化回传
|
||||
│ │ ├── policy/ # feature flag / confirm / dry-run
|
||||
│ │ ├── registry/ # 模块注册
|
||||
│ │ ├── runbook/ # 执行器(ssh/shell/http/assert)
|
||||
│ │ ├── ops/ # OPS 服务编排
|
||||
│ │ └── ai/ # AI 命令加载
|
||||
│ ├── module/ # 业务模块:cf / cpa / cfdav / mail / sub
|
||||
│ ├── bot/ # Telegram Bot
|
||||
│ ├── qq/ # QQ Bot(WebSocket)+ 订阅提醒调度
|
||||
│ ├── feishu/ # 飞书适配(预留)
|
||||
│ ├── service/ # 记账核心(jieba 分词)
|
||||
│ ├── chart/ # 统计图表
|
||||
│ └── web/ # Web 后台(Gin)
|
||||
├── runbooks/ # 自动化 runbook(YAML)
|
||||
├── templates/ # Web 前端页面
|
||||
├── config.yaml.example # 配置示例
|
||||
├── Dockerfile # Docker 镜像
|
||||
├── docker-compose.yml # Docker Compose
|
||||
└── Makefile # 构建脚本
|
||||
├── Dockerfile / docker-compose.yml
|
||||
└── Makefile # 构建 / 版本 / 发布
|
||||
```
|
||||
|
||||
## 🔧 开发与发布
|
||||
|
||||
```bash
|
||||
make build # 编译(自动读取 VERSION)
|
||||
make bump-patch # 版本 +1(patch/minor/major 同理)
|
||||
make set-version VERSION=1.2.3
|
||||
make release-check # 发布前检查(工作区干净 + 版本格式)
|
||||
make package-release # 产出 dist/ 二进制 + sha256
|
||||
make tag-release # 打 tag 并推送
|
||||
make docker && make docker-push
|
||||
```
|
||||
|
||||
Runbook 联调探针(不动线上服务,用数据库副本跑):
|
||||
|
||||
```bash
|
||||
go build -tags runbooktest -o runbook_test ./cmd
|
||||
./runbook_test <db_copy> <base_dir> "/cf dns list <zone_id>"
|
||||
```
|
||||
|
||||
## 📋 技术栈
|
||||
|
||||
- **语言**: Go 1.22
|
||||
- **Web 框架**: Gin
|
||||
- **数据库**: SQLite (GORM)
|
||||
- **分词**: gojieba (结巴分词 Go 版)
|
||||
- **Telegram SDK**: go-telegram-bot-api v5
|
||||
- **QQ SDK**: tencent-connect/botgo v0.2.1 (WebSocket 模式)
|
||||
- **语言**: Go 1.22(CGO:gojieba)
|
||||
- **Web 框架**: Gin · **数据库**: SQLite (GORM)
|
||||
- **分词**: gojieba · **QQ SDK**: tencent-connect/botgo v0.2.1(WebSocket)· **TG SDK**: go-telegram-bot-api v5
|
||||
- **自动化**: 自研 runbook 执行器(YAML 编排 + 严格断言 + 任务审计)
|
||||
|
||||
## 📄 License
|
||||
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user