- Change Fwdcnt type from int64 to *int64 in rMsg struct - Use pointer to properly distinguish between 'not provided' (nil) and explicit 0 - Update all Fwdcnt usages to dereference pointer
aleesa-misc-go
Основной роутер команд для aleesa-bot. Все протокольные плагины шлют команды сюда, а отсюда команды разлетаются в модули-исполнители и ответ от исполнителей идёт обратно заказчику.
Работает по протоколу Redis pubsub.
Механика работы
Роутер подписан на канал misc (тот, который указан в поле channel конфига).
Модули, реализующие "клиентские протоколы" - telegram, irc, jabber и проч, подписаны на канал своего протокола. Входящие сообщения они получают только через этот канал.
Модули, реализующие иную функциональность также подписаны каждый на свой канал. Роутер распознаёт команду и направляет её в канал соответствующего бэкэнд-сервиса, который уже дальше работает в соответствии со своей бизнес-логикой.
Как это собрать?
Понадобится компилятор go версии 1.25.1 или более новый.
Сам процесс сборки простой, достаточно запустить make или gmake, в зависимости от платформы:
make
и через некоторое время мы получаем бинарник aleesa-misc-go. Это и есть наше приложение.
Как это запустить?
Приложение тестировалось на Alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е.
После создания data/config.json из data/config_sample.json, можно запускать приложение.
Предполагается, что конфиг написан в формате human json, который допускает коментарии и некоторые другие вольности в форматировании 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) и после этого сервис запускается командой:
service aleesa-misc-go start
В автозагрузку его можно прописать через команду:
rc-update add aleesa-misc-go default
Nota Bene #1
Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в некотором роде проблема. Решается она с помощью утилиты daemonize.
Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой.
В alpine linux есть средства openrc для супервайзинга foreground-сервисов.
Технически, можно было бы решить эту проблему fork()-а с помощью "github.com/sevlyar/go-daemon", но на текущий момент она не стоит остро, поэтому решения не требуется.