From afe6e5384d5cdaed12434154aa29022f07bcc726 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sat, 3 Aug 2024 21:35:56 +0300 Subject: [PATCH] Replace README with README.md --- README => README.md | 68 ++++++++++++++++++++++----------------------- README.txt | 1 - 2 files changed, 34 insertions(+), 35 deletions(-) rename README => README.md (50%) delete mode 120000 README.txt diff --git a/README b/README.md similarity index 50% rename from README rename to README.md index f3a2028..203824e 100644 --- a/README +++ b/README.md @@ -1,74 +1,74 @@ -aleesa-irc-go ------------------------------------------------------------------------------------------------------------------------ +# aleesa-irc-go + Сервис для aleesa-bot, работающий с протоколом IRC. С основными сервисами бота работает по протоколу Redis pubsub. +## Механика работы -Механика работы ------------------------------------------------------------------------------------------------------------------------ Сервис подписан на pub-sub redis-канал irc. В этот канал пишут остальные сервисы aleesa-bot-а в ответ на запросы этого сервиса. -Формат протокола общения по redis pub-sub - см README от aleesa-misc-go. +Формат протокола общения по redis pub-sub - см. документацию в репозитории aleesa-doc. +## Как это собрать? -Как это собрать? ------------------------------------------------------------------------------------------------------------------------ -Понадобится golang версии 1.19 или более новая. +Понадобится компилятор go версии 1.22 или более новый. Сам процесс сборки простой, достаточно запустить: + +```bash make +``` -и через некоторое время мы получаем бинарник aleesa-irc-go. Это и есть наше приложение. +и через некоторое время мы получаем бинарник **aleesa-irc-go**. Это и есть наше приложение. -Как это запустить? ------------------------------------------------------------------------------------------------------------------------ +## Как это запустить? + Приложение тестировалось на alpine linux x86_64 3.16, но должно работать на любом (более свежем) linux-е. -После создания data/config.json из data/config_sample.json, можно запускать приложение. +После создания **data/config.json** из **data/config_sample.json**, можно запускать приложение. -Предполагается, что конфиг написан в формате human json (https://hjson.github.io), который допускает коментарии и +Предполагается, что конфиг написан в формате [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) и после этого сервис запускается +**/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 -Nota Bene ------------------------------------------------------------------------------------------------------------------------ -По механике, в процессе работы мы форкаем горутинки на каждое входящее сообщение, особо не контроллируя этот процесс. -Предполагается, что на это приложение не будет большой нагрузки - ограничения irc не должны дать возможности развить -достаточно большой message rate, чтобы об это споткнуться. - -Формально, более удачным было бы иметь автоматический пул воркеров-горутинок и раскидывать им через channel-ы -сообщения. Внутри каждой горутинки можно было бы повиcнуть в бесконечном цикле на канале входящих сообщений и так и -работать. Но на практике оно того не стОит. - - -Nota Bene #2 ------------------------------------------------------------------------------------------------------------------------ Go не поддерживает системный вызов fork() из-за чего демонизация программ на гошке средствами самой гошки - это в -некотором роде проблема. Решается она с помощью утилиты daemonize (https://github.com/bmc/daemonize). +некотором роде проблема. Решается она с помощью утилиты [daemonize](https://github.com/bmc/daemonize). Соответствено, если для запуска этой программы предполагается использовать возможности демонизации, то можно воспользоваться этой программой. В alpine linux есть средства openrc для супервайзинга foreground-сервисов. +Технически, можно было бы решить эту проблему fork()-а с помощью "github.com/sevlyar/go-daemon", но на текущий момент +она не стоит остро, поэтому решения не требуется. + +## Nota Bene 2 -Nota Bene #3 ------------------------------------------------------------------------------------------------------------------------ К сожалению, в боте не подразумевается функциональность invite-ов. Причина банальна - слишком жёсткие ограничения у многих irc-сетей на количество сообщений в единицу времени, а по механике в большинстве случаев ограничение работает не client-client или client-channel, а глобально, client-server (за исключением случаев, когда на канале у бота есть +v @@ -77,6 +77,6 @@ client-client или client-channel, а глобально, client-server (за Сообщения об invite-ах пишутся в лог с уровнем info. -Special Thanks ------------------------------------------------------------------------------------------------------------------------ -https://github.com/akyoto/cache за "простой" кэш, из которого я сделал collection.go +## Special Thanks + +https://github.com/akyoto/cache за "простой" кэш, из которого я сделал collection.go. diff --git a/README.txt b/README.txt deleted file mode 120000 index 100b938..0000000 --- a/README.txt +++ /dev/null @@ -1 +0,0 @@ -README \ No newline at end of file