0
Files
aleesa-irc-go/README.md
2024-08-03 21:35:56 +03:00

83 lines
4.5 KiB
Markdown

# aleesa-irc-go
Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub.
## Механика работы
Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого
сервиса.
Формат протокола общения по redis pub-sub - см. документацию в репозитории aleesa-doc.
## Как это собрать?
Понадобится компилятор go версии 1.22 или более новый.
Сам процесс сборки простой, достаточно запустить:
```bash
make
```
и через некоторое время мы получаем бинарник **aleesa-irc-go**. Это и есть наше приложение.
## Как это запустить?
Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е.
После создания **data/config.json** из **data/config_sample.json**, можно запускать приложение.
Предполагается, что конфиг написан в формате [human json](https://hjson.github.io), который допускает коментарии и
некоторые другие вольности в форматировании 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**) и после этого сервис запускается
командой:
```bash
service aleesa-irc-go start
```
В автозагрузку его можно прописать через команду:
```bash
rc-update add aleesa-irc-go default
```
## Nota Bene
Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в
некотором роде проблема. Решается она с помощью утилиты [daemonize](https://github.com/bmc/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 за "простой" кэш, из которого я сделал collection.go.