|
|
||
|---|---|---|
| bot | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| Dockerfile | ||
| README.md | ||
| docker-compose.yml | ||
| requirements.txt | ||
README.md
Reminder Bot
Telegram бот для создания повторяющихся напоминаний. Создавайте напоминания с любой периодичностью (каждые N дней), получайте уведомления в нужное время и управляйте ими через интерактивный интерфейс.
Возможности
- ✅ Создание повторяющихся напоминаний с произвольной периодичностью
- 🕐 Настройка времени отправки уведомлений
- 📝 Редактирование текста, времени и периодичности
- ⏸ Пауза и возобновление напоминаний
- 🔁 Отложить напоминание на 1-3 часа или на завтра
- 📊 Статистика выполнения
- 🗑 Удаление напоминаний
Технологии
- Python 3.11+
- aiogram 3.x - фреймворк для Telegram ботов
- SQLAlchemy + aiosqlite - асинхронная ORM и база данных
- APScheduler - планировщик задач
- Docker + docker-compose - контейнеризация
Быстрый старт
1. Получите токен бота
Создайте бота через @BotFather в Telegram и получите токен.
2. Настройте окружение
Скопируйте .env.example в .env и заполните:
cp .env.example .env
Отредактируйте .env:
BOT_TOKEN=ваш_токен_от_BotFather
DB_URL=sqlite+aiosqlite:///data/reminder.db
LOG_LEVEL=INFO
TZ=Europe/Moscow
POLLING_SKIP_UPDATES=true
3. Запуск с Docker (рекомендуется)
# Сборка и запуск
docker-compose up -d --build
# Просмотр логов
docker-compose logs -f reminder_bot
# Остановка
docker-compose down
4. Запуск без Docker
# Создать виртуальное окружение
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- отменить текущее действие
Создание напоминания
- Нажмите ➕ Новое напоминание
- Введите текст напоминания
- Выберите периодичность (или введите свою)
- Укажите время в формате
ЧЧ:ММ(например,09:00) - Подтвердите создание
Управление напоминаниями
Нажмите 📋 Мои напоминания для просмотра списка. Для каждого напоминания доступно:
- ✏️ Изменить - редактирование текста, времени или периодичности
- ⏸ Пауза / ▶️ Возобновить - приостановка и возобновление
- 🗑 Удалить - удаление напоминания
Действия при получении напоминания
- ✅ Выполнено - отметить как выполненное (следующее через 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 в репозитории.