Обычные боты-напоминалки заставляют пролистывать календари и крутить часы кнопками — на это уходит больше времени, чем на саму задачу. Хотелось, чтобы можно было просто написать боту фразу, как человеку, и он сам понял дату, время и повтор.
За основу взял открытый бот-напоминалку dome272/Telegram-Reminder-Bot (2020 год). Он не запускался с актуальной версией библиотеки Telegram и терял все напоминания при каждом перезапуске.
Переписал бота на Python и aiogram 3 с хранением в SQLite и написал разбор напоминаний на обычном русском языке: «завтра в 15:00 …», «через полтора часа …», «в пятницу в 9:30 …», «15 октября в 18:00 …», «20.10 …», «в 7 вечера …», а также повторы — «каждый день», «по будням», «каждый понедельник», «каждое 1 число». Если фраза непонятна или время невозможное, бот объясняет, как написать правильно.
Добавил кнопки «+10 мин», «+1 час» и «Готово» у сработавшего напоминания, список с удалением, выбор часового пояса — от Калининграда до Камчатки; повторы держат местное время и при переходе на летнее/зимнее время. Напоминания хранятся в базе и переживают перезапуск: если бот был выключен в момент срабатывания, напоминание придёт после запуска с пометкой об опоздании.
Исправил ошибки оригинала: «12 PM» превращалось в полночь следующего дня, бот писал «через 10 минут», хотя срабатывал ровно в срок, часовой пояс считался от часов сервера, у нового пользователя падали команды. 59 автотестов, включая сквозные через диспетчер aiogram с управляемыми часами.
Бот, которому достаточно написать фразу — и он напомнит вовремя, один раз или по расписанию, в часовом поясе пользователя, ничего не теряя при перезапуске сервера. Такой разбор фраз можно встроить в любой бот: записи к мастеру, задачи для сотрудников, напоминания клиентам об оплате.
Проект — открытый форк с сохранением лицензии MIT и указанием автора оригинала; в README подробно расписано, что изменено и почему.