- make docbot work with older versions of POE::Component::IRC
authorAndreas Scherbaum <andreas@scherbaum.biz>
Mon, 9 Jul 2012 22:23:51 +0000 (00:23 +0200)
committerAndreas Scherbaum <andreas@scherbaum.biz>
Mon, 9 Jul 2012 22:23:51 +0000 (00:23 +0200)
- especially with Debian Squeeze

docbot.pl

index 06fd2c38e4af4eead9d020bc6d03c40ae36359b7..59c260287b03ceeaf7a6498accbdb8f5c9c5e044 100755 (executable)
--- 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;
 }