Уведомление о событиях в календаре в Telegram Bot
31.10.2020
Привет, друзья. У меня есть много календарей — это и личные, и рабочие календари. Про события в некоторых из них я бы хотел получать нотификации прямо в Телеграм. Собственно, я решил сделать бота, который это будет делать.
Если вам интересно посмотреть только конечный результат, то вот же он:
Немного про техническую часть. Календари могут быть представлены в разных форматах. Однако чаще всего, календари экспортируются из разных систем (например, яндекс.календарь) в виде ссылки на ics файл. Соответственно, реализацию бота можно разбить на следующие этапы:
- Пользователь добавляет в бота ссылка на ics файлы, про которые юзер хочет получать уведомления. Тут же нужно указать за сколько минут до события бот должен присылать нотификацию.
- Бот должен переодически переиндексировать все календари. Это необходимо, чтобы получать новые события, а также менять информацию о тех евентах, которые изменились (например, поменялось время)
- Бот должен переодически просыпаться и брать те евенты, по которым пришло время для уведомления. В общем, типичная очередь отложенных задач, ничего особенного.
По стеку технологий. Решил воспользоваться всем новым и молодежным, чтобы потрогать новые технологии. Это:
- Kotlin — как язык
- Micronaut — как базовый фреймворк (я из него использую DI, Http client и сборку докер образа)
- GraalVM (Substrate VM) — как рантайм. То есть, я AOT компилирую бота в бинарник, который уже никак не зависит от JVM.
Комментарии по выбронному стеку.
- Котлин — норм, но и Java 15 — тоже норм, и не факт, что есть смысл в Котлине на бэке.
- Micronaut — супер впечатления. Читать исходники очень приятно, так как код более прямолинейный, чем в Спринге. (создателям пришлось так писать код, чтобы была поддержка Graalvm native image
- Нативные образы Грааля — очень сыро. Все проблемы, которые возникли в ходе реализации бота, были только с этим. По двум из проблем (а их было больше) завёл баги — https://github.com/oracle/graal/issues/2942 и https://github.com/micronaut-projects/micronaut-gcp/issues/287
- Из примечательного — бот может работать с лимитом в 100 MB на контейнер. Конечно, стандартной джаве это вряд ли удастся.
В общем, я отлично провёл время, посмотрев на то, как люди живут. Иногда полезно выходить из своего комфортного мирка джавы и спринга, где всё предсказуемо работает, и смотреть по сторанам (это, к слову, приминимо ко всему — технологиям, работам, и даже отношениям).
Категории: Программирование