]> git.donarmstrong.com Git - infobot.git/commitdiff
join chan mangling for multiple nicks
authortimriker <timriker@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 20 Dec 2003 22:31:22 +0000 (22:31 +0000)
committertimriker <timriker@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 20 Dec 2003 22:31:22 +0000 (22:31 +0000)
git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@909 c11ca15a-4712-0410-83d8-924469b57eb5

src/IRC/Irc.pl
src/IRC/IrcHooks.pl
src/IRC/Schedulers.pl
src/UserExtra.pl
src/core.pl

index 7c2fa1a1395887580f97e9adb84abb088fb1fbda..7b6cc5add48340583f59b62d3221275a6eebdd49 100644 (file)
@@ -15,7 +15,7 @@ use vars qw($irc $nickserv $ident $conn $msgType $who $talkchannel
 use vars qw($notcount $nottime $notsize $msgcount $msgtime $msgsize
                $pubcount $pubtime $pubsize);
 use vars qw($b_blue $ob);
-use vars qw(@joinchan @ircServers);
+use vars qw(@ircServers);
 
 $nickserv      = 0;
 
@@ -648,23 +648,27 @@ sub invite {
 
 # Usage: &joinNextChan();
 sub joinNextChan {
-    if (scalar @joinchan) {
-       my $chan = shift @joinchan;
+    my @join = getJoinChans(1);
+    my $mynick = "UNDEFINED";
+
+    $mynick = $conn->nick() if $conn;
+    if (scalar @join) {
+       my $chan = shift @join;
        &joinchan($chan);
 
-       if (my $i = scalar @joinchan) {
-           &status("joinNextChan: $i chans to join.");
+       if (my $i = scalar @join) {
+           &status("joinNextChan: $mynick $i chans to join.");
        }
 
        return;
     }
 
-    # !scalar @joinchan:
-    my @c      = &getJoinChans();
-    if (exists $cache{joinTime} and scalar @c) {
+    if (exists $cache{joinTime}) {
        my $delta       = time() - $cache{joinTime} - 5;
        my $timestr     = &Time2String($delta);
-       my $rate        = sprintf("%.1f", $delta / @c);
+       # FIXME: @join should be @in instead (hacked to 10)
+       #my $rate       = sprintf("%.1f", $delta / @in);
+       my $rate        = sprintf("%.1f", $delta / 10);
        delete $cache{joinTime};
 
        &status("time taken to join all chans: $timestr; rate: $rate sec/join");
@@ -787,14 +791,20 @@ sub clearIRCVars {
     undef %channels;
     undef %floodjoin;
 
-    @joinchan          = &getJoinChans(1);
     $cache{joinTime}   = time();
 }
 
 sub getJoinChans {
     my($show)  = @_;
-    my @chans;
+
+    my @in;
     my @skip;
+    my @join;
+
+    # can't join any if not connected
+    return @join if (!$conn);
+
+    my $nick = $conn->nick();
 
     foreach (keys %chanconf) {
        next if ($_ eq "_default");
@@ -804,34 +814,35 @@ sub getJoinChans {
 
        if (defined $val) {
            $skip++ if ($val eq "0");
-           if (($conn) and ($val eq "1")) {
+           if ($val eq "1") {
                # convert old +autojoin to autojoin <nick>
-               $val = $conn->nick();
+               $val = $nick;
                $chanconf{$_}{autojoin} = $val;
            }
+           $skip++ if ($val ne $nick);
        } else {
            $skip++;
        }
 
        if ($skip) {
            push(@skip, $_);
-       } elsif (($conn) and ($conn->nick() eq $val)) {
-           push(@chans, $_);
        } else {
-           push(@skip, $_);
+           if (defined $channels{$_} or exists $channels{$_}) {
+               push(@in, $_);
+           } else {
+               push(@join, $_);
+           }
        }
     }
 
     my $str;
-    if (scalar @skip) {
-       $str = "channels not auto-joining: @skip (joining: @chans)";
-    } else {
-       $str = "auto-joining all chans: @chans";
-    }
+    $str .= ' in:' . join(',', sort @in) if scalar @in;
+    $str .= ' skip:' . join(',', sort @skip) if scalar @skip;
+    $str .= ' join:' . join(',', sort @join) if scalar @join;
 
-    &status("Chans: ".$str) if ($show);
+    &status("Chans: ($nick)$str") if ($show);
 
-    return sort @chans;
+    return sort @join;
 }
 
 sub closeDCC {
index ceb655bf0fb707194cb215390f9731c9c7c02900..5c6d2045bc354fb1ff5868b3b55e900d2b35f6d4 100644 (file)
@@ -196,12 +196,6 @@ sub on_endofmotd {
        &rawout("MODE $ident $param{'ircUMode'}");
     }
 
-    &status("End of motd. Now lets join some channels...");
-    if (!scalar @joinchan) {
-       &WARN("joinchan array is empty!");
-       @joinchan = &getJoinChans(1);
-    }
-
     # ok, we're free to do whatever we want now. go for it!
     $running = 1;
 
@@ -214,6 +208,7 @@ sub on_endofmotd {
        &rawout("PRIVMSG Q\@CServe.quakenet.org :AUTH $param{'Q_user'} $param{'Q_pass'}");
     }
 
+    &status("End of motd. Now lets join some channels...");
     &joinNextChan();
 }
 
@@ -562,7 +557,7 @@ sub on_join {
     return if ($netsplit);
 
     # who == bot.
-    if ($who eq $ident or $who =~ /^\Q$ident\E$/i) {
+    if ($who =~ /^\Q$ident\E$/i) {
        if (defined( my $whojoin = $cache{join}{$chan} )) {
            &msg($chan, "Okay, I'm here. (courtesy of $whojoin)");
            delete $cache{join}{$chan};
index 00dabb3889e400442e2ffd4d74e701cf9ea7d199..f32f3170dba432703cfa6e861b1775d6d1787d3a 100644 (file)
@@ -674,12 +674,9 @@ sub ircCheck {
 
     $cache{statusSafe} = 1;
 
-    my @x      = &getJoinChans();
-    my $iconf  = scalar( @x );
-    my $inow   = scalar( keys %channels );
-    if ($iconf > 2 and $inow * 2 <= $iconf) {
-       &FIXME("ircCheck: current channels ($inow) * 2 <= config channels ($iconf).");
-#      @joinchan       = @x;
+    my @join = &getJoinChans(1);
+    if (scalar @join) {
+       &FIXME('ircCheck: found channels to join! ' . join(',',@join));
        &joinNextChan();
     }
 
@@ -693,7 +690,7 @@ sub ircCheck {
            &ircloop();
            delete $cache{connect};
        } else {
-           &status("IRCTEST: possible lost in space; checking. ".
+           &status('ircCheck: possible lost in space; checking.'.
                scalar(gmtime) );
            &msg($ident, "TEST");
            $cache{connect} = time();
@@ -714,9 +711,9 @@ sub ircCheck {
     }
 
     if (grep /^\s*$/, keys %channels) {
-       &WARN("ircCheck: we have a NULL chan in hash channels? removing!");
+       &WARN('ircCheck: we have a NULL chan in hash channels? removing!');
        if (!exists $channels{''}) {
-           &DEBUG("ircCheck: this should never happen!");
+           &DEBUG('ircCheck: this should never happen!');
        }
 
        delete $channels{''};
index 7c48244c215e59ad99315cff2a5997dd59fbec88..c8ec404a33f616fec281f4354006e8483eda552a 100644 (file)
@@ -60,7 +60,7 @@ sub chaninfo {
        foreach (sort keys %channels) {
            if ( /^\s*$/ or / / ) {
                &status("chanstats: fe channels: chan == NULL.");
-               &ircCheck();
+               #&ircCheck();
                next;
            }
            next if (/^_default$/);
@@ -69,6 +69,7 @@ sub chaninfo {
            push(@array, $str);
        }
        &pSReply($reply.": ".join(', ', @array));
+       &ircCheck();
 
        ### total user count.
        foreach $chan (keys %channels) {
index ee962039ed7180e34193849d0bd87e4d2c1828a0..91b329b33f1497ef5d31aa948b58e072e1fbac88 100644 (file)
@@ -27,7 +27,7 @@ use vars qw(
 );
 
 # array.
-use vars qw(@joinchan @ircServers @wingateBad @wingateNow @wingateCache
+use vars qw(@ircServers @wingateBad @wingateNow @wingateCache
 );
 
 ### hash. MUST BE REDUCED IN SIZE!!!