88 lines
6.0 KiB
Plaintext
88 lines
6.0 KiB
Plaintext
aleesa-phrases-go
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
Отвечалка готовыми словарными фразами.
|
|
* Фортунки (на основе фраз из fortune_mod)
|
|
* Пятница
|
|
* Пословицы и поговорки
|
|
* Карма
|
|
|
|
|
|
Механика работы
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
Сервис подписан на канал phrases. В этот канал пишет другой демоночек - aleesa-misc. Ответ направляется в redis-канал,
|
|
указанный в поле plugin входящего сообщения.
|
|
|
|
Формат протокола - см README от aleesa-misc-go.
|
|
|
|
|
|
Как это собрать?
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
Понадобится golang версии 1.18 или более новая.
|
|
|
|
Сам процесс сборки простой, достаточно запустить:
|
|
make
|
|
|
|
и через некоторое время мы получаем бинарники aleesa-phrases-go и seed-{proverb,fortune,friday}. Это и есть наше
|
|
приложение и вспомогательные утилиты для "засеевания" соответствующих бд данными.
|
|
|
|
|
|
Как это запустить?
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
Приложение тестировалось на alpine linux x86_64 3.12, но должно работать на любом (более свежем) 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 vendor
|
|
|
|
в этом случае каталог vendor будет пересоздан и в него скопируются все нужные для сборки go-шные модули.
|
|
|
|
Обновлять вендоринг обычно требуется только в процессе разработки.
|
|
|
|
|
|
Nota Bene
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
По механике, в процессе работы мы форкаем горутинки на каждое входящее сообщение, особо не контроллируя этот процесс.
|
|
Предполагается, что на эту программу не будет большой нагрузки, даже если будет несколько ботов на входе - ограничения
|
|
телеграма и других мессенджеров не должны дать возможности развить достаточно большой message rate, чтобы об это
|
|
споткнуться.
|
|
|
|
Формально, более удачным было бы иметь автоматический пул воркеров-горутинок и раскидывать им через channel-ы
|
|
сообщения. Внутри каждой горутинки можно было бы повиcнуть в бесконечном цикле на канале входящих сообщений и так и
|
|
работать. Но на практике оно того не стОит.
|
|
|
|
|
|
Nota Bene #2
|
|
-----------------------------------------------------------------------------------------------------------------------
|
|
Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в
|
|
некотором роде проблема. Решается она с помощью утилиты daemonize (https://github.com/bmc/daemonize).
|
|
|
|
Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно
|
|
воспользоваться этой программой.
|
|
|
|
В alpine linux есть средства openrc для супервайзинга foreground-сервисов.
|