Hubot, c'est le nom du robot développé par Github « pour aider à déployer des infrastructures, automatiser des tâches et apporter du fun à l'entreprise ».
Basiquement, il se connecte à un salon de chat (IRC, Campfire, Jabber, etc.) est capable de deux choses : Écouter ce qu'il se dit sur le salon de chat et répondre lorsqu'il détecte un message qui correspond à quelque chose de connu. Par exemple, « Si je lis un message contenant mon nom et "hello", je répond un quelque chose tiré aléatoirement dans la liste suivante : "hello, bonjour, hi" ». Attendre des requêtes POST sur une API HTTP, et envoyer des messages sur le salon de chat. Celà permet à d'autres programmes de communiquer avec le robot, qui transmet les informations sur le chat.
L'avantage, par rapport aux bots traditionnels, c'est que celui-ci est scriptable, et qu'il existe une collection de script absolument colossale.
Voyons comment installer ça sous Debian.

Installation
Avant toute chose, Hubot est codé en Node.js et installable via NPM (Node Package Manager). Malheureusement, Node.js n'est pas disponible dans Wheezy. En attendant la prochaine Debian, le plus simple pour l'installer consiste à suivre le tutoriel de Nicolargo.
Une fois Node.js et NPM installés, on peut passer à l'installation de Hubot :
# En root
npm install -g hubot coffee-script irc jsdom underscore
Cela crée la commande hubot, que l'on va utiliser pour créer notre nouvel ami, appelons le « Marvin » :
hubot --create marvin
Et voilà, le robot est créé ! Vous pouvez d'ores et déjà le lancer :
cd marvin/
bin/hubot
Le premier lancement va installer les dépendances nécessaires. Vous pouvez ensuite commencer à discuter avec lui.
Hubot> hubot ping
Hubot> PONG
Hubot> hubot convert me 1€ in $
Hubot> 1.3522 US$
Cool hein ? :)
Maintenant, tout l'intérêt consiste à brancher ce robot à un outil de discussion instantanée. Hubot en gère plusieurs. Chez Sysnove, nous avons choisi IRC.
npm install hubot-irc --save && npm install
Puis on relance hubot on spécifiant quelques variables et l'adapter IRC :
export PATH="$PATH:/opt/node/bin"
export NODE_PATH="/opt/node:/opt/node/lib/node_modules"
export FILE_BRAIN_PATH="$HOME/marvin/var"
export HUBOT_IRC_SERVER="irc.freenode.net"
export HUBOT_IRC_ROOMS="#yourchannel"
export HUBOT_IRC_NICKSERV_USERNAME="Marvin"
export HUBOT_IRC_NICK="Marvin"
export HUBOT_IRC_PRIVATE=true
bin/hubot -a irc --name Marvin
Et le robot devrait se connecter sur le chan IRC donné, où il suffira de lui donner les mêmes commandes que dans l'exemple précédent.
Et sinon, il fait quelque chose d'utile ton bot ?
À partir de là, les possibilités sont infinies. Hubot est livré avec une liste interminable de scripts qu'il suffit d'ajouter dans le fichier hubot-scripts.json.
Notre petite sélection :
- file-brain.coffee permet de stocker les informations à mémoriser dans un fichier. C'est toujours mieux que de les perdre à chaque redémarrage, et c'est toujours plus simple que d'utiliser MongoDB, Postgres, Redis ou encore S3.
- reload.coffee permet de rafraichir la liste depuis le canal IRC, sans relancer hubot.
- google.coffee permet d'effectuer une recherche sur google :
Marvin: google me sysnove
- wikipedia.coffee permet d'effectuer une recherche sur wikipédia.
- youtube.coffee permet d'effectuer une recherche sur youtube.
- youtube-info.coffee affiche le titre et la durée lorsqu'un lien vers youtube est posté.
- http-info.coffee affiche le titre de la page lorsqu'un lien http est posté.
- remind.coffee permet de demander à hubot de notre rappeler des choses :
Marvin: remind me in 10 minutes to make my coffee
- tell.coffee permet de demander à hubot de passer un message à quelqu'un lorsqu'il se connectera.
- hello.coffee fait en sorte que hubot réponde lorsque quelqu'un dit bonjour.
- good-night.coffee c'est pareil, mais avec good night.
- coin.coffee joue à pile ou face (il y a pareil avec des dés).
- yoda-quotes.coffee cite Yoda (il y a pareil avec Richard Stallman, Linus Torvalds, Homer Simpson, Jesse Pinkman, etc.)
J'avais demandé « utile » !
Plus sérieusement, on peut surtout se servir d'hubot pour transmettre des informations très intéressante. Chez Sysnove, on utilise par exemple une version modifiée de gitlab.coffee qui relaye en temps réel les commits Git pushés sur notre Gitlab. Si vous préférez, il y a aussi une panoplie de scripts pour Github permettant par exemple d'interagir avec le système de tickets.
Nous utilisons aussi un script nagios.coffee pour transmettre les notifications de shinken à hubot et voir en temps réel l'état de notre infrastructure sur notre canal IRC.
Finitions
Et comme on est sous Debian et qu'on est pas des sauvages, je vous propose de terminer tout ça en ajoutant un script init qui vous permettra de démarrer, arréter et relancer votre robot comme n'importe quel service :
sudo wget https://gist.github.com/maethor/6806914/raw/a54cb15121d84f438ded462c4e5188ea78e0653a/hubot-init /etc/init.d/marvin
# Faites vos adaptations en fonction du nom et de l'endroit où se trouve votre robot
sudo /etc/init.d/marvin start
Enfin, pour l'activer au démarrage :
sudo update-rc2.d marvin defaults