Андрей Хожемпо

Дни рождения в Календарь (@card_cal_bot)

Телеграм-бот. На основании дней рождений контактов в адресной книге на Яндекс.Почта создает подключаемый в качестве внешнего (публичного) календарь с напоминаниями.

Реализация

При регистрации пользователь указывает логин и пароль для доступа к своей адресной книге на Яндекс.Почта. Взамен получает ссылку и реквизиты доступа к Cal сервису, который можно поключить в качестве дополнителя календаря в Яндекс.Календарь. Календарь содержит ФИО, дату рождения и отметку о напоминании приближающейся даты.

Доступ к CardCal сервису Яндекс осуществляется посредством webdav (github.com/studio-b12/gowebdav). Информация о контактаъ (ФИО, ДР и uid) хранятся в БД mysql. Вебсервис (CalDav) релизован через gin-gonic (github.com/gin-gonic/gin) с отдачей формируемого на лету iCal календаря (github.com/emersion/go-ical).

Обновление базы дней рождений происходит периодически по таймеру.

    Особенности реализации:
  • Логирование средствами glg (github.com/kpango/glg).
  • Чтение конфиг файла (github.com/kkyr/fig) в формате YAML.
  • Управляемое закрытие критичных горутин по нажатию Ctrl-C (bool канал и sync.WaitGroup).
  • Хранение текстов диалогов бота централизовано.
  • Реализован дополнительный механизм контроля (и переподключения при необходимости) наличия соединения с БД.
  • В случаей критических ошибок администратору отправляется соответствующее сообщение в телеграм.

Стэк

GO
MySQL
WebDav (Card/CalDav)