Python-разработчик: скрипты, боты, парсеры, автоматизация

Андрей Смедиков sandorsmedikov

Рейтинг: 30
не верифицирован
Всего отзывов: 0
  • Работ в портфолио: 1
  • Типовых услуг: 2
  • Работ на продажу: 0
  • Возраст: 30 лет
  • Стаж работы: 1 год
  • Зарегистрирован: 12.05.2026
  • Образование: Бакалавриат
  • Юридический статус:Самозанятый
Был на сайте:

Telegram-бот @EAReminderBot - напоминания на естественном русском языке (aiogram 3, SQLite)

Используемые навыки:

Описание

Проект: бот-напоминалка для Telegram на Python.

Цели проекта:
1. Личный инструмент. Хотел ставить напоминания фразами вроде «через 30 минут позвонить другу» или «завтра в 19:00 проверить почту», не тыкая клавиатуру выбора даты.

2. Живой портфолио-кейс. Открытый, развёрнутый в проде, с публичным репозиторием. Любой потенциальный клиент может зайти, попробовать и оценить качество без риска и предоплаты.

3. Полигон для отработки полного цикла разработки: проектирование, FSM-диалоги, парсинг текста на русском, БД, фоновые задачи, логирование и деплой.

Требования к результату:
- Принимать минимум 5 форматов времени на естественном русском («сегодня в 23», «через 2 часа», «11.05 19:00», «в пятницу в 18:00», «через 30 минут»).
- Корректно работать с часовым поясом Москвы.
- Хранить напоминания между перезапусками, не терять их.
- Доставлять сообщение точно в момент срабатывания.
- Простой UX без громоздких клавиатур: только пошаговый диалог /add → время → текст.

Решение

Стек и архитектура:
- Python 3.11, aiogram 3 (асинхронный фреймворк для Telegram Bot API).
- SQLite через стандартный sqlite3 (без ORM — для задачи такого объёма это избыточно).
- FSM (Finite State Machine) на встроенной MemoryStorage aiogram для пошагового диалога /add.
- Фоновый scheduler - отдельный asyncio-таск, опрашивает БД раз в 15 секунд и отправляет созревшие напоминания.

Реализованные модули:

1. Парсер времени на русском - самая нетривиальная часть. Понимает:
- относительное время: «через 30 минут», «через 2 часа»
- относительные дни: «сегодня в 23:30», «завтра в 19:00»
- дни недели: «в пятницу в 18:00», «в понедельник в 9»
- абсолютные даты: «11.05 19:00», «12.05.2026 09:30»
- короткий формат часа: «в 10», «сегодня в 23» - без минут
Все часы интерпретируются по Москве (UTC+3).

2. Слой БД (SQLite). Таблица reminders с полями user_id, chat_id, text, fire_at (хранится в UTC), is_sent. Конвертация в МСК - только на границе UI. Все CRUD-операции покрыты smoke-тестами.

3. Команды: /start, /help, /add (диалог), /list, /delete N, /about, /cancel.

4. Scheduler с обработкой ошибок: если пользователь заблокировал бота или удалил чат, напоминание помечается как отправленное, и цикл продолжается без падения.

5. Логирование с ротацией: RotatingFileHandler 1 МБ × 3 backup. Чтобы файл лога не разрастался при долгой работе в проде.

6. HTML parse_mode по умолчанию через DefaultBotProperties - чистый код без повторения parse_mode="HTML" в каждом вызове send_message.

7. Конфигурация через .env (python-dotenv): BOT_TOKEN и опциональные переменные для /about (ссылки на профиль, GitHub, канал, контакты).

Результат

Бот живой и доступен по адресу https://t.me/EAReminderBot. Любой пользователь может прямо сейчас написать «напомни через 5 минут что-то проверить» - и убедиться, что всё работает.

Технические характеристики:
- Парсит 5+ форматов времени на русском.
- Среднее время отклика на команду - меньше 500 мс.
- Точность срабатывания напоминания - в пределах 15 секунд от назначенного времени.

Ссылки на примеры реализации

 t.me/EAReminderBot

Презентация проекта

01-start.png
02-add-dialog.png
03-reminder-fired.png
04-list.png

Оценили проект:

0