From: timriker Date: Sat, 20 Dec 2003 22:31:22 +0000 (+0000) Subject: join chan mangling for multiple nicks X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=75050f42a88aa9341f07786deb4226251e1ac121;p=infobot.git join chan mangling for multiple nicks git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@909 c11ca15a-4712-0410-83d8-924469b57eb5 --- diff --git a/src/IRC/Irc.pl b/src/IRC/Irc.pl index 7c2fa1a..7b6cc5a 100644 --- a/src/IRC/Irc.pl +++ b/src/IRC/Irc.pl @@ -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 - $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 { diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index ceb655b..5c6d204 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -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}; diff --git a/src/IRC/Schedulers.pl b/src/IRC/Schedulers.pl index 00dabb3..f32f317 100644 --- a/src/IRC/Schedulers.pl +++ b/src/IRC/Schedulers.pl @@ -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{''}; diff --git a/src/UserExtra.pl b/src/UserExtra.pl index 7c48244..c8ec404 100644 --- a/src/UserExtra.pl +++ b/src/UserExtra.pl @@ -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) { diff --git a/src/core.pl b/src/core.pl index ee96203..91b329b 100644 --- a/src/core.pl +++ b/src/core.pl @@ -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!!!