ReminderBot/README.md

121 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Telegram 提醒机器人
一个功能完善的 Telegram 提醒机器人,支持多用户、多种提醒类型和中国节假日规避。
## 功能特性
- **多种提醒类型**:一次性 / 每日 / 每周 / 间隔重复
- **时间窗口控制**:间隔提醒支持设置活跃时间段(如 09:0022:00
- **中国节假日规避**:可选跳过节假日
- **交互式操作**:内联按钮支持完成、延期、暂停、删除
- **多用户隔离**:每位用户独立管理自己的提醒
- **Docker 部署**:容器化部署,数据持久化
## 快速开始
### 1. 获取 Bot Token
向 [@BotFather](https://t.me/BotFather) 发送 `/newbot` 命令获取 Token。
### 2. 配置环境变量
```bash
cp .env.example .env
# 编辑 .env填写 BOT_TOKEN
```
### 3. 启动
**Docker 方式**
```bash
docker-compose up -d
```
## 使用说明
### 命令
| 命令 | 说明 |
|------|------|
| `/start` | 显示欢迎信息和主菜单 |
| `/new` | 新建提醒 |
| `/list` | 查看我的提醒 |
| `/help` | 帮助信息 |
### 创建提醒
1. 发送 `/new` 或点击 ** 新建提醒**
2. 选择提醒类型
3. 输入标题(必填)和描述(可选)
4. 根据类型输入时间参数
5. 选择是否跳过节假日
6. 确认创建
### 提醒类型
| 类型 | 说明 | 时间格式示例 |
|------|------|-------------|
| 一次性 | 在指定日期时间提醒一次 | `2026-06-01 09:00` |
| 每日 | 每天固定时间提醒 | `09:00` |
| 每周 | 每周指定星期几提醒1=周一7=周日)| `1,3,5` 然后 `09:00` |
| 间隔 | 在时间窗口内每 N 分钟提醒一次 | 间隔 `30`,窗口 `09:00-22:00` |
### 提醒操作
收到提醒消息后,可点击以下按钮:
-**完成**:标记为完成,停止后续提醒
-**延期10分钟**10分钟后再次提醒
-**暂停**:暂停提醒(可在列表中恢复)
- 🗑 **删除**:永久删除提醒
## 项目结构
```
reminderBot/
├── bot/
│ ├── main.py # 应用入口
│ ├── config.py # 配置管理
│ ├── states.py # 会话状态常量
│ ├── handlers/ # 命令处理器
│ │ ├── start.py # /start 欢迎
│ │ ├── reminder.py # 创建提醒向导
│ │ ├── list.py # 提醒列表
│ │ └── callback.py # 内联按钮回调
│ ├── models/ # 数据模型
│ │ ├── database.py # 数据库连接
│ │ ├── user.py # 用户模型
│ │ └── reminder.py # 提醒模型
│ ├── scheduler/ # 调度器
│ │ ├── job_manager.py # 任务管理
│ │ └── executor.py # 执行器
│ └── utils/ # 工具函数
│ ├── holiday.py # 节假日判断
│ └── keyboards.py # 键盘布局
├── data/ # SQLite 数据库(持久化卷)
├── logs/ # 日志(持久化卷)
├── .env.example
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
```
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `BOT_TOKEN` | Telegram Bot Token | 必填 |
| `DATABASE_URL` | SQLite 数据库路径 | `sqlite:////app/data/reminders.db` |
| `LOG_LEVEL` | 日志级别 | `INFO` |
| `DEFAULT_TIMEZONE` | 默认时区 | `Asia/Shanghai` |
## 技术栈
- **Python 3.11**
- **python-telegram-bot 20.7** — Bot 框架
- **APScheduler 3.10** — 任务调度
- **SQLAlchemy 2.0** — ORM
- **chinese-calendar** — 中国节假日判断
- **Docker** — 容器化部署