Реализация
Бот реализован двумя отдельными компонентами: непосредственно сам бот и отдельный сервис обработки тегов.
Сервис словоформ (service-ifw):
Данный сервис отвечает за выделение начальной формы слова и синонимов к нему. При сохранении ботом новой записи к ней выделяются и сохраняются теги. В случае поиска записи когда не помнишь точного названия, также производится поиск по синонинам.
Взаимодействие с ботом осуществляется посредством REST API (gin-gonic). Данные для скорости работы хранятся во встроенном key-value хранилище (github.com/recoilme/pudge) с размещением индекса в оперативной памяти и самих значений на диске.
При формировании/обновлении базы исходная информация берется из файлов формата txt и xml.
Телеграм-бот:
При получении от пользователя текста, выделяет (через сервис) синонимы и ищет записи с соответствующими тегами. В случае их наличия подгружает фотографию и пояснительный текст.
Отправка фотографии с комментарием осуществляет сохранение заметки. Фотография сохраняются в aws совместимое хранилище объектов (minio). Из комментария выделяются теги (в т.ч. синонимы) и сохраняются в mysql базе.
-
Особенности реализации:
- Логирование средствами glg (github.com/kpango/glg).
- Чтение конфиг файла (github.com/kkyr/fig) в формате YAML.
- Управляемое закрытие критичных горутин по нажатию Ctrl-C (bool канал и sync.WaitGroup).
- При запуске определяется доступность сервиса словоформ.
- Реализован дополнительный механизм контроля (и переподключения при необходимости) наличия соединения с БД.
- Все диалоги определяются отдельным map'ом для централизованной корректировки текстов.