reminder-bot/README.md

163 lines
6.2 KiB
Markdown
Raw Permalink Normal View History

2025-12-19 11:19:54 +01:00
# Reminder Bot
Telegram бот для создания повторяющихся напоминаний. Создавайте напоминания с любой периодичностью (каждые N дней), получайте уведомления в нужное время и управляйте ими через интерактивный интерфейс.
## Возможности
- ✅ Создание повторяющихся напоминаний с произвольной периодичностью
- 🕐 Настройка времени отправки уведомлений
- 📝 Редактирование текста, времени и периодичности
- ⏸ Пауза и возобновление напоминаний
- 🔁 Отложить напоминание на 1-3 часа или на завтра
- 📊 Статистика выполнения
- 🗑 Удаление напоминаний
## Технологии
- **Python 3.11+**
- **aiogram 3.x** - фреймворк для Telegram ботов
- **SQLAlchemy + aiosqlite** - асинхронная ORM и база данных
- **APScheduler** - планировщик задач
- **Docker + docker-compose** - контейнеризация
## Быстрый старт
### 1. Получите токен бота
Создайте бота через [@BotFather](https://t.me/BotFather) в Telegram и получите токен.
### 2. Настройте окружение
Скопируйте `.env.example` в `.env` и заполните:
```bash
cp .env.example .env
```
Отредактируйте `.env`:
```env
BOT_TOKEN=ваш_токен_от_BotFather
DB_URL=sqlite+aiosqlite:///data/reminder.db
LOG_LEVEL=INFO
TZ=Europe/Moscow
POLLING_SKIP_UPDATES=true
```
### 3. Запуск с Docker (рекомендуется)
```bash
# Сборка и запуск
docker-compose up -d --build
# Просмотр логов
docker-compose logs -f reminder_bot
# Остановка
docker-compose down
```
### 4. Запуск без Docker
```bash
# Создать виртуальное окружение
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# или
.venv\Scripts\activate # Windows
# Установить зависимости
pip install -r requirements.txt
# Создать директорию для БД
mkdir -p data
# Запустить бота
python -m bot.main
```
## Использование
### Основные команды
- `/start` - запуск бота и главное меню
- `/help` - справка по использованию
- `/cancel` - отменить текущее действие
### Создание напоминания
1. Нажмите ** Новое напоминание**
2. Введите текст напоминания
3. Выберите периодичность (или введите свою)
4. Укажите время в формате `ЧЧ:ММ` (например, `09:00`)
5. Подтвердите создание
### Управление напоминаниями
Нажмите **📋 Мои напоминания** для просмотра списка. Для каждого напоминания доступно:
- **✏️ Изменить** - редактирование текста, времени или периодичности
- **⏸ Пауза / ▶️ Возобновить** - приостановка и возобновление
- **🗑 Удалить** - удаление напоминания
### Действия при получении напоминания
- **✅ Выполнено** - отметить как выполненное (следующее через N дней)
- **🔁 Напомнить позже** - отложить на 1 час, 3 часа или завтра
- **⏸ Пауза** - приостановить напоминание
- **🗑 Удалить** - удалить напоминание
## Архитектура проекта
```
bot/
├── __init__.py
├── main.py # Точка входа
├── config.py # Конфигурация
├── logging_config.py # Настройка логирования
├── core/ # Инфраструктура
│ ├── bot.py # Инициализация бота
│ ├── scheduler.py # Планировщик напоминаний
│ └── middlewares.py # Middleware
├── db/ # База данных
│ ├── base.py # Engine и сессии
│ ├── models.py # ORM модели
│ └── operations.py # CRUD операции
├── handlers/ # Обработчики
│ ├── common.py # /start, /help, /cancel
│ ├── reminders_create.py # Создание напоминаний
│ ├── reminders_manage.py # Управление
│ ├── callbacks.py # Inline-кнопки
│ └── errors.py # Обработка ошибок
├── keyboards/ # Клавиатуры
│ ├── main_menu.py # Главное меню
│ ├── reminders.py # Кнопки напоминаний
│ └── pagination.py # Пагинация
├── services/ # Бизнес-логика
│ ├── reminders_service.py
│ ├── user_service.py
│ └── time_service.py
├── states/ # FSM состояния
│ └── reminder_states.py
└── utils/ # Утилиты
├── formatting.py
└── validators.py
```
## Разработка
Проект следует принципам:
- **Layered Architecture** - разделение на слои (handlers, services, db)
- **SOLID** - бизнес-логика в сервисах, handlers только валидируют и делегируют
- **Type Hints** - аннотации типов для всех публичных функций
- **PEP 8** - стиль кода Python
## Лицензия
MIT
## Поддержка
Если возникли проблемы или есть предложения, создайте issue в репозитории.