Creando un IRC Bot usando conexiones TCP con Node.js

La mayoria de los ejemplos si no es que todos los que encontramos en la red sobre node.js son acerca de aplicaciones web. Asi que esta ocasion prepare este 'post' sobre como crear un Bot de IRC (Si, aun se sigue usando y mucho :P) usando conexiones TCP con node.js.

La idea es que podemos ver que hay mas formas de sacarle provecho a node.js utilizando el poder de los Eventos, Javascript y V8.

Comenzaremos con diseñar nuestro bot, asi que de entrada necesitaremos crear la conexion, identificarnos con el servidor de IRC y procesar los datos para responder a ciertas situaciones, asi que creamos la siguiente estructura de archivos.

  • parser.js (Procesa la informacion recibida del canal para responder a comandos)
  • identify.js (Se indentificara con el servidor para establecer la conexion)
  • app.js (Creara la conexion tcp al servidor de irc y manejara los eventos de entrada de datos y cierre de la conexion)

Escribiremos el modulo de procesamiento en un archivo llamado parser.js, lo que necesitamos son los datos para procesar y la conexion para enviar las respuestas, una vez que tenemos los datos los partimos en base a los espacios y podremos obtener un stack de aproximadamente 4 elementos info, head, command, msg y un ultimo que es el nick que obtendremos a partir de procesar el encabezado en ciertas ocasiones.

Para mantener la conexion con el servidor cuando nos diga PING le responderemos PONG, cuando detectemos que el servidor nos ha validado la identificacion entraremos al canal #devs, y por ultimo cuando detectemos @ping en los mensajes responderemos con un @pong, tomando como referencia que podemos utilizar el caracter @ para detectar comandos para nuestro bot

Parser

Lo siguiente es escribir el modulo de identificacion en un archivo llamado indetify.js, para realizar la identificacion necesitamos la conexion para poder enviar los comandos de identificacion al servidor de IRC

Identify

Por ultimo y mas importante crearemos la conexion al servidor de irc en este caso haremos uso de freenode.net, asi que usaremos el modulo de 'net' y al crear la conexion especificaremos el host y puerto, una vez conectados, nos identificamos usando nuestro modulo identify y nos suscribimos al evento 'data' para procesar los datos recibidos y mostrarlos en la consola, por ultimo, nos suscribimos al evento close para cuando se pierda la conexion con el host.

App

Como notaron con escasas 56 lineas de codigo pudimos crear una conexion tcp que sera un IRC Bot que claro no hace mucho pero nos da una idea de lo que podemos hacer con node.js desde procesar archivos, crear servidores (tcp, udp), clientes (tcp, udp), automatizar tareas, etc.. podemos hacer muchas cosas con node.js utilizando nuestros conocimientos de Javascript.

Y aqui nuestro bot entrando al IRC

IRC Bot

Y aqui pueden descargar al IRC Bot Botiik.zip

Si desean hacer un Bot de verdad les recomiendo el paquete de de IRC para Node.js 

Pueden dejar sus comentarios, mejoras o errores detectados en el 'post'

jacobo

saludos! estoy investigando un poco este tema de node.js e irc...

a mi me interesaria crear una aplicacion que desde la web pudiera comunicarme con el bot y recibir datos en tiempo real del irc

¿ves factible alguna forma de servir info del irc desde el bot a la web?

2012-03-20 11:40 pm

HardBit

jacobo: claro que si, puedes utilizar websockets o si necesitas que sea multibrowser puedes usar una lib que implemente un patron comet para tener una conexión persistente como http://socket.io/

Saludos

2012-03-21 6:20 am

jacobo

estaba intentandolo con php, pero abrir un canal bidireccional browser-php corriendo... pues no se si se puede hacer

a ver con websockets si saco algo en claro! socket.io ya lo conocia, una maravilla para estos tiempos :)

2012-03-21 11:09 am

jacobo

irccat-nodejs

irccat-nodejs is based on irccat which allows you to send messages to IRC using HTTP or a TCP socket. The client code is again fairly simple.

por ahí iban los tiros, pero eso parece que simplemente es unidireccional desde http a irc y yo necesito la comunicacion completa

2012-03-21 11:40 am