]> git.donarmstrong.com Git - infobot.git/blobdiff - src/IRC/Irc.pl
- Another patch from Morten Brix Pedersen <morten@wtf.dk>:
[infobot.git] / src / IRC / Irc.pl
index d6f81b6cb1b1ec31a0a2bd6b5ef80c4997dd9d14..49d0438ef576933c861ad69d40632a6ff4f812d5 100644 (file)
@@ -97,11 +97,12 @@ sub irc {
                Ircname => $param{'ircName'},
     );
     $args{'LocalAddr'} = $param{'ircHost'} if ($param{'ircHost'});
+    $args{'Password'} = $param{'ircPasswd'} if ($param{'ircPasswd'});
 
     $conn = $irc->newconn(%args);
 
     if (!defined $conn) {
-       &ERROR("irc: conn was not created!defined!!!");
+       &ERROR("internal: perl IRC connection object does not exist.");
        return 1;
     }
 
@@ -157,6 +158,7 @@ sub irc {
        $conn->add_global_handler(473, \&on_inviteonly);
        $conn->add_global_handler(474, \&on_banned);
        $conn->add_global_handler(475, \&on_badchankey);
+       $conn->add_global_handler(443, \&on_useronchan);
 
     # end of handler stuff.
 
@@ -440,6 +442,7 @@ sub joinchan {
        &status("joining $b_blue$chan$ob");
        if (!$conn->join($chan)) {
            &DEBUG("joinchan: join failed. trying connect!");
+           &clearIRCVars();
            $conn->connect();
        }
     }
@@ -652,7 +655,7 @@ sub joinNextChan {
        my $rate        = sprintf("%.1f", $delta / @c);
        delete $cache{joinTime};
 
-       &DEBUG("time taken to join all chans: $timestr; rate: $rate sec/join");
+       &status("time taken to join all chans: $timestr; rate: $rate sec/join");
     }
 
     # chanserv check: global channels, in case we missed one.
@@ -715,14 +718,25 @@ sub IsNickInAnyChan {
 
 # Usage: &validChan($chan);
 sub validChan {
+    # todo: use $c instead?
     my ($chan) = @_;
 
+    if (!defined $chan or $chan =~ /^\s*$/) {
+       return 0;
+    }
+
     if (lc $chan ne $chan) {
        &WARN("validChan: lc chan != chan. ($chan); fixing.");
        $chan =~ tr/A-Z/a-z/;
     }
 
-    if (exists $channels{$chan}) {
+    # it's possible that this check creates the hash if empty.
+    if (defined $channels{$chan} or exists $channels{$chan}) {
+       if ($chan eq "_default") {
+#          &WARN("validC: chan cannot be _default! returning 0!");
+           return 0;
+       }
+
        return 1;
     } else {
        return 0;
@@ -752,7 +766,7 @@ sub clearChanVars {
 }
 
 sub clearIRCVars {
-#    &DEBUG("clearIRCVars() called!");
+    &DEBUG("clearIRCVars() called!");
     undef %channels;
     undef %floodjoin;