Página 1 de 1

No escribe POE::Component::IRC::Plugin::Logger

NotaPublicado: 2009-07-21 10:20 @472
por Kamikaze
Hola a todos

Estoy haciendo un bot en Perl usando POE::Component::IRC; todo perfecto por ahora; para lo que quiero hacer va de lujo.

Pero, siempre hay un pero, me estoy dando de cabezazos con la carga del plugin 'Logger', de la misma colección POE. He estado documentándome sobre la carga de los plugins, y no tengo ningún problema con otros, pero éste falla. Y en apariencia no sale ningún error. Es más, cuando no pongo una variable que necesita salta...

En fin, os posteo lo necesario para ver el código, y quizás haya por aquí alguien que se haya pegado antes.

Datos:
Perl Version: 5.10.0-19
POE Version: 6.09

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use POE qw(Component::IRC);
  6. use POE::Component::IRC::Plugin::BotTraffic;
  7. use POE::Component::IRC::Plugin::Logger;
  8.  
  9. my $nickname = 'Fulgor101';
  10. my $ircname = 'Observando';
  11. my $server = 'dune.irc-hispano.org';
  12. my $username = 'Fulgor';
  13. my @channels = ('#pruebas');
  14.  
  15. # We create a new PoCo-IRC object
  16. my $irc = POE::Component::IRC->spawn(
  17.     nick => $nickname,
  18.     ircname => $ircname,
  19.     username => $username,
  20.     server => $server,
  21. ) or die "Oh noooo! $!";
  22.  
  23. POE::Session->create(
  24.      package_states => [
  25.          main => [ qw(_default _start irc_001 irc_public irc_bot_public) ],
  26.      ],
  27.      heap => { irc => $irc },
  28. );
  29.  
  30. sub _start {
  31.      my $heap = $_[HEAP];
  32.      # retrieve our component's object from the heap where we stashed it
  33.      my $irc = $heap->{irc};
  34.      $irc->yield( register => 'all' );
  35.      $irc->yield( connect => { } );
  36.      $irc->plugin_add( 'BotTraffic', POE::Component::IRC::Plugin::BotTraffic->new() );
  37.      $irc->plugin_add('Logger', POE::Component::IRC::Plugin::Logger->new(Path =>'home/user',Private => 1,Public => 1,DCC => 1, ));
  38.      return;
  39. }
  40. .
  41. .
  42. .
  43. sub irc_bot_public {
  44.      my ($kernel, $heap) = @_[KERNEL, HEAP];
  45.      my $channel = $_[ARG0]->[0];
  46.      my $what = $_[ARG1];
  47.      print "I said '$what' on channel $channel\n";
  48.      return;
  49. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Tras lanzarlo, todo parece hacerse correctamente, el BotTraffic, realiza perfectamente su función. Y el 'Logger', no da ningún error al cargarlo.

Líneas que aparecen al lanzar el script.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. user@Box:~$ perl 3cosa.pl
  2. irc_registered:  'POE::Component::IRC=HASH(0x86873c0)'
  3. irc_plugin_add:  'BotTraffic' 'POE::Component::IRC::Plugin::BotTraffic=HASH(0x86982d8)'
  4. irc_plugin_add:  'Logger' 'POE::Component::IRC::Plugin::Logger=HASH(0x86522b8)'
  5. irc_connected:  'dune.irc-hispano.org'
  6. irc_notice:  'dune.irc-hispano.org' [IP_LOOKUP] '*** Found your hostname (CACHED!).'
  7. irc_ping:  'eMa8oAUCf6UWWOKo'
  8. Connected to dune.irc-hispano.org
  9. irc_002:  'dune.irc-hispano.org' 'Your host is dune.irc-hispano.org, running version u2.10.H.10.110' [Your host is dune.irc-hispano.org, running version u2.10.H.10.110]
  10. irc_003:  'dune.irc-hispano.org' 'This server was created lun mar 2 2009 at 13:47:21 CET' [This server was created lun mar 2 2009 at 13:47:21 CET]
  11. .
  12. .
  13. .
  14.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y he probado con distintas rutas en la variable 'path', y revisado los permisos... y nada de nada. Eso sí.. si no ponemos algo a la variable 'path', se queja y no lanza el script.

No se me ocurre nada... algo se me escapa y no sé el qué, quizás alguien vea algo más...

Un Saludo y gracias.

Re: No escribe POE::Component::IRC::Plugin::Logger

NotaPublicado: 2009-07-21 18:41 @820
por Kamikaze
¡Hola a todos!

Bueno ya di con el tema... gracias a los amigos de "perlmonks.org", andaba cerca... pero... la voz de la experiencia habló ;) . En fin, hay que hacer lo siguiente... añadir una línea en los 'use' y cambiar la forma del objeto, quedando de la siguiente forma.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use POE qw(Component::IRC);
  6. #AÑADIMOS State
  7. use POE::Component::IRC::State;
  8. use POE::Component::IRC::Plugin::BotTraffic;
  9. use POE::Component::IRC::Plugin::Logger;
  10.  
  11. my $nickname = 'Fulgor101';
  12. my $ircname = 'Observando';
  13. my $server = 'dune.irc-hispano.org';
  14. my $username = 'Fulgor';
  15. my @channels = ('#pruebas');
  16.  
  17. # We create a new PoCo-IRC object
  18. #CAMBIAREMOS ::IRC-> por ::IRC::State->
  19. my $irc = POE::Component::IRC:State->spawn(
  20.     nick => $nickname,
  21.     ircname => $ircname,
  22.     username => $username,
  23.     server => $server,
  24.     plugin_debug => 1, #Con esta linea añadida, cuando lancemos el script nos dira si falla algo.
  25. ) or die "Oh noooo! $!";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y listo... ya tendremos los LOG de los canales de nuestro Bot y todos los privados que le abran.

Espero que esto ayude a alguien más...

Un saludo y gracias por leer.

P.D Gracias, explorer, por marcar la dirección de la búsqueda.

Re: No escribe POE::Component::IRC::Plugin::Logger

NotaPublicado: 2009-08-15 17:22 @765
por bl4ckc00k1e
Pues a mí, sí, por que justo estoy aprendiendo a hacer un bot en Perl xD.

¡¡No imaginaba que fuese tan corto el código!! Claro que para agregarle funciones será otra cosa. Yo voy a intentar hacerlo por mi mismo sin copiar códigos, pero tengo una pregunta.

¿Las librerías que usas son obligatoriamente necesarias? Me harías un gran favor si me las pudieses comentar, porque lo que encuentro es en inglés y me hago un lío. ¿Y por qué puerto se conecta? ¡No lo veo por ningún lado!

Gracias de antemano.