Rebot: Interfaz (API) para módulos

Esta es la documentación de interés para los que quieran desarrollar nuevos módulos para Rebot.

Funciones que debe proporcionar un módulo de comunicación:

texto_inicial()

Debe devolver una cadena de texto con un mensaje inicial que se mostrará del módulo.
Ej.: 'Módulo de comunicación IRC versión 0.10 (beta) para rebot'

texto_ayuda()

Debe devolver una cadena de texto con la ayuda de los comandos o instrucciones propias del módulo que será mostrada justo después de la ayuda genérica de rebot en su comando 'ayuda'.

configurar()

Función llamada desde rebot antes de conectar, ahi deben colocarse las inicializaciones y captura de configuración del módulo.

conectar()

Función llamada justo después de configurar(), debe iniciar la conexión y contener el bucle principal.

enviar_mensaje(modulo,texto,donde)

Envía un texto. Parámetros: modulo es el nombre del propio modulo, texto es el texto para enviar, donde es el lugar donde debe enviarse el texto (depende de cada protocolo, p. ej. canal o nick en el irc) este parámetro nunca será generado por rebot, proviene de la llamada a tratar_texto() (explicada más abajo) que hace el propio módulo.

comando(modulo,donde,comando)

Se llama desde el parser de rebot cuando un comando no es reconocido, asi se da opción al módulo de comunicación de implementar sus propios comandos específicos para su protocolo (p. ej. en irc se implementa el comando canal). Parámetros: modulo es el nombre del propio modulo, "donde" es el lugar donde debe enviarse el texto (depende de cada protocolo, p. ej. canal o nick en el irc) este parámetro nunca será generado por rebot, proviene normalmente de la llamada a tratar_texto() (explicada más abajo) que hace el propio modulo, comando es un vector que contiene las palabras del comando no reconocido. La función debe devolver 1 (verdadero) si el comando es correcto o 0 (falso) si no puede reconocer el comando.

Para implementaciones de referencia ver los fuentes de cualquiera de los módulos de comunicación en el directorio modules/com.

Funciones que proporciona rebot y que pueden o deben ser usadas por un módulo:

main::tratar_texto(texto,donde)

Cuando se ha obtenido el texto del usuario, este debe ser pasado a rebot con esta función para ser parseado. Parámetros: texto es la cadena de texto, donde es opcionalmente el "lugar" desde donde se está enviando el texto y adonde se debería devolver una respuesta, ese "lugar" puede ser cualquier entidad como por ejemplo un usuario (identificado por su nick), un canal o un salón de charla. En modo multijugador será un usuario jugador y se deberá dejar vacío en caso de que el texto vaya dirigido a un medio público, por ejemplo un canal que puedan leer todos los usuarios jugadores.

main::modo(modo,donde)

Cambia el modo de funcionamiento de Rebot, que puede ser 'comando' o 'juego', si no se especifica el modo simplemente lo consulta y lo envía por red, donde es el lugar desde donde se está enviando el texto (depende de cada protocolo, p. ej. canal o nick en el irc).

Funciones que debe implementar un módulo multijugador

init()

Se llama desde el núcleo al pasar a modo multijugador, debe contener rutinas de inicialización.

close()

Se llama desde el núcleo al dejar el modo multijugador, debe contener rutinas de finalización.

init_adv(texto)

Se llama desde el rebot justo después de lanzar el intérprete, texto es el texto de inicialización del intérprete/aventura si lo hay (suele contener la identificación del intérprete o aventura, versión, etc., incluso información interna del propio formato de protocolo multijugador, esto es dependiente de cada protocolo).
Puede devolver una cadena que se le pasará al intérprete/aventura (normalmente comandos de inicialización para este, o bien para el protocolo multijugador).

close_adv

Se llama cuando ha acabado la ejecución del intérprete o aventura.

filtro_in(texto,usuario)

Se llama cada vez que hay un texto proveniente del jugador (usuario), debe aplicar las modificaciones necesarias para convertir la información de usuario y texto en el formato del protocolo multijugador que esté implementando y que debe entender la propia aventura para gestionarlo.

filtro_out(texto,texto_publico)

Se llama cada vez que la aventura devuelve un texto, debe aplicar las modificaciones necesarias para convertir la información devuelta por la aventura en texto en el formato multijugador a una estructura de datos entendible por el núcleo de rebot que le deberá devolver, la estructura es la siguiente:

texto_publico es una parámetro por referencia que deberá contener el texto que debe pasarse al canal público en el que estén todos los jugadores (y así dicho texto será visto por todos los jugadores).

Deberá también devolver un array asociativo con clave el identificador de usuario conteniendo el texto que va a ese usuario, así con todos los usuarios involucrados, ejemplo:

$array_multi{'usuario1'}='No puedes hacer eso.';
$array_multi{'usuario2'}='Tampoco puedes hacer eso.';

Funciones que debe proporcionar un módulo de log:

init(arg)

Inicializa el módulo de log, llamada desde el núcleo de rebot, se le pasará un argumento (arg) que podrá ser por ejemplo un fichero sobre el que volcar el log en el caso del módulo de logs de fichero actual.

eslog(texto,prioridad)

Escribe una linea de texto (pasada como parámetro) al log, prioridad es un número entero que especifica la importancia del mensaje de log (1 para menor importancia, 5 para mayor importancia). Será llamada desde el núcleo de rebot, y también puede ser llamada por los módulos de comunicación para volcar sus propios mensajes, en este caso la llamada será en la forma ${main::log}->eslog(texto,prioridad).

end()

Se llama desde el núcleo de rebot al finalizar la ejecución del bot.

Otras funciones de apoyo

functions::textwrap(texto,anchura)

Corta el texto proporcionado en la cadena texto, en líneas con el entero anchura como longitud máxima, manteniendo enteras las palabras (corta sólo donde haya un espacio).

Para otras funciones auxiliares ver el fichero modules/functions.pm.


Página principal de Rebot


Ultima actualización: 2011-06-25