Установка чат-бота Lita для IRC в Ubuntu 14.04

Published by Leave your thoughts

На сегодняшний день существует множество чат-приложений и мессенджеров для корпоративного общения: как коммерческих (например, HipChat и Slack), так и свободных (IRC, Jabber/XMPP). Одним из главных преимуществ таких приложений является возможность использовать в них чат-ботов, что позволяет командам DevOps выполнять работу быстрее и эффективнее.

Данное руководство поможет установить на сервер Ubuntu чат-бота Lita, написанного на Ruby. Этот бот поддерживает множество чат-приложений, среди которых HipChat, Campfire и IRC. В основном Lita работает за счёт расширяющих функциональность плагинов, которые могут, к примеру, выполнять поиск в Google или развертывать веб-сайты.

Требования

  • Сервер Ubuntu 14.04.
  • Не-root пользователь с правами sudo.
  • Предустановленный и подключенный мессенджер IRC. Можно настроить собственный IRC-сервер или же подключиться к публичному серверу (freenode, IRCnet или EFnet). Freenode можно подключить даже без необходимости загружать клиент IRC. Чтобы использовать Freenode, нужно выбрать уникальный ник и название канала, а затем нажать кнопку Connect.

Примечание: В данном руководстве используется Freenode.

1: Установка Lita

Установите пакет Lita и его зависимости.

Сначала нужно установить Ruby – язык, на котором написан бот Lita. Пакет Ruby можно найти в репозитории системы Ubuntu, однако пакет в репозитории, скорее всего, устаревший и не подходит для работы с Lita.

Потому нужно загрузить PPA более новой версии:

sudo apt-add-repository ppa:brightbox/ruby-ng

После этого нужно обновить пакеты системы:

sudo apt-get update

Теперь можно установить Ruby и другие зависимости Lita:

sudo apt-get install ruby2.2 ruby2.2-dev build-essential libssl-dev redis-server

После этого можно становить Lita при помощи пакетного менеджера RubyGems, который запускается командой gem. Установите Lita и Lita IRC (IRC-адаптер):

sudo gem install lita
sudo gem install lita-irc

2: Настройка Lita

Теперь нужно подключить бота к каналу IRC.

Следующая команда создаст нового бота.

lita new your_bot_name

Примечание: Замените your_bot_name уникальным именем бота.

Также эта команда создаст в домашнем каталоге новый каталог (~/your_bot_name), который содержит два файла: Gemfile и lita_config.rb. Gemfile содержит список необходимых плагинов Ruby, а lita_config.rb хранит параметры конфигурации плагинов. Для плагина lita-irc  файл lita_config.rb должен содержать данные о IRC-сервере, канале, ник и т.д.

Прежде чем запустить Lita, нужно отредактировать конфигурационные файлы, чтобы бот мог подключиться к IRC. Откройте новый каталог:

cd ~/your_bot_name/

Откройте Gemfile в любом текстовом редакторе:

nano Gemfile

Найдите строку # gem «lita-irc» и удалите # в начале строки.

. . .
# Uncomment to use the IRC adapter
gem "lita-irc"
. . .

Сохраните и закройте файл.

Откройте файл lita_config.rb.

nano lita_config.rb

Найдите параметр config.robot.name и замените Lita ником своего бота.

Lita.configure do |config|
# The name your robot will use.
config.robot.name = "your_bot_name"
. . .

Затем найдите config.robot.adapter и замените стандартное значение :shell значением :irc.

# The adapter you want to connect with. Make sure you've added the
# appropriate gem to the Gemfile.
config.robot.adapter = :irc
. . .

Перейдите в конец файла и добавьте следующие строки перед строкой end.

Убедитесь в том, что абзацные отступы стоят правильно. Замените условные значения параметров config.adapters.irc.channels и config.adapters.irc.user именем канала и именем бота соответственно.

Примечание: Если вы используете не Freenode, а другой IRC-сервер, не забудьте отредактировать параметр config.adapters.irc.server.

. . .
## Example: Set configuration for any loaded handlers. See the handler's
## documentation for options.
# config.handlers.some_handler.some_config_key = "value"
config.adapters.irc.server = "irc.freenode.net"
config.adapters.irc.channels = ["#your_channel_name"]
config.adapters.irc.user = "your_bot_name"
config.adapters.irc.cinch = lambda do |cinch_config|
cinch_config.max_reconnect_delay = 123
end
end

Сохраните и закройте файл.

Полный список параметров плагина lita-irc можно найти на странице GitHub.

3: Подключение к каналу

Теперь нужно запустить бота и настроить администратора.

Убедитесь, что вы подключены к IRC с помощью выбранного IRC-клиента или веб-клиента, и что вы находитесь в канале, к которому нужно подключить Lita. Затем запустите бота.

lita start

На экране появится объёмный вывод. После программа сообщит, что бот подключен к указанному каналу IRC.

На данный момент бот еще не настроен и ничего не будет делать.

Прежде чем добавить дополнительные функции, сделайте текущего пользователя администратором. Для этого нужен ID бота. Чтобы узнать ID, отправьте следующую строку в канал IRC.

your_bot_name users find your_irc_nickname

Бот ответит примерно так:

your_irc_nickname<(ID: ff97cx41-b7fd-4x9b-x76d-e76xf443c65x, Mention name: your_irc_nickname)

Скопируйте полученный ID и остановите Lita (CTRL+C) в терминале.

Снова откройте lita_config.rb:

nano lita_config.rb

Добавьте в конец файла (перед последней строчкой end) следующую строку.

Примечание: Замените условный ID скопированным ID.

...
config.adapters.irc.cinch = lambda do |cinch_config|
cinch_config.max_reconnect_delay = 123
end
config.robot.admins = ["f97cx41-b7fd-4x9b-x76d-e76xf443c65x"]
end

Сохраните и закройте файл.

4: Добавление плагинов

Теперь бот может подключаться к IRC. Но больше он ничего не умеет – все его функции зависят от плагинов. Добавьте несколько полезных плагинов.

Вы можете написать свой собственный плагин на Ruby или использовать один из сотни предварительно собранных плагинов. Для примера попробуйте установить lita-dig

(этот плагин предназначен для поиска DNS-записей).

Примечание: Аналогичным образом можно установить и любой другой плагин.

Чтобы установить lita-dig, введите:

sudo gem install lita-dig

Откройте Gemfile:

nano Gemfile

Добавьте в конец файла строку:

gem "lita-dig"

Сохраните и закройте файл. Перезапустите бота:

lita start

После перезагрузки отправьте следующую строку в IRC-канал.

your_bot_name dig your_domain.com

Бот вернёт несколько строк, вывод начинается примерно так:

;; Answer received from 8.8.8.8:53 (114 bytes)

5: Скрипт Upstart

До сих пор бот постоянно запускался вручную. В среде тестирования это нормально, но в дальнейшем такое поведение программы будет непродуктивным. Теперь пора создать Upstart скрипт для управления ботом, что позволит быстро запускать, останавливать и перезапускать его.

Создайте файл lita-your_bot_name.conf в каталоге /etc/init:

sudo nano /etc/init/lita-your_bot_name.conf

Вставьте в файл следующий код, заменив your_username именем не-root пользователя с доступом к sudo.

start on runlevel [2345]
stop on runlevel [^2345]
chdir /home/your_username/your_bot_name
env HOME=/home/your_username
setuid your_username
setgid your_username
respawn
respawn limit 10 5
exec lita start

Рассмотрим скрипт подробнее:

  • Строки start on и stop on говорят системе Ubuntu, когда запускать и останавливать бота.
  • Строка chdir указывает каталог, в котором скрипт Upstart будет выполнять команду exec.
  • Строка env указывает, где находятся файлы настроек приложения Ruby.
  • Строки setuid и setgid указывают пользователя, при помощи которого Upstart запустит бота. Если эти строки отсутствуют, бот будет запущен как root.

Проверьте синтаксис этого скрипта на наличие ошибок с помощью следующей встроенной команды:

sudo init-checkconf /etc/init/lita-your_bot_name.conf

Если синтаксис правильный, на экране появится следующий вывод:

File /etc/init/lita-your\_bot\_name.conf: syntax ok.

Запустите бота при помощи скрипта Upstart:

sudo start lita-your_bot_name

На экране появится:

lita-your_bot_name start/running, process 1234

После этого бот подключится к IRC-каналу.

Tags: , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>