From: Andreas Scherbaum Date: Mon, 9 Jul 2012 22:23:51 +0000 (+0200) Subject: - make docbot work with older versions of POE::Component::IRC X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=5af5f54926f7aadeb574c5b3ca1082f2ea535243;p=docbot.git - make docbot work with older versions of POE::Component::IRC - especially with Debian Squeeze --- diff --git a/docbot.pl b/docbot.pl index 06fd2c3..59c2602 100755 --- a/docbot.pl +++ b/docbot.pl @@ -201,6 +201,7 @@ foreach my $session (keys(%main::sessions)) { irc_ping => \&on_ping, autoping => \&do_autoping, irc_error => \&on_error, + irc_disconnected => \&on_disconnected, irc_registered => \&on_irc_registered, irc_plugin_add => \&on_irc_plugin_add, irc_raw => \&on_irc_raw, @@ -977,7 +978,7 @@ BEGIN { my $irc = $main::sessions{$session}{'session'}; # validate nickname - my $logged_in = $irc->logged_in(); + my $logged_in = $main::sessions{$session}{'logged_in'}; my $nick_name = $irc->nick_name(); if ($logged_in and $main::sessions{$session}{'past_motd'} == 1) { if ($nick_name ne $main::sessions{$session}{'nickname'}) { @@ -3347,6 +3348,8 @@ sub on_start { # enable tracing #$_[SESSION]->option(trace => 1); + $main::sessions{$session}{'logged_in'} = 0; + return; } @@ -3371,6 +3374,7 @@ sub on_connect { $main::sessions{$session}{'past_motd'} = 0; $main::sessions{$session}{'last_nick_change_attempt'} = time(); $main::sessions{$session}{'last_connect_time'} = time(); + $main::sessions{$session}{'logged_in'} = 1; # get all channels for this session from config my @channels = config_get_keys1('channels'); @@ -3751,7 +3755,7 @@ sub on_nickused { # only try to change the nickname, if the session is not logged in # this happens if the desired nick is in use during reconnect - if (!$irc->logged_in()) { + if (!$main::sessions{$session}{'logged_in'}) { # try another nickname $nick_name .= '_'; if ($nick_name =~ /^(.+?)(_+)$/) { @@ -3805,6 +3809,24 @@ sub on_error { print_msg("Reconnect session: $session", INFO); # reconnect will be handled by Component::IRC Component::IRC::Plugin::Connector } + + $main::sessions{$session}{'logged_in'} = 0; +} + + +# on_disconnected() +# +# catch any error disconnect +# +sub on_disconnected { + my ($sender, $kernel, $heap, $text) = @_[SENDER, KERNEL, HEAP, ARG0]; + + my $irc = $sender->get_heap(); + my $session = find_irc_session($irc); + + print_msg("on_disconnected(session: $session, error: \"" . $text . "\")", DEBUG); + + $main::sessions{$session}{'logged_in'} = 0; }