aleesa-phrases-go ----------------------------------------------------------------------------------------------------------------------- Отвечалка готовыми словарными фразами. * Фортунки (на основе фраз из fortune_mod) * Пятница * Пословицы и поговорки * Карма Механика работы ----------------------------------------------------------------------------------------------------------------------- Сервис подписан на канал phrases. В этот канал пишет другой демоночек - aleesa-misc-go. Ответ направляется в redis-канал, указанный в поле plugin входящего сообщения. Формат протокола - см README от aleesa-misc-go. Как это собрать? ----------------------------------------------------------------------------------------------------------------------- Понадобится golang версии 1.19 или более новая. Сам процесс сборки простой, достаточно запустить: make и через некоторое время мы получаем бинарники aleesa-phrases-go и seed-{proverb,fortune,friday}. Это и есть наше приложение и вспомогательные утилиты для "засеевания" соответствующих бд данными. Как это запустить? ----------------------------------------------------------------------------------------------------------------------- Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е. Предполагается, что конфиг написан в формате human json (https://hjson.github.io), который допускает комментарии и некоторые другие вольности в форматировании json-а. Конфиг ищется последовательно по следующим путям по принципу "кто первый того и тапки": ~/.aleesa-phrases-go.json ~/aleesa-phrases-go.json /etc/aleesa-phrases-go.json data/config.json После создания конфига из data/config_sample.json, можно наполнять базки ответов данными из исходных текстов ответов. Для этого последовательно запускаем: seed-friday seed-fortune seed-proverb В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить в /etc/init.d/aleesa-phrases-go. После чего скопировать бинарник в каталог /var/lib/aleesa-misc-go, положить конфиг в одну из дефолтных локаций (тестировалась /var/lib/aleesa-phrases-go/data/config.json) и после этого сервис запускается командой: service aleesa-phrases-go start В автозагрузку его можно прописать через команду: rc-update add aleesa-phrases-go default Вендоринг зависимостей ----------------------------------------------------------------------------------------------------------------------- Для обновления завендоренных зависимостей надо запустить: make upgrade в этом случае каталог vendor будет пересоздан и в него скопируются все нужные для сборки go-шные модули. Обновлять вендоринг обычно требуется только в процессе разработки. Nota Bene ----------------------------------------------------------------------------------------------------------------------- По механике, в процессе работы мы форкаем горутинки на каждое входящее сообщение, особо не контроллируя этот процесс. Предполагается, что на эту программу не будет большой нагрузки, даже если будет несколько ботов на входе - ограничения телеграма и других мессенджеров не должны дать возможности развить достаточно большой message rate, чтобы об это споткнуться. Формально, более удачным было бы иметь автоматический пул воркеров-горутинок и раскидывать им через channel-ы сообщения. Внутри каждой горутинки можно было бы повиcнуть в бесконечном цикле на канале входящих сообщений и так и работать. Но на практике оно того не стОит. Nota Bene #2 ----------------------------------------------------------------------------------------------------------------------- Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в некотором роде проблема. Решается она с помощью утилиты daemonize (https://github.com/bmc/daemonize). Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой. В alpine linux есть средства openrc для супервайзинга foreground-сервисов.