d9de157ad84defb14cf077d9ab22c8bae1194bcb
aleesa-irc-go ----------------------------------------------------------------------------------------------------------------------- Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub. Механика работы ----------------------------------------------------------------------------------------------------------------------- Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого сервиса. Формат протокола общения по redis pub-sub - см README от aleesa-misc-go. Как это собрать? ----------------------------------------------------------------------------------------------------------------------- Понадобится golang версии 1.18 или более новая. Сам процесс сборки простой, достаточно запустить: 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) и после этого сервис запускается командой: service aleesa-irc-go start В автозагрузку его можно прописать через команду: rc-update add aleesa-irc-go default Nota Bene ----------------------------------------------------------------------------------------------------------------------- По механике, в процессе работы мы форкаем горутинки на каждое входящее сообщение, особо не контроллируя этот процесс. Предполагается, что на это приложение не будет большой нагрузки - ограничения irc не должны дать возможности развить достаточно большой message rate, чтобы об это споткнуться. Формально, более удачным было бы иметь автоматический пул воркеров-горутинок и раскидывать им через channel-ы сообщения. Внутри каждой горутинки можно было бы повиcнуть в бесконечном цикле на канале входящих сообщений и так и работать. Но на практике оно того не стОит. Nota Bene #2 ----------------------------------------------------------------------------------------------------------------------- Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в некотором роде проблема. Решается она с помощью утилиты daemonize (https://github.com/bmc/daemonize). Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой. В alpine linux есть средства openrc для супервайзинга foreground-сервисов. Nota Bene #3 ----------------------------------------------------------------------------------------------------------------------- К сожалению, в боте не подразумевается функциональность invite-ов. Причина банальна - слишком жёсткие ограничения у многих irc-сетей на количество сообщений в единицу времени, а по механике в большинстве случаев ограничение работает не client-client или client-channel, а глобально, client-server (за исключением случаев, когда на канале у бота есть +v или +o), что позволяет абузить клиента, то есть в данном случае, бота. Сообщения об invite-ах пишутся в лог с уровнем info. Special Thanks ----------------------------------------------------------------------------------------------------------------------- https://github.com/akyoto/cache за "простой" кэш, из которого я сделал collection.go
Description
Languages
Go
96.8%
Makefile
3.2%