Compare commits
35 Commits
c80914f257
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2338c375b9 | ||
|
|
205de16479 | ||
|
|
0904acad4e | ||
|
|
c7ebb00145 | ||
|
|
214dadad45 | ||
|
|
23feb6ba1b | ||
|
|
895ffbcb32 | ||
|
|
14c3a30806 | ||
|
|
ebfc342736 | ||
|
|
1d0fe1cdf3 | ||
|
|
fb8a5521a9 | ||
|
|
2670ca96c7 | ||
|
|
3711dd362b | ||
|
|
81840dfa31 | ||
|
|
31b1235d20 | ||
|
|
54d46d7e6b | ||
|
|
ee1a5b59b0 | ||
|
|
f064f751f0 | ||
|
|
5eebf4bf66 | ||
|
|
210af75e2c | ||
|
|
d212d73c2a | ||
|
|
052966e07c | ||
|
|
095e88cad3 | ||
|
|
276bb5fc83 | ||
|
|
decb9c12c1 | ||
|
|
ec06c5fac3 | ||
|
|
ced65fc4da | ||
|
|
36b136289c | ||
|
|
98a863f567 | ||
|
|
15f9ceb841 | ||
|
|
8601e78e17 | ||
|
|
530d81b565 | ||
|
|
8354e38e89 | ||
|
|
97bcee7258 | ||
|
|
db8257fdde |
@@ -1,2 +1,5 @@
|
||||
TELEGRAM_TOKEN=""
|
||||
EXCHANGE_API_KEY=""
|
||||
UPDATE_OWNER_ID=""
|
||||
AUTO_UPDATE_REMOTE="https://git.llc/zimk/SubMind.git"
|
||||
AUTO_UPDATE_BRANCH="main"
|
||||
|
||||
148
README.md
148
README.md
@@ -1 +1,147 @@
|
||||
power by gemini
|
||||
# SubMind
|
||||
|
||||
一个基于 Telegram 的订阅管理机器人,帮助你记录订阅、设置提醒、查看支出统计并导入/导出数据。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- ➕ 添加订阅(名称、费用、货币、分类、到期日、周期、续费方式、备注)
|
||||
- 📋 列出订阅并查看详情
|
||||
- 🗂️ 按分类浏览订阅
|
||||
- ✏️ 编辑订阅信息
|
||||
- 🗑️ 删除订阅
|
||||
- 🔔 提醒设置(到期日提醒、提前 N 天提醒、手动续费一键确认)
|
||||
- 📊 统计图(按分类汇总月均支出)
|
||||
- 📥 CSV 导入
|
||||
- 📤 CSV 导出
|
||||
- 💱 多货币换算(支持缓存汇率)
|
||||
|
||||
## 技术栈
|
||||
|
||||
- Python 3.10+
|
||||
- [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot)
|
||||
- SQLite
|
||||
- pandas + matplotlib
|
||||
- dateparser
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1) 克隆项目
|
||||
|
||||
```bash
|
||||
git clone https://github.com/zkysimon/SubMind.git
|
||||
cd SubMind
|
||||
```
|
||||
|
||||
### 2) 安装依赖
|
||||
|
||||
建议使用虚拟环境:
|
||||
|
||||
```bash
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||
pip install -U pip
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3) 配置环境变量
|
||||
|
||||
复制并填写 `.env`:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
`.env` 示例:
|
||||
|
||||
```env
|
||||
TELEGRAM_TOKEN="<YOUR_TELEGRAM_BOT_TOKEN>"
|
||||
EXCHANGE_API_KEY="<YOUR_EXCHANGE_API_KEY>"
|
||||
UPDATE_OWNER_ID="<YOUR_TELEGRAM_USER_ID>"
|
||||
AUTO_UPDATE_REMOTE="https://git.llc/zimk/SubMind.git"
|
||||
AUTO_UPDATE_BRANCH="main"
|
||||
```
|
||||
|
||||
说明:
|
||||
- `TELEGRAM_TOKEN` 必填。
|
||||
- `EXCHANGE_API_KEY` 可选(不填时不做在线汇率转换)。
|
||||
- `UPDATE_OWNER_ID` 可选(建议配置为你的 Telegram 用户 ID,仅该用户可执行 `/update`)。
|
||||
- `AUTO_UPDATE_REMOTE` 可选(默认 `https://git.llc/zimk/SubMind.git`)。
|
||||
- `AUTO_UPDATE_BRANCH` 可选(默认 `main`)。
|
||||
|
||||
### 4) 运行
|
||||
|
||||
```bash
|
||||
python SubMind.py
|
||||
```
|
||||
|
||||
首次启动会自动初始化数据库(默认 `submind.db`)。
|
||||
|
||||
## Bot 命令
|
||||
|
||||
- `/start` 开始使用
|
||||
- `/add_sub` 添加订阅
|
||||
- `/list_subs` 查看所有订阅
|
||||
- `/list_categories` 按分类查看
|
||||
- `/stats` 查看统计图
|
||||
- `/import` 导入 CSV
|
||||
- `/export` 导出 CSV
|
||||
- `/set_currency <CODE>` 设置主货币(例如 `USD`、`CNY`)
|
||||
- `/update` 拉取最新代码、安装依赖并自动重启(仅 `UPDATE_OWNER_ID` 指定用户可用)
|
||||
- `/help` 帮助
|
||||
- `/cancel` 取消当前流程
|
||||
|
||||
## CSV 导入格式
|
||||
|
||||
导入文件需包含以下列:
|
||||
|
||||
- `name`
|
||||
- `cost`
|
||||
- `currency`
|
||||
- `category`
|
||||
- `next_due`
|
||||
- `frequency_unit`(`day` / `week` / `month` / `year`)
|
||||
- `frequency_value`(正整数)
|
||||
- `renewal_type`(`auto` / `manual`)
|
||||
- `notes`(可选)
|
||||
|
||||
示例:
|
||||
|
||||
```csv
|
||||
name,cost,currency,category,next_due,frequency_unit,frequency_value,renewal_type,notes
|
||||
Netflix,15.99,USD,影音,2026-03-01,month,1,auto,
|
||||
VPS,60,CNY,开发,2026-03-12,month,1,manual,生产环境
|
||||
```
|
||||
|
||||
## 数据与迁移
|
||||
|
||||
- 使用 SQLite(文件:`submind.db`)。
|
||||
- 启动时自动执行兼容性检查和必要字段补齐。
|
||||
- 建议升级前先备份数据库:
|
||||
|
||||
```bash
|
||||
cp submind.db submind.db.bak
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1) 统计图中文乱码怎么办?
|
||||
程序会尝试下载中文字体到 `fonts/` 目录;若网络不可达,可手动放置字体文件。
|
||||
|
||||
### 2) 为什么汇率没变化?
|
||||
请检查 `EXCHANGE_API_KEY` 是否配置正确。未配置时会使用原货币金额。
|
||||
|
||||
### 3) 旧消息按钮点不动?
|
||||
更新后建议重新执行 `/list_categories` 或 `/list_subs` 刷新最新按钮。
|
||||
|
||||
## 安全说明
|
||||
|
||||
- 项目已对订阅编辑/提醒等关键路径做用户归属校验(`user_id`)。
|
||||
- 数据库操作使用参数化查询,并对可编辑字段做白名单约束。
|
||||
|
||||
## License
|
||||
|
||||
可按你的开源策略补充(例如 MIT)。
|
||||
|
||||
---
|
||||
|
||||
如果这个项目对你有帮助,欢迎 Star ⭐
|
||||
988
SubMind.py
988
SubMind.py
File diff suppressed because it is too large
Load Diff
7
requirements.txt
Normal file
7
requirements.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
python-telegram-bot>=20.0
|
||||
pandas
|
||||
matplotlib
|
||||
python-dateutil
|
||||
dateparser
|
||||
python-dotenv
|
||||
requests
|
||||
Reference in New Issue
Block a user