Son las 2:15 de la mañana. Tengo los ojos inyectados en sangre, una taza de café que lleva fría desde hace al menos tres horas y el zumbido constante de los ventiladores de fondo. Llevo toda la puñetera noche pegándome cabezazos contra el teclado por una tontería. El motivo de mi insomnio no es otro que un script en TCL para un Eggdrop que se niega a darle op a los usuarios registrados en mi canal de IRC Hispano.

Para los que venís de otras redes, mantener un canal en el IRC Hispano no es moco de pavo. Si te descuidas cinco minutos, entran cuatro nicks aleatorios, te hacen un takeover, te roban el canal y te quedas con cara de tonto. Por eso, tener un bot 24/7 es casi una obligación si quieres mantener el orden.

Cacharreando con Eggdrop y TCL

Hasta ahora, me apañaba bastante bien con los clásicos scripts de mIRC. Picar código en mSL (mIRC Scripting Language) tiene su encanto. Es rápido, ves los resultados al vuelo en tu propio cliente y para hacer kicks automáticos a los graciosos que escriben en mayúsculas funciona de maravilla. Algo tan simple como:

on *:TEXT:*:*:{
  if ($upper($1-) == $1-) && ($len($1-) > 10) {
    kick # $nick ¡No grites, que no estamos sordos!
  }
}

Te salva la vida. Pero claro, esto requiere tener el ordenador encendido todo el día. Y con lo que cuesta la factura de la luz, no es plan. La evolución natural para los que nos gusta trastear es alquilar una shell en algún servidor perdido de la mano de Dios y meter ahí un Eggdrop.

El Eggdrop es una maravilla de la ingeniería, un bot robusto escrito en C que lleva entre nosotros desde el 93, pero configurarlo... ¡ay, amigo! Eso es otra historia. Para darle vida de verdad tienes que meterte en el barro con TCL (Tool Command Language).

El problema de esta noche venía de la interacción entre el Eggdrop y el mítico NiCK (el bot de servicios oficial del IRC Hispano). Quería que mi bot reconociera a los usuarios legítimos del canal consultando su host virtual cifrado.

Después de compilar el bot en la shell (bendito make config y make), me he puesto a escribir el maldito script en TCL. La sintaxis de TCL es... peculiar. Todo son comandos y listas, y si te dejas una maldita llave abierta, el Eggdrop se te cuelga en la cara sin darte demasiadas explicaciones.

bind join - * join_op
proc join_op {nick uhost handle channel} {
  if {[matchattr $handle o]} {
    putserv "MODE $channel +o $nick"
    putlog "Dando OP a $nick en $channel"
  } else {
    putlog "El usuario $nick ($uhost) no tiene permisos en $channel."
  }
}

El fallo que me ha tenido en vela era tan estúpido como que no estaba asignando bien los flags de los usuarios en el archivo .user del bot. Tres horas para darme cuenta de que el comando chattr en la partyline del Eggdrop lo estaba escribiendo mal. Frustrante a más no poder, pero la sensación de satisfacción cuando finalmente ha entrado un colega al canal y el bot le ha cascado la @ automáticamente al instante, no tiene precio.

El futuro de la automatización

Mientras apuro el último sorbo de café frío, no puedo evitar reflexionar sobre hacia dónde va todo esto. Ahora mismo, para mantener un canal necesitamos alquilar shells de Linux, aprender lenguajes arcanos como TCL y compilar cosas a mano. Es un trabajo de artesanos, de gente a la que le gusta mancharse las manos.

A veces pienso que en unos años todo esto será mucho más fácil. Quizá aparezcan plataformas donde todo esté integrado, y no necesitemos picar scripts a las dos de la mañana para evitar que cuatro trolls nos revienten la comunidad. Aunque, siendo sinceros, espero que ese nivel de "facilidad" nunca llegue a quitarnos esta magia. Esa adrenalina de saber que tienes un pequeño programa funcionando de forma autónoma en un servidor a miles de kilómetros, obedeciendo las reglas que tú mismo has escrito.

Mañana tengo que madrugar, así que voy cerrando. El bot se queda de guardia. ¡Larga vida al IRC!