# aleesa-misc-go Основной роутер команд для aleesa-bot. Все протокольные плагины шлют команды сюда, а отсюда команды разлетаются в модули-исполнители и ответ от исполнителей идёт обратно заказчику. Работает по протоколу Redis pubsub. ## Механика работы Роутер подписан на канал misc (тот, который указан в поле channel конфига). Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола. Входящие сообщения они получают только через этот канал. Модули, реализующие иную функциональность также подписаны каждый на свой канал. Роутер распознаёт команду и направляет её в канал соответствующего бэкэнд-сервиса, который уже дальше работает в соответствии со своей бизнес-логикой. ## Как это собрать? Понадобится компилятор go версии 1.25.1 или более новый. Сам процесс сборки простой, достаточно запустить make или gmake, в зависимости от платформы: ```bash make ``` и через некоторое время мы получаем бинарник **aleesa-misc-go**. Это и есть наше приложение. ## Как это запустить? Приложение тестировалось на Alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е. После создания **data/config.json** из **data/config_sample.json**, можно запускать приложение. Предполагается, что конфиг написан в формате [human json](https://hjson.github.io), который допускает коментарии и некоторые другие вольности в форматировании json-а. Конфиг ищется последовательно по следующим путям по принципу "кто первый того и тапки": ``` ~/.aleesa-misc-go.json ~/aleesa-misc-go.json /etc/aleesa-misc-go.json data/config.json ``` В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить в **/etc/init.d/aleesa-misc-go**. После чего скопировать бинарник в каталог **/var/lib/aleesa-misc-go**, положить конфиг в одну из дефолтных локаций (тестировалась **/var/lib/aleesa-misc-go/data/config.json**) и после этого сервис запускается командой: ```bash service aleesa-misc-go start ``` В автозагрузку его можно прописать через команду: ```bash rc-update add aleesa-misc-go default ``` ## Nota Bene #1 Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в некотором роде проблема. Решается она с помощью утилиты [daemonize](https://github.com/bmc/daemonize). Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой. В alpine linux есть средства openrc для супервайзинга foreground-сервисов. Технически, можно было бы решить эту проблему fork()-а с помощью "github.com/sevlyar/go-daemon", но на текущий момент она не стоит остро, поэтому решения не требуется.