Go to file
itqop f5d8b46e56 first commit 2025-12-19 13:19:54 +03:00
bot first commit 2025-12-19 13:19:54 +03:00
.dockerignore first commit 2025-12-19 13:19:54 +03:00
.env.example first commit 2025-12-19 13:19:54 +03:00
.gitignore first commit 2025-12-19 13:19:54 +03:00
Dockerfile first commit 2025-12-19 13:19:54 +03:00
README.md first commit 2025-12-19 13:19:54 +03:00
docker-compose.yml first commit 2025-12-19 13:19:54 +03:00
requirements.txt first commit 2025-12-19 13:19:54 +03:00

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 - отменить текущее действие

Создание напоминания

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