Bots Conversacional

Definimos un Bot conversacional:
Es un programa informático, imitador de los comportamientos de un humano. En sitios wiki, un bot puede realizar funciones rutinarias de edición. En otros sitios, como Youtube, el bot puede responder a cuestiones sobre el propio contenido del sitio (bots conversacionales).
Para crear este bot, utilizamos el lenguaje c# el cual es compatible con la plataforma de opensimulator. Gracias a que es una plataforma libre, podemos implementarlo en nuestro entorno.

Utilizando Microsoft Visual Studio 2012 como compilador.

Compilamos código fuente escrito en c#.

descargamos librería: http://openmetaverse.org/projects/libopenmetaverse

creamos nuevo proyecto de consola.

CODIGO FUENTE

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

//using OpenMetaverse.Utilities;

namespace FirstBot
{
    class Bot
    {
        // Declaramos las variables de mysql:
        public static MySqlConnection MySqlCnn = new MySqlConnection();
        public static MySqlCommand MySqlCmd = new MySqlCommand();
        public static MySqlDataReader MySqlReader;
        public static string CadenaDeConexion;
        public static int contador = 0;
        public static int puntos = 0;
        public static GridClient gc;

        public static void Main(string[] args)
        {


            gc = new GridClient();
            gc.Settings.LOGIN_SERVER = "http://192.168.10.107:9000/";


            gc.Network.RegisterCallback(PacketType.ChatFromSimulator, ChatFromSimulatorHandler);
            bool loggedIn = gc.Network.Login("pepe", "luis", "1234", "roma", "1.0");

            if (loggedIn)
            {

                Console.WriteLine("Logged In");


            }
            else
            {
                Console.WriteLine("Failure Logging In");
            }




        } /*cierra main*/



        /*aca comienzan las funciones de mysql*/
     
        static void Conectar()
        {
            try
            {
                CadenaDeConexion = "Server=localhost;"
                                + "Port=3306;"
                                +"Database=celular;"
                                + "Uid=root;"
                                + "Password=";
                Console.WriteLine(CadenaDeConexion);
                MySqlCnn.ConnectionString = CadenaDeConexion;
                Console.WriteLine("\nConexión iniciada!\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        static void Desconectar()
        {
            // Cerramos la conexión
            MySqlCnn.Close();
            Console.WriteLine("\nConexión finalizada");
        }

        /*aca realizamos la consulta mysql*/
        /*aca realizamos la consulta mysql*/
        /*aca realizamos la consulta mysql*/

        static void Consulta(string consulta)
        {
            // Hacemos una conexión apartir del
            // string CadenaDeConexion antes asignado
            try
            {
                // Abrimos la conexión
                MySqlCnn.Open();
                // Definimos nuestro Query


                // Establecemos cuál será la conexión
                MySqlCmd.Connection = MySqlCnn;
                // Determinamos el comando [ nuestro query]
                MySqlCmd.CommandText = consulta;

                //Se le asigna la consulta
                // Asignamos al objeto MySqlReader la ejecución del comando
                // En otras palabras, el resultado de la consulta [query]
                // Se guardará en el MySqlReader
                MySqlReader = MySqlCmd.ExecuteReader();
                // Mostramos los resultados mientras haya datos para leer:
                while (MySqlReader.Read())
                {
                    // Empleamos el reader.FieldCount para obtener la cantidad
                    // de campos de la tabla solicitada
                    for (int i = 0; i < MySqlReader.FieldCount; i++)
                    {
                        // Reportamos mediente un Console.Write, de tal forma
                        // que recorra toda la fila, dejando un espacio:
                        Console.Write(MySqlReader[i] + " ");
                        gc.Self.Chat(MySqlReader[i] + " ", 0, ChatType.Normal);

                    }
                    Console.WriteLine("");
                }
                Desconectar();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        /*aca terminan las funciones mysql*/
        /*aca terminan las funciones mysql*/
        /*aca terminan las funciones mysql*/




        private static void ChatFromSimulatorHandler(object
        sender, PacketReceivedEventArgs e)
        {


            Conectar();

            Console.WriteLine("I heard something");
            ChatFromSimulatorPacket p =
            (ChatFromSimulatorPacket)e.Packet;
            Console.WriteLine("From: " +
            Utils.BytesToString(p.ChatData.FromName));

            string message = Utils.BytesToString(p.ChatData.Message);
            Console.WriteLine(message);

            if (message == "date")
            {
                gc.Self.Chat("It is now " +DateTime.Now, 0, ChatType.Normal);
            }

           
            if (message == "hola"){

                Consulta("INSERT INTO `celular`.`calificacion` (`id`, `nombre`, `puntaje`) VALUES (NULL, '" + Utils.BytesToString(p.ChatData.FromName) + "', '' );");
                gc.Self.Chat("hola sr.."+Utils.BytesToString(p.ChatData.FromName)+"Comenzar cuestionario? (S o N)", 0, ChatType.Normal);
                

            }
            if (message == "S")
            {
                gc.Self.Chat("Bien como estas ?(bien)(mal), responda siempre lo que esta dentro del corchete ()", 0, ChatType.Normal);
                contador = contador + 10;
            }
            if (message == "bien")
            {
                Consulta("INSERT INTO `celular`.`preguntas` (`id`, `pregunta`, `respuesta`, `usuario`) VALUES (NULL, 'bien como estas ?' , '" + message + "' , '" + Utils.BytesToString(p.ChatData.FromName) + "' );");
                gc.Self.Chat("hola sr.." + Utils.BytesToString(p.ChatData.FromName) + " me alegro que se encuentre bien, cual es tu nivel de satisfaccion en roma?: malo,bueno,exelente", 0, ChatType.Normal);
            }
            if (message == "bueno")
            {
                gc.Self.Chat("Nos podrias decir por que?, estas (conforme) trabajando aqui? o principalmente te gusta el (entorno) de trabajo?", 0, ChatType.Normal);
                contador = contador + 10;
            }
            if (message == "malo")
            {
                gc.Self.Chat("Nos podrias decir por que?, estas (incomodo) trabajando aqui?, ¿ crees que tienes (bajo sueldo)?", 0, ChatType.Normal);
                contador = contador + 10;
            }
            if (message == "conforme")
            {
                Consulta("INSERT INTO `celular`.`preguntas` (`id`, `pregunta`, `respuesta`, `usuario`) VALUES (NULL, 'como te sientes trabajando en roma?' , '" + message + "' , '" + Utils.BytesToString(p.ChatData.FromName) + "' );");
                gc.Self.Chat("Bien, Sr.." + Utils.BytesToString(p.ChatData.FromName) + " Usted ha recibido 8 puntos, diga (cargar) puntos, gracias :) ", 0, ChatType.Normal);
                puntos = 8;
             
            }
            if (message == "bajo sueldo")
            {
                Consulta("INSERT INTO `celular`.`preguntas` (`id`, `pregunta`, `respuesta`, `usuario`) VALUES (NULL, 'Por que es malo tu nivel de satisfaccion?' , '" + message + "' , '" + Utils.BytesToString(p.ChatData.FromName) + "' );");
                gc.Self.Chat("Bien, Sr.." + Utils.BytesToString(p.ChatData.FromName) + " Usted ha recibido 8 puntos, diga (cargar) puntos, gracias :) ", 0, ChatType.Normal);
                puntos = 8;

            }

            if (message == "entorno")
            {
                Consulta("INSERT INTO `celular`.`preguntas` (`id`, `pregunta`, `respuesta`, `usuario`) VALUES (NULL, 'como te sientes trabajando en roma?' , '" + message + "' , '" + Utils.BytesToString(p.ChatData.FromName) + "' );");
                gc.Self.Chat("Bien, Sr.." + Utils.BytesToString(p.ChatData.FromName) + " Usted ha recibido puntos de premio, diga (cargar) puntos, gracias :) ", 0, ChatType.Normal);
                puntos = 6;

            }
          
            if (message == "cargar")
            {
                Consulta("INSERT INTO `celular`.`calificacion` (`id`, `nombre`, `puntaje`) VALUES (NULL, '" + Utils.BytesToString(p.ChatData.FromName) + "' , '" + puntos + "');");
                gc.Self.Chat("Felicitaciones, ah recibido " + puntos + " puntos ;), desea (listar) sus puntos? ", 0, ChatType.Normal);

            } if (message == "listar")
            {
                Consulta("SELECT `puntaje` FROM `calificacion` WHERE `nombre`= 'ricardo roma' AND `puntaje`!=0");
                gc.Self.Chat("Suerte!!!!:) ", 0, ChatType.Normal);

            }
            
            
        }
       

} //cierra class
}//cierra proyect

En la siguiente imagen vemos como el Bots Conversacional del codigo anterior responde a una seria de preguntas. Según la respuesta del usuario, serán los puntos que va obteniendo.



También podemos listar los puntos que ha ganado en las distintas iteraciones:




------------------------------------------------------------------------------------------------
IMPORTANTE

PARA QUE FUNCIONEN LOS DISTINTOS CODIGOS, ES NECESARIO SELECCIONAR CORRECTAMENTE LA VERSION DE LA LIBRERIA OPENMETAVERSE. EN NUESTRO CASO UTILIZAMOS LA VERSION: 0.9.1.29841

CONECTOR MYSQL PARA VISUAL STUDIO 2012

http://dev.mysql.com/downloads/connector/net/
luego agregamos la referencia en Visual Studio



No hay comentarios:

Publicar un comentario