Comandos drush para administrar el bot (a.k.a Druplicon)

Como muchas saben, Druplicon es el bot que está en varios de los canales de Drupal en el IRC de Freenode. Como era de imaginar, el bot es un módulo de drupal. Se lo curra Morbus Iff, que tiene un sitio web que me gusta bastante.

El bot es capaz de hacer ciertas cosas de entre las cuales me interesan dos: los factoids y la interacción con la API de Drupal (api.module).

  • Los factoids: son «hechos» que el bot memoriza y es capaz de responder cuando se le pregunta por ellos. Ejemplo básico:
     Druplicon: verano is caluroso
     jonhattan: Okay.
    <jonhattan> verano?
    <Druplicon> verano is caluroso
     Druplicon: forget verano
     jonhattan: I've forgotten about verano.
    
  • Búsqueda de funciones de la API: Si preguntas en el irc por una función el bot te responderá su descripción corta, si la conoce:
    <jonhattan> l?
    <Druplicon> l is one of the shortest Drupal function.
    <Druplicon> l: Format an internal Drupal link. => l($text, $path, $options = array()) => http://api.drupal.org/api/function/l/6
    
    Esto es bastante interesante a la hora de prestar ayuda/soporte en los foros ya que puedes remitir al/a interesadx rápidamente a la descripción entera de la función en la API sin tener que estar escribiendo largas urls.

Tras unas conversaciones con kurkuma en #drupal-es, donde habitaba el bot Pepito hasta hace bien poco (powered by Toletum), me puse a jugar con la posibilidad de que un bot pudiera responder a todas las funciones de la API de drupal (core y contrib), ya que Druplicon sólo conoce la API del core de Drupal. Mientras lo hablábamos a-c-m consiguió que Morbus añadiera nuestro canal a la lista del Druplicon. El target cambió a "todas las funciones de la API menos el core".
El caso es bastante trivial: basta con poner un par de líneas en la configuración del módulo api.

El bot además de un módulo drupal tiene un script que le da vida: bot_start.php. Este script se ejecuta desde la consola y mientras esté corriendo el bot está conectado a los canales indicados en su configuración.

Total, que pensé en la posibilidad de que el bot funcionara como un demonio y me puse manos a la obra: hacer una extensión de drush que permita «daemonizar» el bot. Para ello ha bastado con adaptar el esqueleto del fichero de ejemplo de comandos de drush y los ejemplos de uso de las extensiones PCNTL (Process CoNTroL) de php.

Para más detalle, esta es la issue que incluye el código y los comandos disponibles.

Por último decir que en el canal hispano ha estado rulando el bot powered by drush, al que he bautizado Eternauta tras una sugerencia de Olimpia, que me referenció esta frase con la que termino el post:

"Ahora que lo pienso, se me ocurre que quizás por esta falta de héroe central, el Eternauta es una de mis historias que recuerdo con más placer. El héroe verdadero de El Eternauta es un héroe colectivo, un grupo humano. Refleja así, aunque sin intención previa, mi sentir íntimo: el único héroe válido es el héroe "en grupo", nunca el héroe individual, el héroe solo" - Oesterheld, Héctor Germán