Pol el Pueblo Virtual
Actualización 2008: Estamos desarrollando de nuevo POL 3.0 vía web, entra aquí: http://www.virtualpol.com
Abril, 2004. Uno de tantos días por internet, un tal Cheme llega hasta mí para preguntarme si tenía información sobre los mensajes globals; necesitaba saber datos técnicos de impacto de visitas, consecuencias y demás temas, y como he preparado varios para el Certamen del canal Literatura le informé gustosamente sobre todo lo que me preguntó.
Me contó que el hispano iba a promover su iniciativa, un Pueblo Virtual. Me quedé un rato pensando a lo que podía referirse con "Pueblo Virtual". Me imaginé un montón de cosas muy interesantes, le dije que era una gran idea aún sin conocer de qué iba el tema.
La idea consiste en crear un sistema político y social tan complejo (relativamente) como la vida misma. Para ello disponen de su web oficial VirtuaLPoL.com (dominio actualmente caducado) que incluye desde la Constitución aprobada por el parlamento, periódicos, código penal y muchas cosas más...
Me encantó tanto la idea que propuse hacer un Bot para el canal. Era lo que le faltaba al Pueblo, un sistema automatizado y en tiempo real con el que conseguir información. Consiste en un programa que conectado al IRC ofrece una serie de información y hace determinadas acciones interactuando con comandos de texto. Me decidí a hacerlo, programando en scripting de mIRC, el cual a estas alturas domino perfectamente, (pocas cosas puedo decir tan seguro) y actualmente el programa ya tiene 1058 lineas de código y sistemas de cargos, dinero, cuentas bancarias, votaciones, partidos y más sistemas que contaré más adelante...
En principio el bot es de mi propiedad, aunque es para los miembros de la Junta, de la que soy miembro. Esta Junta está formada por los creadores del Pueblo y nos encargamos de su mantenimiento pero sin interferir de ningún modo con el mundo. Por seguridad me reservo de publicar íntegras las 1060 lineas de código del VirtuaLPoL, al menos de momento. Pero aprovecharé mi flamante WebLog para publicar fragmentos peliagudos, como por ejemplo el código encargado de contar cada voto o el sistema de bases de datos o incluso algún día lo publicaré completamente.
La primera decisión antes de empezar a programar el VirtuaLPoL era decidir el lenguaje y la plataforma. Las dos opciones que teniamos era una conbinación de los lenguajes PHP y MySQL y alojado en un hosting web. Las ventajas era muchas y los resultados muy buenos pero mi falta de conocimientos del lenguaje y la dificultad de implementar lenguaje web PHP al protocolo de redes de chat IRC nos hizo elegir la otra posibilidad, scripting de mIRC mantenido por alguien de la Junta.
VirtuaLPoL necesita un sistema de bases de datos en las que almacenar la información de cada ciudadano, las cuentas bancarias, partidos políticos y demás. En scripting de mIRC no existe ningún sistema para ello, en cambio me tuve que inventar una forma de guardar organizadamente toda la informacion. Lo conseguí creando varios archivos de texto Ciudadanos.ini, Partidos.ini, etc... En cada archivo cada línea representa una fila y en cada fila hay campos separados por el carácter ":". Luego, se sacan o ingresan los campos a base de bucles haciendo búsquedas y demás temas complejos de programación, pero así funciona basicamente. De esta forma está resuelto el primer reto del bot VirtuaLPoL.
Como excepción he decidido publicar el fragmento del código que se encarga de validar y guardar el voto de las votaciones. El comando es VOTAR elección. Debo advertir que el fragmento es complejo y hay que dar por hecho que antes de llegar ahí el bot hace las comprobaciones necesarias certificando el nick como ciudadano de pol y dando a la variable %línea el número de línea que tiene ese nick en la base de datos. El código lo encontraras ampliando este texto pulsando en "Leer mas...".
Suerte a los curiosos! Podéis preguntarme lo que os apetezca comentándolo en este artículo. Un saludo a todos. Próximamente, más.
; Comando VOTAR eleccion
if ($1 == votar) {
; Si hay alguna eleccion
if ($2 != $null) {
; Si el campo de votacion no vale 1, 1 significa que ya se ha votado
if ($gettok($read -l $+ %linea ciudadanos.ini,7,58) != 1) {
; Comienza el bucle que busca la eleccion entre las elecciones de la votacion actual
set %s 0
:s.re
inc %s 1
if ($gettok(%elecciones, %s ,32) == $2) {
; Si existe esa eleccion
set %eleccion. $+ %s $gettok(%elecciones, %s ,32) $calc($gettok(%eleccion,2,32) + 1)
inc %num.votaciones 1
; Guarda log.
write -l $+ $calc($lines(votoslog.ini) +1) votoslog.ini $fulldate --- $address($nick,0) --- $nick vota a $2
; Te marca con un 1 como ya votado
write -l $+ %linea ciudadanos.ini $gettok($read -l $+ %linea ciudadanos.ini,1-6,58) $+ :1: $+ $gettok($read -l $+ %linea ciudadanos.ini,8-10,58) $+ :
; Envia confirmacion correcta de voto
.timerVOT 1 1 msg $nick 2,0 Has votado a $2 $+ . Gracias
goto final
}
; Si hace el bucle mas veces del numero de votos que hay
if (%num.elecciones == %s) {
; La eleccion obviamente no existe
.timerCBB 1 1 msg $nick 2,0 La eleccion no existe.
goto final
}
; Semilla que genera el bucle
goto s.re
}
; Cuando tu valor es 1 osea ya has votado
.timerWER 1 1 msg $nick 2,0Ya has votado una vez :)
; Fin
goto final
}
}