From 0fd9622f54b02ecf8737d6fd607c74f7b043b288 Mon Sep 17 00:00:00 2001 From: dms Date: Sun, 6 May 2001 13:42:06 +0000 Subject: [PATCH] - changed &Get*() to &get*(), &Delete*() to &del*() - do command stats counter for News - add DELAY support to sql INSERT calls. - sql REPLACE works now - use for seenFlush() - remove $sched{}{RUNNING} - anything that used timeget indirectly - fixed. Stupid of me! git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@474 c11ca15a-4712-0410-83d8-924469b57eb5 --- src/CommandStubs.pl | 2 +- src/IRC/Irc.pl | 18 +++++------ src/IRC/IrcHooks.pl | 13 ++++---- src/IRC/Schedulers.pl | 71 ++++++------------------------------------- src/Misc.pl | 2 +- src/Modules/Debian.pl | 4 +++ src/Modules/News.pl | 13 ++++---- src/UserExtra.pl | 2 +- src/db_mysql.pl | 21 ++++++++----- 9 files changed, 53 insertions(+), 93 deletions(-) diff --git a/src/CommandStubs.pl b/src/CommandStubs.pl index c31129e..e438070 100644 --- a/src/CommandStubs.pl +++ b/src/CommandStubs.pl @@ -498,7 +498,7 @@ sub seen { my $reply; ### TODO: multi channel support. may require &IsNick() to return ### all channels or something. - my @chans = &GetNickInChans($seen[0]); + my @chans = &getNickInChans($seen[0]); if (scalar @chans) { $reply = "$seen[0] is currently on"; diff --git a/src/IRC/Irc.pl b/src/IRC/Irc.pl index c650cbd..5d03222 100644 --- a/src/IRC/Irc.pl +++ b/src/IRC/Irc.pl @@ -638,8 +638,8 @@ sub joinNextChan { } } -# Usage: &GetNickInChans($nick,$chan); -sub GetNickInChans { +# Usage: &getNickInChans($nick); +sub getNickInChans { my ($nick) = @_; my @array; @@ -651,8 +651,8 @@ sub GetNickInChans { return @array; } -# Usage: &GetNicksInChan($chan); -sub GetNicksInChan { +# Usage: &getNicksInChan($chan); +sub getNicksInChan { my ($chan) = @_; my @array; @@ -707,8 +707,8 @@ sub validChan { } ### -# Usage: &DeleteUserInfo($nick,@chans); -sub DeleteUserInfo { +# Usage: &delUserInfo($nick,@chans); +sub delUserInfo { my ($nick,@chans) = @_; my ($mode,$chan); @@ -764,12 +764,12 @@ sub getJoinChans { my $str; if (scalar @skip) { - $str = "gJC: channels not auto-joining: @skip"; + $str = "channels not auto-joining: @skip (joining: @chans)"; } else { - $str = "gJC: auto-joining all chans."; + $str = "auto-joining all chans: @chans"; } - &status($str) if ($show); + &status("Chans: ".$str) if ($show); return @chans; } diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index 9b7c459..561eebb 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -540,7 +540,7 @@ sub on_kick { &status("SELF attempting to rejoin lost channel $chan"); &joinchan($chan); } else { - &DeleteUserInfo($kickee,$chan); + &delUserInfo($kickee,$chan); } } @@ -626,7 +626,7 @@ sub on_nick { } # todo: do %flood* aswell. - &DeleteUserInfo($nick, keys %channels); + &delUserInfo($nick, keys %channels); $nuh{lc $newnick} = $nuh{lc $nick}; delete $nuh{lc $nick}; @@ -727,7 +727,7 @@ sub on_part { } $chanstats{$chan}{'Part'}++; - &DeleteUserInfo($nick,$chan); + &delUserInfo($nick,$chan); &clearChanVars($chan) if ($nick eq $ident); if (!&IsNickInAnyChan($nick) and &IsChanConf("seenStats")) { delete $userstats{lc $nick}; @@ -813,7 +813,7 @@ sub on_quit { &DEBUG("on_quit: nick $nick was not found in any chan."); } - &DeleteUserInfo($nick, keys %channels); + &delUserInfo($nick, keys %channels); if (exists $nuh{lc $nick}) { delete $nuh{lc $nick}; @@ -840,9 +840,10 @@ sub on_quit { } } - &status(">>> $b_cyan$nick$ob has signed off IRC $b_red($ob$reason$b_red)$ob"); + my $chans = join(' ', &getNickInChans($nick) ); + &status(">>> $b_cyan$nick$ob has signed off IRC $b_red($ob$reason$b_red)$ob [$chans]"); if ($nick =~ /^\Q$ident\E$/) { - &DEBUG("^^^ THIS SHOULD NEVER HAPPEN."); + &ERROR("^^^ THIS SHOULD NEVER HAPPEN (10)."); } if ($nick !~ /^\Q$ident\E$/ and $nick =~ /^\Q$param{'ircNick'}\E$/i) { diff --git a/src/IRC/Schedulers.pl b/src/IRC/Schedulers.pl index f2c3566..2420895 100644 --- a/src/IRC/Schedulers.pl +++ b/src/IRC/Schedulers.pl @@ -74,7 +74,7 @@ sub ScheduleThis { my $retval = $conn->schedule($waittime, \&$codename, @args); $sched{$codename}{LABEL} = $retval; $sched{$codename}{TIME} = time()+$waittime; - $sched{$codename}{RUNNING} = 1; + $sched{$codename}{LOOP} = 1; } #### @@ -86,8 +86,6 @@ sub randomQuote { if (@_) { &ScheduleThis($interval, "randomQuote"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"randomQuote"}{RUNNING}; } my $line = &getRandomLineFromFile($bot_misc_dir. "/blootbot.randtext"); @@ -114,8 +112,6 @@ sub randomFactoid { if (@_) { &ScheduleThis($interval, "randomFactoid"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"randomFactoid"}{RUNNING}; } while (1) { @@ -146,8 +142,6 @@ sub randomFreshmeat { if (@_) { &ScheduleThis($interval, "randomFreshmeat"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"randomFreshmeat"}{RUNNING}; } my @chans = &ChanConfList("randomFreshmeat"); @@ -169,8 +163,6 @@ sub logLoop { if (@_) { &ScheduleThis(60, "logLoop"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"logLoop"}{RUNNING}; } return unless (defined fileno LOG); @@ -243,8 +235,6 @@ sub seenFlushOld { if (@_) { &ScheduleThis(1440, "seenFlushOld"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"seenFlushOld"}{RUNNING}; } # is this global-only? @@ -287,10 +277,8 @@ sub seenFlushOld { sub newsFlush { if (@_) { - &ScheduleThis(1440, "newsFlush"); + &ScheduleThis(60, "newsFlush"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"newsFlush"}{RUNNING}; } return unless (&IsChanConf("news") > 0); @@ -348,9 +336,8 @@ sub newsFlush { if ($delete or $duser) { &DEBUG("newsF: Writing news."); &News::writeNews(); + &status("NEWS deleted: $delete news entries; $duser user cache."); } - - &status("NEWS deleted: $delete news entries; $duser user cache."); } sub chanlimitCheck { @@ -359,8 +346,6 @@ sub chanlimitCheck { if (@_) { &ScheduleThis($interval, "chanlimitCheck"); return if ($_[0] eq "2"); - } else { - delete $sched{"chanlimitCheck"}{RUNNING}; } foreach $chan ( &ChanConfList("chanlimitcheck") ) { @@ -422,8 +407,6 @@ sub netsplitCheck { if (@_) { &ScheduleThis(30, "netsplitCheck"); return if ($_[0] eq "2"); - } else { - delete $sched{"netsplitCheck"}{RUNNING}; } foreach $s1 (keys %netsplitservers) { @@ -465,8 +448,6 @@ sub floodLoop { if (@_) { &ScheduleThis(60, "floodLoop"); # minutes. return if ($_[0] eq "2"); - } else { - delete $sched{"floodLoop"}{RUNNING}; } my $time = time(); @@ -493,8 +474,6 @@ sub seenFlush { my $interval = &getChanConfDefault("seenFlushInterval", 60); &ScheduleThis($interval, "seenFlush"); return if ($_[0] eq "2"); - } else { - delete $sched{"seenFlush"}{RUNNING}; } my %stats; @@ -506,8 +485,6 @@ sub seenFlush { if ($param{'DBType'} =~ /^mysql|pg|postgres/i) { foreach $nick (keys %seencache) { - if (0) { - #BROKEN# my $retval = &dbReplace("seen", "nick", $nick, ( "nick" => $seencache{$nick}{'nick'}, "time" => $seencache{$nick}{'time'}, @@ -515,13 +492,14 @@ sub seenFlush { "channel" => $seencache{$nick}{'chan'}, "message" => $seencache{$nick}{'msg'}, ) ); - &DEBUG("retval => $retval."); delete $seencache{$nick}; $flushed++; next; - } - ### OLD CODE... + + ### + ### old code. + ### my $exists = &dbGet("seen","nick", $nick, "nick"); @@ -590,8 +568,6 @@ sub leakCheck { if (@_) { &ScheduleThis(240, "leakCheck"); return if ($_[0] eq "2"); - } else { - delete $sched{"leakCheck"}{RUNNING}; } # flood. this is dealt with in floodLoop() @@ -648,8 +624,6 @@ sub ignoreCheck { if (@_) { &ScheduleThis(60, "ignoreCheck"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"ignoreCheck"}{RUNNING}; } my $time = time(); @@ -675,8 +649,6 @@ sub ircCheck { if (@_) { &ScheduleThis(60, "ircCheck"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"ircCheck"}{RUNNING}; } my @x = &getJoinChans(); @@ -748,8 +720,6 @@ sub miscCheck { if (@_) { &ScheduleThis(240, "miscCheck"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"miscCheck"}{RUNNING}; } # SHM check. @@ -803,8 +773,6 @@ sub miscCheck2 { if (@_) { &ScheduleThis(240, "miscCheck2"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"miscCheck2"}{RUNNING}; } &DEBUG("miscCheck2: Doing debian checking..."); @@ -843,8 +811,6 @@ sub shmFlush { if (@_) { &ScheduleThis(5, "shmFlush"); return if ($_[0] eq "2"); - } else { - delete $sched{"shmFlush"}{RUNNING}; } my $time; @@ -892,8 +858,6 @@ sub getNickInUse { if (@_) { &ScheduleThis(30, "getNickInUse"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"getNickInUse"}{RUNNING}; } &nick( $param{'ircNick'} ); @@ -905,8 +869,6 @@ sub uptimeLoop { if (@_) { &ScheduleThis(60, "uptimeLoop"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"uptimeLoop"}{RUNNING}; } &uptimeWriteFile(); @@ -917,8 +879,6 @@ sub slashdotLoop { if (@_) { &ScheduleThis(60, "slashdotLoop"); return if ($_[0] eq "2"); - } else { - delete $sched{"slashdotLoop"}{RUNNING}; } my @chans = &ChanConfList("slashdotAnnounce"); @@ -941,8 +901,6 @@ sub freshmeatLoop { if (@_) { &ScheduleThis(60, "freshmeatLoop"); return if ($_[0] eq "2"); - } else { - delete $sched{"freshmeatLoop"}{RUNNING}; } my @chans = &ChanConfList("freshmeatAnnounce"); @@ -964,8 +922,6 @@ sub kernelLoop { if (@_) { &ScheduleThis(240, "kernelLoop"); return if ($_[0] eq "2"); - } else { - delete $sched{"kernelLoop"}{RUNNING}; } my @chans = &ChanConfList("kernelAnnounce"); @@ -1024,8 +980,6 @@ sub wingateWriteFile { if (@_) { &ScheduleThis(60, "wingateWriteFile"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"wingateWriteFile"}{RUNNING}; } return unless (scalar @wingateCache); @@ -1058,8 +1012,6 @@ sub factoidCheck { if (@_) { &ScheduleThis(1440, "factoidCheck"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"factoidCheck"}{RUNNING}; } my @list = &searchTable("factoids", "factoid_key", "factoid_key", " #DEL#"); @@ -1100,8 +1052,6 @@ sub dccStatus { if (@_) { &ScheduleThis(10, "dccStatus"); return if ($_[0] eq "2"); # defer. - } else { - delete $sched{"dccStatus"}{RUNNING}; } my $time = strftime("%H:%M", localtime(time()) ); @@ -1191,10 +1141,9 @@ sub mkBackup { } return unless ($backup); - my $delta = time() - (stat $file)[9]; - &DEBUG("mkb: delta => $delta"); - - my $age = &Time2String($delta); + # should delta be time(file) - time(file~)? + my $delta = time() - (stat "$file~")[9]; + my $age = &Time2String($delta); ### TODO: do internal copying. &status("Backup: $file ($age)"); diff --git a/src/Misc.pl b/src/Misc.pl index c5069f8..b03bef7 100644 --- a/src/Misc.pl +++ b/src/Misc.pl @@ -90,7 +90,7 @@ sub timeget { if ($no_timehires) { # fallback. return time(); } else { # the real thing. - return gettimeofday(); + return [gettimeofday()]; } } diff --git a/src/Modules/Debian.pl b/src/Modules/Debian.pl index 75af960..e191496 100644 --- a/src/Modules/Debian.pl +++ b/src/Modules/Debian.pl @@ -302,12 +302,16 @@ sub searchContents { $pkg =~ s/\,/\037\,\037/g; # underline ','. push(@list, "(". join(', ',@sublist) .") in $pkg"); } + &::DEBUG("debian: 0"); # sort the total list from shortest to longest... @list = sort { length $a <=> length $b } @list; # show how long it took. + &::DEBUG("debian: 1"); my $delta_time = &::timedelta($start_time); + &::DEBUG("debian: 2"); &::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0); + &::DEBUG("debian: 3"); my $prefix = "Debian Search of '$query' "; if (scalar @list) { # @list. diff --git a/src/Modules/News.pl b/src/Modules/News.pl index 79324f6..8c0ff10 100644 --- a/src/Modules/News.pl +++ b/src/Modules/News.pl @@ -45,7 +45,7 @@ sub Parse { } if (!defined $chan) { - my @chans = &::GetNickInChans($::who); + my @chans = &::getNickInChans($::who); if (scalar @chans > 1) { &::notice($::who, "error: I dunno which channel you are referring to since you're on more than one. Try 'news #chan ...' instead"); @@ -139,7 +139,7 @@ sub Parse { sub readNews { my $file = "$::bot_base_dir/blootbot-news.txt"; - if (! -f $file) { + if (! -f $file or -z $file) { return; } @@ -182,13 +182,14 @@ sub readNews { } close NEWS; - &::status("News: Read $ci items for ".scalar(keys %::news) - ." chans, $cu users cache"); + my $cn = scalar(keys %::news); + &::status("News: Read $ci items for $cn chans, $cu users cache") + if ($ci or $cn or $cu); } sub writeNews { if (!scalar keys %::news and !scalar keys %::newsuser) { - &::DEBUG("wN: nothing to write."); + &::VERB("wN: nothing to write.",2); return; } @@ -656,7 +657,7 @@ sub latest { # todo: if chan = undefined, guess. if (!exists $::news{$chan}) { - &::notice($::who, "invalid chan $chan"); + &::notice($::who, "invalid chan $chan") if ($flag); return; } diff --git a/src/UserExtra.pl b/src/UserExtra.pl index 92bb195..184a3f0 100644 --- a/src/UserExtra.pl +++ b/src/UserExtra.pl @@ -33,7 +33,7 @@ use vars qw(%channels %chanstats %cmdstats); Help => 'tell', Identifier => 'allowTelling', Cmdstats => 'Tell') ); &addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', - Module => 'news', ) ); + Module => 'news', 'Cmdstats' => 'News' ) ); &addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', # Forker => "NULL", ) ); diff --git a/src/db_mysql.pl b/src/db_mysql.pl index 9bb777f..3b659b7 100644 --- a/src/db_mysql.pl +++ b/src/db_mysql.pl @@ -170,15 +170,21 @@ sub dbUpdate { ##### # Usage: &dbInsert($table, $primkey, %hash); sub dbInsert { - my ($table, $primkey, %hash) = @_; + my ($table, $primkey, %hash, $delay) = @_; my (@keys, @vals); + my $p = ""; + + if ($delay) { + &DEBUG("dbI: delay => $delay"); + $p = " DELAYED"; + } foreach (keys %hash) { push(@keys, $_); push(@vals, &dbQuote($hash{$_})); } - &dbRaw("Insert($table)", "INSERT INTO $table (".join(',',@keys). + &dbRaw("Insert($table)", "INSERT $p INTO $table (".join(',',@keys). ") VALUES (".join(',',@vals).")" ); @@ -192,14 +198,12 @@ sub dbReplace { my (@keys, @vals); foreach (keys %hash) { - &DEBUG("hash{$_} => $hash{$_}"); push(@keys, $_); push(@vals, &dbQuote($hash{$_})); } &dbRaw("Replace($table)", "REPLACE INTO $table (".join(',',@keys). - ") VALUES (".join(',',@vals).") WHERE $primkey=". - &dbQuote($primval) + ") VALUES (". join(',',@vals). ")" ); return 1; @@ -207,14 +211,15 @@ sub dbReplace { ##### # Usage: &dbSetRow($table, @values); -sub dbSetRow { - my ($table, @values) = @_; +sub dbSetRow ($@$) { + my ($table, @values, $delay) = @_; + my $p = ($delay) ? " DELAYED " : ""; foreach (@values) { $_ = &dbQuote($_); } - return &dbRaw("SetRow", "INSERT INTO $table VALUES (". + return &dbRaw("SetRow", "INSERT $p INTO $table VALUES (". join(",", @values) .")" ); } -- 2.39.5