Piepan – Crear bots de mumble en 5 minutos usando Lua

Piepan está escrito en go pero eso nos da igual. La finalidad del programa para línea de comandos “piepan” es la de conectar a un servidor mumble ejecutando un script que programemos en Lua. Es por tanto lo que hagamos en Lua lo que determinará que hace el bot (un trivial, graba conversaciones del chat, graba el audio, transcribe el texto y lo sintetiza para reproducirlo como voz, …).

Es muy sencillo comenzar a hacer un bot. Básicamente necesitamos compilar piepan y luego ejecutarlo con algún ejemplo que he preparado (o uno que te programes tú)

Instalar mumble-server en un servidor o en nuestra maquina en local (en debian 9, en otros sistemas pues cambiará un poco la cosa):

# apt-get install mumble-server
# dpkg-reconfigure mumble-server 

Compilar piepan en la maquina en el que tenemos mumble server instalado:

# apt-get install -y git libopus-dev wget software-properties-common pkg-config gcc libav-tools golang
$ export GOPATH=$(mktemp -d)
$ echo $GOPATH
$ go get -u layeh.com/piepan
$ go build -o piepan $GOPATH/src/layeh.com/piepan/cmd/piepan/main.go

Tendremos ya un archivo llamado piepan. Para conectarlo al server mumble podemos hacerlo así:

$ ./piepan -ffmpeg=avconv -insecure=true -username=bot

No realizará nada pero estará conectado. La sintaxis es esta: ./piepan [options] [script files]
Eso quiere decir que hemos de pasarle un argumento más que es el script escrito en Lua que queremos que haga cosas.

Por ejemplo creamos un archivo llamado espiandochat.lua con este contenido:

function mostrarFechaHoraInicio()
        fecha = os.date("%d/%m/%Y")
        hora = os.date("%H:%M:%S")
        print("Conectado el " .. fecha .. " a las " .. hora)
end

piepan.On("connect", function()
        mostrarFechaHoraInicio()
end)

piepan.On("message", function(m)
        -- Guardamos lo que se diga en el chat en el archivo chat.log
        file = io.open("chat.log", "a")
        file:write(fecha .. " " .. hora .. " - " .. m.Message .. "\n")
        -- Descomentando la siguiente línea se realizará un eco en la sala del mensaje
        --m.Sender:Send(m.Message)
        -- Descomentando la siguiente línea se imprimirá en el terminal el mensaje
        --print(m.Message)
end)

Y lo ejecutamos así:

$ ./piepan -ffmpeg=avconv -insecure=true -username=bot espiandochat.lua 

Lo cierto es que se tendría que ejecutar la funcion de la hora y fecha abajo para que saliese cada vez actualizada, pero se me ha olvidado. Como ejemplo vale igual.

Ese ejemplo permite grabar conversaciones de chat en mumble.

Más información aquí: https://github.com/layeh/piepan

Es un ejemplo para ver la potencia. Con ese ejemplo vemos que podemos almacenar lo que se dice en un chat pero también podemos mandar algo si evaluamos con un if lo que alguien dice. Si por ejemplo alguien dice” hola” comprobaríamos si m.Message es == “hola” y entonces hacemos lo que queramos. Por ejemplo responder con un saludo aleatorio en plan: buenos días o buenas noches (comprobando la hora).

Algo más avanzado es poder responder hablando con conversaciones en wav pregrabadas. Si dice hola le contestamos con saludo.wav que hablará con una voz que podemos sacar de cualquier película y dirá “hola amigo”.

Como se puede ver esto da mucha vida y permite hacer cosas muy molonas.

Saludos cordiales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *