Предисловие
Я думал на новый сервер запилить прогу — мост между чатом сервера и IRC. У меня уже были такие программки: я насчитал минимум 6 различных версий мостов — каждая была немного переделанным клиентом IRC, который на дискете встроенной есть. Понять, в чём разница, даже с вимдиффом было сложно. Потому я плюнул и решил запилить полноценную ирколибу с красивой апишкой.
Как это выглядит
Вот полный код бота — моста.
Сто двадцать шесть строчек. Прокомментирую некоторые из них.
① Подключаем либу и для укорачивания имён ещё вытаскиваем events, в которых хранятся все ивенты и priority.
② Создаем клиент с помощью билдера.
③ Через :connection задаём настройки соединения. Самое важное — адрес иркосервера. Порт обязателен.
④ Ирколиба знает меру в флуде. Опасаться, что бота выкосит флуд-фильтром, можно гораздо меньше. Это опционально, конечно.
⑤ Задаём ник бота, юзернейм и реалнейм. Юзернейм виден в хосте (nickname!username@domain.name), а реалнейм пишется в /whois.
⑥ Ирколиба умеет авторизовываться на сервере. Тоже опционально.
⑦ Эта группа выделена для ботоводческих настроек. Но пока там единственная опция — в какие каналы автоматически заходить.
⑧ Здесь задаются настройки исполнения.
Опция threaded, по дефолту включённая, запустит бота в отдельном треде.
Опция reconnect, также включённая по умолчанию, заставит бота переподключиться к серверу, если отвалится от него.
Опция catchErrors перехватит ошибки в пользовательких листнерах; она отключена по умолчанию, чтобы не смущать.
⑨ Бот генерит ивенты для каждого сообщения. Так мы задаём обработчик для ивента. К слову, вместо функции здесь может быть корутина.
⑩ Есть и другие события. Например, irc.events.client.connected означает, что клиент соединился с сервером. А irc.events.client.authenticated говорит, что теперь можно слать сообщения.
⑪ Когда мы закончили конфигурировать бота, собираем через :build(). Если вместо него вызвать :buildAndRun(), бот тут же ещё и запустится.
⑫ Для удобства создадим ещё один тред, где будем работать с чатбоксом и ждать ^C.
⑬ Запускаем бота. Затем ждём завершения любого из двух потоков.
⑭ Когда это произошло, мы выключаем клиент, если он ещё подключен: тот выйдет с сообщением "Quitting."
⑮ Наконец, принудительно останавливаем потоки. На всякий случай.
Красота ведь.
Репозиторий
Репа либы — на нашем гитлабе. Там же есть примеры использования и документация с описанием всего.
Наконец, версия 1.0.0 лежит на хеле. Из-за баги в OC хпм крашиться может (фиксить лень), но можно попробовать скачать:
$ hpm install libirc