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

Потеряшка (@not_lost_bot)

Телеграм-бот для учета и поиска вещей по названию. Отправляем фото с подписью для запоминания или вводим наименование для поиска.

catdoor

Реализация

Бот реализован двумя отдельными компонентами: непосредственно сам бот и отдельный сервис обработки тегов.

Сервис словоформ (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'ом для централизованной корректировки текстов.
    Дополнительно использовалось:
  • Словарь OpenCorpora
  • Словарь русских синонимов SynMaster

Стэк

GO
REST
Minio (AWS)
MySQL