Hubot

Un bot para chat programado por github

hubot

Alguna vez sentiste que...

  • ¿El chat en el trabajo era aburrido?
  • ¿Que estabas siendo más productivo de lo necesario?
  • ¿Que es muy molesto buscar en google una imagen que describa lo que piensas acerca de un comentario?

Si la respuesta a alguna de estás preguntas es sí...

No temas hubot está aquí.

En serio... ¿Qué es Hubot?

Hubot es un bot para diferentes sistemas de mensajería que puede hacer tú trabajo más fácil o tu conversación más divertida.

¿Porqué es relevante para un grupo de Javascript?

  1. Hubot está desarrollado en node.js.
  2. Hubot es extensible.

- Y hoy hablaremos de ambas cosas.

¿Funcionará para mi?

Hoy en día Hubot se puede conetar a:

  • Flowdock
  • HipChat
  • IRC
  • Partychat
  • Talker
  • Tetalab
  • Twilio
  • Twitter
  • XMPP
  • Gtalk
  • Yammer
  • Skype

Pero no uso ninguno de esos servicios y necesito un amigo...

No te preocupes, Hubot puede correr en modo local desde tu shell.


$ cd hubot
$ . bin/hubot
Hubot> hubot echo "I love user"
Hubot> "I love user"
          

Me convensiste ¿qué necesito para instalar Hubot?

  1. node.js
  2. npm
  3. build-essentials.
  4. coreutils.
  5. No temerle a lo desconocido.

Instalación

Asumiendo que tienes todo lo necesario:


$ git clone git://github.com/github/hubot.git && cd hubot
$ npm install
            

Deployment

Hacer deployment es igual de sencillo que instalar, especialmente en heroku

- Más información aquí.

Extendiendo Hubot

Hubot sigue el principio de UNIX

- pequeños programas que hacen una sola cosa

Un script de Hubot es...

Un script escrito en javascript o coffeescript, y está es su forma más simple.


module.exports = (robot)->
  robot.respond /tijuana\.js/i, (message)->
    message.send "It's the happiest place on earth!"
            

Resultado


$ cd hubot
$ . bin/hubot
Hubot> hubot tijuana.js
Hubot> It's the happiest place on earth!
            

Más que simples mensajes


module.exports = (robot)->
  robot.respond /(?:translate) ( me )? (.*)/i, (message)->

    message.http('http://translate.google.com/translate_a/t')
      .query(
        sl:     'auto',
        target: 'en'
      )
      .header('User-Agent', 'Hubot MOFO!')
      .get() (error, response, body)->
        message.send body

            
- El objeto message viene cargado con un cliente HTTP

Hacer que Hubot escuche

Hubot es bueno respondiendo lo que le pedimos, pero también puede actuar sin petición alguna:


module.exports = (robot)->
  robot.hear /creo que (.+)$/i, (message)->
    message.send "YEAAAAHHHHH!"
            

Resultado


$ cd hubot
$ . bin/hubot
Hubot> creo que este arroz ya se cocio
Hubot> YEAAAAHHHHH!
            

The bleeding edge

Quiero los scripts más nuevos.


  "dependencies": {
    "hubot-scripts": "git://github.com/github/hubot-scripts.git"
  }
            
- package.json de hubot

Quiero publicar mi script

  1. Hacer fork a hubot-scripts
  2. Hacer clone de tú fork y agregar tu script
  3. Subir tus cambios a tú fork y hacer un Pull Request

Testing

Lamentablemente las pruebas de hubot-scripts están rotas en este momento.

Ejercicio

Por que sí solo hablaramos esto sería muy aburrido. La meta, hacer que hubot nos proporcione información sobre los últimos terremotos registrados, usando solo lo que hemos visto.

Recursos

Este script no debe tener ninguna dependencía externa y como único recurso solo deberá usar http://earthquake.usgs.gov/

Comportamiento deseado


hubot quakes (intensity|all|significant) (period) [limit]
            

Solución propuesta

- ver solución aquí.

El futuro prometedor

No hemos cubierto todo lo que hubot puede hacer


robot.brain
          
- hubot puede usar redis como key-value storage y guardar información por nosotros

Links

El fin

Está presentación fue hecha con: reveal.js

Puede ser obtenida aquí