Psilon, my modular POE IRC bot, is coming along fairly well. I've run
into a bit of a snafu though. If the preset nick is in use, the bot will
just hang there in a sort of "half-connected" state, until the connection
times out, and the server gives a 443 Numeric. Theory on this below.
I'd originally tried to deal with this situation by changing the nick,
then issuing a "ghost" command to the local nickserv equivalent, but it
never triggered the nick change so nothing else happend. Now I am just
trying to reconnect with a random number (1-9999) appended to the nick,
a-la AOL. (Code Below)
This event is linked to 'on_irc_443', and it's part of it's own module,
which includes wrappers for most of the PoCo::IRC commands (thus the
$self references in the function calls. The names should be obvious.)
I suppose this might be more of a question for IRC hackers than POE
hackers, but I figure there has to be SOME crossover because the module
exists. :) The crux of the problem seems to be that the IRC server only
returns a Numeric Reply if the nick change FAILS (according to RFC 1459).
Anyone have any idea how I might work around this so I don't have to drop
and re-establish connection? If I can get that working, then I can get the
nickserv's 'ghost' command implimented.
Thanks!
-Ciro
#--------- Begin Code Snippet -----------
sub irc_433 #nickname in use
{
#use the serverhost as a session alias. Makes multi-net usage a lot easer
#to debug
my $self=shift;
my $server=shift;
my $sess=$self->{KERNEL}->alias_resolve($server);
my $heap=$sess->get_heap(); #pull the heap with our settings
my $nick=$heap->{"nick"};
#drop existing connection
$self->disconnect($server, ": $nick in use.\n");
#generate random nick
$nick = $nick . int(rand(10000)));
print "Reconnecting with nick: $nick\n"; #reconnect
$self->{KERNEL}->post(
$server,
'connect',{
Nick => $heap->{"nick"},
Server => $server,
Username => $heap->{"username"},
Ircname => $heap->{"realname"},}
);
}