0
2025-10-12 14:11:41 +03:00
2022-09-04 04:29:50 +03:00
2025-10-12 13:55:23 +03:00
2023-05-18 23:55:10 +03:00
2025-10-12 13:55:23 +03:00
2025-10-12 13:55:23 +03:00
2022-09-04 04:29:50 +03:00
2025-10-12 12:57:09 +03:00
2025-10-12 14:11:41 +03:00

aleesa-irc-go

Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub.

Механика работы

Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого сервиса.

Формат протокола общения по redis pub-sub - см. документацию в репозитории aleesa-doc.

Как это собрать?

Понадобится компилятор go версии 1.25.1 или более новый.

Сам процесс сборки простой, достаточно запустить make или gmake, в зависимости от платформы:

make

и через некоторое время мы получаем бинарник aleesa-irc-go. Это и есть наше приложение.

Как это запустить?

Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е, windows-е, freebsd, macos.

После создания data/config.json из data/config_sample.json, можно запускать приложение.

Предполагается, что конфиг написан в формате human json, который допускает коментарии и некоторые другие вольности в форматировании json-а. Конфиг ищется последовательно по следующим путям по принципу "кто первый того и тапки":

~/.aleesa-irc-go.json
~/aleesa-irc-go.json
/etc/aleesa-irc-go.json
data/config.json

В каталоге contrib находится скрипт для alpine linux, системы инициализации openrc. Этот скрипт достаточно положить в /etc/init.d/aleesa-irc-go. После чего скопировать бинарник в каталог /var/lib/aleesa-irc-go, положить конфиг в одну из дефолтных локаций (тестировалась /var/lib/aleesa-irc-go/data/config.json) и после этого сервис запускается командой:

service aleesa-irc-go start

В автозагрузку его можно прописать через команду:

rc-update add aleesa-irc-go default

Nota Bene

Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в некотором роде проблема. Решается она с помощью утилиты daemonize.

Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой.

В alpine linux есть средства openrc для супервайзинга foreground-сервисов.

Технически, можно было бы решить эту проблему fork()-а с помощью "github.com/sevlyar/go-daemon", но на текущий момент она не стоит остро, поэтому решения не требуется.

Nota Bene 2

К сожалению, в боте не подразумевается функциональность invite-ов. Причина банальна - слишком жёсткие ограничения у многих irc-сетей на количество сообщений в единицу времени, а по механике в большинстве случаев ограничение работает не client-client или client-channel, а глобально, client-server (за исключением случаев, когда на канале у бота есть +v или +o), что позволяет абузить клиента, то есть в данном случае, бота.

Сообщения об invite-ах пишутся в лог с уровнем info.

Special Thanks

https://github.com/akyoto/cache за "простой" кэш, из которого я сделал anycollection и boolcollection.

Description
No description provided
Readme 8.9 MiB
Languages
Go 96.8%
Makefile 3.2%