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:
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
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:
------------------------------------------------------------------------------------------------
IMPORTANTEPARA 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