Compare commits

..
3 Commits
3 changed files with 26 additions and 41 deletions
+23 -38
View File
@@ -1,12 +1,11 @@
# 🛠️ Ops-Assistant
多平台 Bot + 自动化运维一体的私人助理服务:**智能记账**、**Runbook 工单执行**、**模块化 OPS 命令**(Cloudflare / CPA / 订阅 / cfdav / 邮箱),带 Web 管理后台。
多平台 Bot + 自动化运维一体的私人助理服务:**Runbook 工单执行**、**模块化 OPS 命令**(Cloudflare / CPA / 订阅 / cfdav / 邮箱),带 Web 管理后台。
> 项目由 Xiaji-Go(记账机器人)演进更名而来;当前 `VERSION` 为 `0.0.1`(框架重构后重新起版,历史记账版本线为 v1.1.x)。
> 当前 `VERSION` 为 `0.0.1`。项目定位为模块化 OPS 助手。
## 🆕 框架版更新要点
- **项目更名**:`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 失败不再假阳性)
@@ -14,18 +13,16 @@
- 任务与步骤全程落库(`ops_jobs` / `ops_job_steps`),Web 后台可查
- **查询类命令结果直接回传**(此前仅回执 job 号)
- **CF 模块增强**:DNS 查询支持**传域名自动解析 zone_id**;`dns list / zones / workers list` 结果可读回传;API `success:false` 时任务真失败并回传错误摘要
- **新增模块**:`cpa`(usage 备份/恢复)、`cfdav`、`mail`、`sub`(订阅管理与到期提醒)
- **新增模块**:`cpa`(usage 备份/恢复)、`cfdav`、`mail`、`sub`(订阅管理与到期提醒)、`rate`(实时多源汇率与卡组织结算价对比)
- **QQ Bot**:AI 命令加载器、每日订阅提醒调度(09:00)
- **Web 后台**:模块设置页(CF / CPA / cfdav / AI)、OPS 任务页、渠道管理、审计页
## ✨ 功能特性
- **多平台接入**:QQ 官方 Bot(WebSocket)、Telegram Bot、飞书(通道层预留)
- **智能记账**:自然语言识别金额与消费分类(jieba 分词,150+ 预设关键词)
- **OPS 命令**:`/cf` `/cpa` `/cfdav` `/sub` `/mail`,写操作带 dry-run / 确认门控
- **OPS 命令**:`/cf` `/cpa` `/cfdav` `/sub` `/mail` `/rate`,写操作带 dry-run / 确认门控
- **Runbook 自动化**:YAML 定义、步骤编排、断言校验、任务审计
- **Web 管理后台**:记录查看 / 删除 / CSV 导出、模块与渠道配置、任务与审计查看
- **金额精确**:分(int64)存储,避免浮点误差
- **Web 管理后台**:模块与渠道配置、任务与审计查看
- **优雅关闭**:SIGTERM/SIGINT 干净退出
## 📦 快速开始
@@ -53,7 +50,7 @@ docker run -d --name ops-assistant -p 9621:9621 \
### 从源码编译
```bash
# 需要 Go 1.22+、GCC(gojieba 依赖 CGO)
# 需要 Go 1.22+
make build
make build-linux
```
@@ -66,7 +63,7 @@ server:
key: "your-secret-key" # 会话密钥
database:
path: "./xiaji.db" # SQLite 数据库路径
path: "./ops.db" # SQLite 数据库路径
admin:
username: "admin" # Web 后台用户名
@@ -84,28 +81,9 @@ qqbot:
> **模块凭据**(CF API Token、CPA 管理令牌、cfdav 账号等)保存在数据库 `app_settings` 表,通过 Web 后台「模块设置」页配置,**不写入配置文件**;渠道 secrets 在数据库内加密存储(`enc:v1:` 前缀)。
## 💬 记账功能
## 🤖 Bot 与 OPS
### QQ Bot 关键词
| 关键词 | 说明 |
|--------|------|
| `帮助` / `菜单` | 显示帮助 |
| `查看` / `记录` / `列表` | 最近 10 条记录 |
| `今日` / `今天` | 今日消费汇总 |
| 直接发消息 | 自动记账(如"午饭 25元") |
### Telegram Bot 命令
`/start` `/help` `/list` `/today`,或直接发消息自动记账。
### 支持格式与分类
```
午饭 25元 / 打车 ¥30 / 买咖啡15块 / 超市买水果38.5
```
预设 150+ 关键词覆盖:🍜 餐饮、🚗 交通、🛒 购物、☕ 饮品、🍎 水果、🍪 零食、🏠 住房、📱 通讯、💊 医疗、🎮 娱乐、📚 教育、🚬 烟酒。
Bot 主要用于接收 OPS 命令并返回执行结果。支持 QQ Bot、Telegram Bot;具体渠道开关与凭据在 Web 管理后台配置。
## 🧰 OPS 命令参考
@@ -133,6 +111,17 @@ qqbot:
| `/cpa usage backup` | 实时导出 usage 并打包备份(含 sha256/meta) |
| `/cpa usage restore <备份包>` | 恢复 usage(import 接口优先,不停服) |
### 实时汇率(`/rate`)
支持对比 Google 实时市场参考汇率与 Visa / Mastercard 官方卡组织结算汇率,并自动计算卡组织溢价与结算区间。
| 命令 | 说明 |
|------|------|
| `/rate` 或 `/rate help` | 查看汇率转换用法与示例 |
| `/rate <金额> <源币种> to <目标币种>` | 标准汇率转换(如 `/rate 138 sgd to cny`、`/rate 100 usd to cny`) |
| `/rate <金额><源币种> -> <目标币种>` | 箭头简写语法(如 `/rate 50 eur -> sgd`) |
| `/rate <金额><源币种>/<目标币种>` | 斜杠紧凑语法(如 `/rate 1000 php/cny`、`/rate 138sgd to cny`) |
### 其他模块
| 命令 | 说明 |
@@ -147,7 +136,6 @@ qqbot:
| `/sub del <id>` | 删除订阅 |
| `/sub cancel` | 取消进行中的新增流程 |
| `/ops modules` | 查看模块启用状态 |
| `/rate 138sgd to cny` | 实时货币转换(Google / Visa / Mastercard) |
## 📜 Runbook(自动化工单)
@@ -164,7 +152,6 @@ qqbot:
访问 `http://localhost:9621`:
- 📊 记账统计 / 最近记录 / 分类筛选 / CSV 导出
- 🧩 模块设置:CF / CPA / cfdav / AI
- 🔌 渠道管理:QQ / Telegram / 飞书 配置与连接测试
- 🧾 OPS 任务与目标主机管理
@@ -190,12 +177,10 @@ ops-assistant/
│ │ ├── runbook/ # 执行器(ssh/shell/http/assert)
│ │ ├── ops/ # OPS 服务编排
│ │ └── ai/ # AI 命令加载
│ ├── module/ # 业务模块:cf / cpa / cfdav / mail / sub
│ ├── module/ # 业务模块:cf / cpa / cfdav / mail / sub / rate
│ ├── bot/ # Telegram Bot
│ ├── qq/ # QQ Bot(WebSocket)+ 订阅提醒调度
│ ├── feishu/ # 飞书适配(预留)
│ ├── service/ # 记账核心(jieba 分词)
│ ├── chart/ # 统计图表
│ └── web/ # Web 后台(Gin)
├── runbooks/ # 自动化 runbook(YAML)
├── templates/ # Web 前端页面
@@ -225,9 +210,9 @@ go build -tags runbooktest -o runbook_test ./cmd
## 📋 技术栈
- **语言**: Go 1.22(CGO:gojieba)
- **语言**: Go 1.22
- **Web 框架**: Gin · **数据库**: SQLite (GORM)
- **分词**: gojieba · **QQ SDK**: tencent-connect/botgo v0.2.1(WebSocket)· **TG SDK**: go-telegram-bot-api v5
**QQ SDK**: tencent-connect/botgo v0.2.1(WebSocket)· **TG SDK**: go-telegram-bot-api v5
- **自动化**: 自研 runbook 执行器(YAML 编排 + 严格断言 + 任务审计)
## 📄 License
+2 -2
View File
@@ -65,8 +65,8 @@ func (s *Service) helpText() string {
"- /mail (邮箱状态)",
"- /cfdav (CFDAV 用户管理)",
"- /sub (订阅管理)",
"- /rate 138sgd to cny (实时汇率转换)",
"提示:发送 /cpa /cf /mail /cfdav /sub 获取各模块完整指令清单。",
"- /rate (实时汇率转换)",
"提示:发送 /cpa /cf /mail /cfdav /sub /rate 获取各模块完整指令清单。",
}
return strings.Join(lines, "\n")
}
+1 -1
View File
@@ -37,5 +37,5 @@ func (m *Module) Handle(_ int64, cmd *command.ParsedCommand) (string, error) {
}
func help() string {
return "💱 汇率转换\n\n用法:/rate 138sgd to cny\n\n也支持:\n/rate 100 usd to cny\n/rate 50 eur -> sgd\n/rate 1000 php/cny\n\n数据源:Google Finance、Visa、Mastercard。Visa/万事达为官方结算汇率;Google 为市场参考价。"
return "💱 汇率转换\n\n用法:/rate 138 sgd to cny\n\n也支持:\n/rate 138sgd to cny\n/rate 100 usd to cny\n/rate 50 eur -> sgd\n/rate 1000 php/cny\n\n数据源:Google Finance、Visa、Mastercard。Visa/万事达为官方结算汇率;Google 为市场参考价。"
}