[Perl] Dove sono gli altri nick?

gambry gambrys@gmail.com
Ven 20 Gen 2006 20:10:18 CET


Joe Oblivian ha scritto:
[CUT]
> manca
> 
> $self->join("#palug");

Ho finito la mia odissea...

L'aggiunta del join(), mi ha distrutto perche' ora i nick erano 
esattamente il doppio di quelli presenti nel chan!!
In pratica venivano ripetuti, come se ci fossero due eventi names.

Ho cercato, sia ieri che oggi, la documentazione di Net::IRC, ma niente.

Ho letto in giro (tipo qui http://wholok.com/irc/ ) che il modulo non e' 
piu' aggiornato... ma quando mai se e' aggiornato al 30 Aprile 2004?
Comunque, ho trovato la soluzione seguendo questo bellissimo consiglio 
nella documentazione ufficiale:

METHOD DESCRIPTIONS:

This section is under construction, but hopefully will be finally 
written up by the next release. Please see the irctest script and the 
source for details about this module.

(Cazzo che culo che ho con le documentazioni in perl :p)

Quindi mi sono andato a guardare il codice di irctest, e ho visto che 
gestisce l'evento 353, e cioe' la risposta alla chiamata names, non 
facendo nessuna chiamata names()!!!

Dopo un'attenta analisi con i miei collaboratori, siamo tutti concordi 
nel dire che l'evento 353 lo da anche il join normale, insieme al topic 
e a non so che altro.

Quindi il codice finale risulta:

#!/usr/bin/perl -w
use strict;
use Net::IRC;
use Data::Dumper;
use vars qw($find_user $status $output);
my $irc_server          = 'calvino.freenode.net';
my $irc_port            = 6667;
my $irc_nick            = 'xambry';
my $channel             = '#palug';
my $irc_name            = 'Gambry, r u there?';
my $output              = './suca.txt';
#$status                = {timestamp => scalar(localtime)};
my %event_lookup        = (
				'endofmotd' => 376,
				'names_reply' => 353,
			);
my $irc			= new Net::IRC;
my $conn                = $irc->newconn(
				Nick    => $irc_nick,
				Server  => $irc_server,
				Port    => $irc_port,
				Ircname => $irc_name);

$conn->add_global_handler($event_lookup{endofmotd}, \&on_connect);
$conn->add_handler($event_lookup{names_reply},\&on_names_reply);
$irc->start;
sub on_connect {
         my $self = shift;
         $self->join($channel);
}

sub on_names_reply {
         my $self = shift;
         my $event = shift;
         my @nicks = split(/ /,$event->{args}->[3]);
         print Data::Dumper::Dumper(@nicks);
         $self->quit;
}


Maggiori informazioni sulla lista palermo