SubMind

一个基于 Telegram 的订阅管理机器人,帮助你记录订阅、设置提醒、查看支出统计并导入/导出数据。

功能特性

  • 添加订阅(名称、费用、货币、分类、到期日、周期、续费方式、备注)
  • 📋 列出订阅并查看详情
  • 🗂️ 按分类浏览订阅
  • ✏️ 编辑订阅信息
  • 🗑️ 删除订阅
  • 🔔 提醒设置(到期日提醒、提前 N 天提醒、手动续费一键确认)
  • 📊 统计图(按分类汇总月均支出)
  • 📥 CSV 导入
  • 📤 CSV 导出
  • 💱 多货币换算(支持缓存汇率)

技术栈

快速开始

1) 克隆项目

git clone https://github.com/zkysimon/SubMind.git
cd SubMind

2) 安装依赖

建议使用虚拟环境:

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -U pip
pip install -r requirements.txt

3) 配置环境变量

复制并填写 .env

cp .env.example .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) 运行

python SubMind.py

首次启动会自动初始化数据库(默认 submind.db)。

Bot 命令

  • /start 开始使用
  • /add_sub 添加订阅
  • /list_subs 查看所有订阅
  • /list_categories 按分类查看
  • /stats 查看统计图
  • /import 导入 CSV
  • /export 导出 CSV
  • /set_currency <CODE> 设置主货币(例如 USDCNY
  • /update 拉取最新代码、安装依赖并自动重启(仅 UPDATE_OWNER_ID 指定用户可用)
  • /help 帮助
  • /cancel 取消当前流程

CSV 导入格式

导入文件需包含以下列:

  • name
  • cost
  • currency
  • category
  • next_due
  • frequency_unitday / week / month / year
  • frequency_value(正整数)
  • renewal_typeauto / manual
  • notes(可选)

示例:

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)。
  • 启动时自动执行兼容性检查和必要字段补齐。
  • 建议升级前先备份数据库:
cp submind.db submind.db.bak

常见问题

1) 统计图中文乱码怎么办?

程序会尝试下载中文字体到 fonts/ 目录;若网络不可达,可手动放置字体文件。

2) 为什么汇率没变化?

请检查 EXCHANGE_API_KEY 是否配置正确。未配置时会使用原货币金额。

3) 旧消息按钮点不动?

更新后建议重新执行 /list_categories/list_subs 刷新最新按钮。

安全说明

  • 项目已对订阅编辑/提醒等关键路径做用户归属校验(user_id)。
  • 数据库操作使用参数化查询,并对可编辑字段做白名单约束。

License

可按你的开源策略补充(例如 MIT


如果这个项目对你有帮助,欢迎 Star

Description
订阅管理telegram bot
Readme 668 KiB
Languages
Python 100%