reminder-bot/README.md

163 lines
6.2 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.

# 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 в репозитории.