• Publicidad

[IRC]Bot que responda

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

[IRC]Bot que responda

Notapor yoya5682 » 2009-12-09 14:22 @640

Bueno, quisiera saber un módulo completo que me ayude a hacer lo siguiente:

* Entrar al irc, claro.
* Mandar un mensaje a un usuario que entre, p.ej.: Bienvenido usuario 'x'.

Quisiera poder crearle funciones al Bot, y que me responda, p.ej.:
* Una función que sume, que podría llamarla así: !suma 1+2 Y él me respondería y me daría el resultado; claro, estaré, pasándoles los comandos por el irc, en este caso fue !suma.

* También para modificarlo que me responda solo a mi los comandos y no a cualquiera.

PD: Los comandos los mandaré por el irc que ya estarían programados; y acepto sugerencias.
Última edición por explorer el 2009-12-09 14:39 @652, editado 1 vez en total
Razón: Ortografía
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Publicidad

Re: [IRC]Bot que responda

Notapor explorer » 2009-12-09 15:23 @683

Bienvenido a los foros de Perl en Español, yoya5682.

No eres el único ni el primero que ha sacado el tema de los Bots para IRC.

De momento, echa un vistazo al último comentario sobre el asunto.

También puedes mirar un desarrollo completo de un IRC escrito en Perl, hecho por el usuario MidNight (y unos mensajes más abajo, el del usuario ubuntu).

También el usuario kamikaze mandó una cuestión referente a POE::Component::IRC, que es la forma moderna de controlar todo lo relacionado con IRC.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: [IRC]Bot que responda

Notapor yoya5682 » 2009-12-09 16:57 @748

Oka, vamos al paso creando el irc bot. Bueno, aquí ya tengo este pedazo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use POE::Component::IRC;
  2.  
  3. #Escribimos el nombre del bot Y la direccion del irc
  4. $nick = 'Yoya-Bot';
  5. $serve = 'irc.perl.org';
  6. $ircname = 'ircnode.com';
  7.  
  8. #Canales
  9. my $irc = POE::Component::IRC->spawn(
  10.     nick => $nick,
  11.     ircname => $ircname,
  12.     server => $server,
  13.  ) || die "Coneccion fallida";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema es que no sé si se conecta y tampoco sé cómo le haría para conectarme a un canal luego.
Última edición por explorer el 2009-12-09 19:29 @854, editado 1 vez en total
Razón: Ortografía
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Re: [IRC]Bot que responda

Notapor explorer » 2009-12-09 19:33 @856

¡Uuuyyyy!... así no se hacen las cosas, con POE... :)

Para programar en POE, hay que entender unos cuantos conceptos, y no son nada triviales. Y no se aprenden en una tarde (quizás en tres).

Solo tienes que mirar la sinopsis del módulo POE::Component::IRC para ver un ejemplo completo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: [IRC]Bot que responda

Notapor yoya5682 » 2009-12-10 16:00 @708

Oka, he estado viendo algunos irc bot y encontre este, lo he modificado y cortado hasta la parte que entiendo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $servidor = "irc.com";
  2. $puerto = "6667";
  3. $nick = "Lex";
  4. $admin = "Yoya";
  5. $lex = "Lex";
  6. $canales = ":#canal";
  7. $conectado = 0;
  8. $comandos = "No hay todavia";
  9. ###############
  10.  
  11. use IO::Socket;
  12.  
  13. $socket = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$servidor", PeerPort => "$puerto") || print "Imposible conectar.\n";
  14.  
  15. &IRCSend ("NICK $lex");
  16. &IRCSend ("USER Lex-Bot es tu amigo");
  17.  
  18. while($conexion=<$socket>)
  19. {
  20. print $conexion;
  21.  
  22. if ($conexion=~/PING :/)
  23. {
  24.         &IRCSend ("PONG $'");
  25.         $conectado = 1;
  26. }
  27.  
  28. if ($conectado == 1)
  29. {
  30.         ######### Entrar a canales #########
  31.         if ($conexion=~/001/)
  32.         {
  33.                 @canaless = split(/:/ , $canales);
  34.                 for($i=0;$i<@canaless;$i++)
  35.                 {
  36.                 &JOIN("$canaless[$i]");
  37.                 }
  38.         }
  39. }
  40. }
  41.  
  42.  
  43. sub IRCSend { print $socket "$_[0]\n"; }
  44. sub JOIN { IRCSend("JOIN $_[0]\n"); }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Oka, lo que quiero es tratar que me responda los comandos o parámetros que le envío. Espero que sepas lo que trato de decir, también al principio del post lo he dicho.
Última edición por yoya5682 el 2009-12-13 21:47 @949, editado 2 veces en total
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Re: [IRC]Bot que responda

Notapor explorer » 2009-12-10 16:09 @714

¿Ese código lo has hecho tu?

Se parece mucho a este, que está más completo. Te faltan muchas cosas ahí.

También se comenta aquí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: [IRC]Bot que responda

Notapor yoya5682 » 2009-12-10 16:21 @723

Solo miré para que pueda entrar al irc, luego lo demás quiero ir haciéndolo yo mismo.
Última edición por explorer el 2009-12-10 17:33 @772, editado 1 vez en total
Razón: Tildes
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Re: [IRC]Bot que responda

Notapor yoya5682 » 2009-12-10 16:45 @740

Bueno, estoy tratando de hacer que me responda pero me da problemas al ejecutar el script.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #Modulos
  2. use IO::Socket;
  3.  
  4. #Datos principales
  5. $serv = 'irc';
  6. $canal = '#canal';
  7. $port = '6667';
  8.  
  9. #Datos sobre el bot
  10. $nick = 'Lex';
  11. $bot = 'Lex-bot';
  12. $jefe = 'Yoya';
  13.  
  14. #Creamos el socket
  15. my $sock = IO::Socket::INET->new(
  16.                 PeerAddr => "$serv",      
  17.                 PeerPort => "$port",      
  18.                 Proto    => 'tcp' ) || die "conexión fallida\n";
  19.  
  20. while(<$sock>) {
  21.    
  22.     $datos = $_;
  23.     print $datos;
  24.    
  25.     if ($datos =~ /NOTICE AUTH/ig){
  26.    
  27.     &envia("NICK $nick \n");  
  28.     &envia("USER $bot x x x x\n")
  29.    }
  30.         if ($datos =~ /^PING :/i)                
  31.         {
  32.         &envia("PONG :$'");            
  33.         }
  34.         &envia("join $canal")
  35.        #Vamos a comensar a ejecutar comandos
  36.        if ($recividos =~ m/:(.+)!(.+)@(.+)\s(.+)\s(.+)\s:(.+)\s(.+)/ig)
  37.        {
  38.        $usuario = $2;
  39.        $tipo = $4;
  40.        $donde = $5;
  41.        $comando = $6;
  42.         }
  43.        
  44. }
  45. sub envia
  46. {print $sock "$_[0]\n";
  47. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Re: [IRC]Bot que responda

Notapor explorer » 2009-12-10 18:07 @796

A ver... lo que no puedes es publicar todo el código que encuentras por Internet y probar a ver si funciona. Tampoco lo que debes hacer es ir variando de código, porque entonces no resolvemos ninguno. Y lo tercero: date cuenta que estás en el foro Intermedio, así que eso implica que no vas a recibir respuestas tan claras como quisieras.

Una respuesta típica de este foro sería: en el enlace que te he puesto antes está el código COMPLETO de un bot para IRC (mensaje del día 8 de julio de 2006, y otros dos más a continuación). Así que solo te queda bajarlo, cambiar los datos de conexión al IRC en que quieres probar y ejecutarlo y ver si se conecta. Y luego, modificar el sitio del programa donde responde a los comandos del administrador. Y si salen errores, los publicas y te ayudamos.

Yo acabo de hacer eso mismo: me lo he bajado y lo estoy arreglando (para actualizarlo al Perl del 2009) y luego lo pruebo, pero es casi seguro que no tenga que hacer ningún cambio.

Tu puedes hacer lo mismo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: [IRC]Bot que responda

Notapor yoya5682 » 2009-12-10 18:27 @810

Este último código que he posteado, fui yo que lo hice a base del tutorial que me pasaste al principio del post, el bot se me conecta al IRC y todo y se queda, no hay ningún problema con esa parte, ahora el problema es que al parecer no me identifica los comandos y ese es mi problema.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #Modulos
  2. use IO::Socket;
  3.  
  4. #Datos principales
  5. $serv = 'ir';
  6. $canal = '#canal';
  7. $port = '6667';
  8.  
  9. #Datos sobre el bot
  10. $nick = 'Lex';
  11. $bot = 'Lex-bot';
  12. $jefe = 'Yoya';
  13. $comandos = 'En este momento estan disponible los comandos: %coment.';
  14. #Creamos el socket
  15. my $sock = IO::Socket::INET->new(
  16.                 PeerAddr => "$serv",      
  17.                 PeerPort => "$port",      
  18.                 Proto    => 'tcp' ) || die "conexión fallida\n";
  19.  
  20. while(<$sock>) {
  21.    
  22.     $datos = $_;
  23.     print $datos;
  24.    
  25.     if ($datos =~ /NOTICE AUTH/ig){
  26.    
  27.     &envia("NICK $nick \n");  
  28.     &envia("USER $bot x x x x\n")
  29.    }
  30.         if ($datos =~ /^PING :/i)                
  31.         {
  32.         &envia("PONG :$'");            
  33.         }
  34.         &envia("join $canal");
  35.  
  36.         #Comensamos a crear las funciones
  37.      
  38.         if ($datos =~ m/^:(\S*)!(\S*)@(\S*)\s(\S*)\s(\S*)\s:(\S*)\s(.+)\s(.+)/ig)
  39.         {
  40.          #Damos valores ah algunas variables  
  41.          $usuario = $2; #Tengo el usuario registrado y solo reconocera el nick registrado
  42.          $tipo = $4;
  43.          $donde = $5;
  44.          $comando = $6;
  45.          $text = $7;
  46.          #Leiendo canal y reconociendo comandos del jefe
  47.          if ($jefe eq $usuario){
  48.          
  49.          if($comandos eq "#help"){&envia($comandos);}
  50.  
  51.  
  52.      }  
  53.  }
  54.        
  55. }
  56. sub envia
  57. {print $sock "$_[0]\n";
  58. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Este es el código que tengo ahora mismo hecho y redacto que se conecta al IRC y todo y se mantiene, el problema es que no me identifica el comando correctamente.
yoya5682
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2009-12-09 14:13 @634

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados