X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fcore.pl;h=802e4c20a72da8c33dd51a4a3440f5ff4d42499d;hb=f7cae48a17d6decd0a9bd997188271daa0a885b1;hp=6866a98d9b3a950d9247cc2a75356449a194f8a4;hpb=6b83800c554c63bcc089176d9a0a8f63611e289f;p=infobot.git diff --git a/src/core.pl b/src/core.pl index 6866a98..802e4c2 100644 --- a/src/core.pl +++ b/src/core.pl @@ -7,7 +7,7 @@ use strict; -# dynamic scalar. MUST BE REDUCED IN SIZE!!! +# scalar. MUST BE REDUCED IN SIZE!!! ### TODO: reorder. use vars qw( $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir @@ -26,12 +26,12 @@ use vars qw( $running ); -# dynamic hash. +# array. use vars qw(@joinchan @ircServers @wingateBad @wingateNow @wingateCache ); -### dynamic hash. MUST BE REDUCED IN SIZE!!! -# +### hash. MUST BE REDUCED IN SIZE!!! +# use vars qw(%count %netsplit %netsplitservers %flood %dcc %orig %nuh %talkWho %seen %floodwarn %param %dbh %ircPort %topic %moduleAge %last %time %mask %file @@ -60,6 +60,14 @@ $wtime_chanfile = 0; $ucount_chanfile = 0; $running = 0; ### more variables... +# static scalar variables. +$mask{ip} = '(\d+)\.(\d+)\.(\d+)\.(\d+)'; +$mask{host} = '[\d\w\_\-\/]+\.[\.\d\w\_\-\/]+'; +$mask{chan} = '[\#\&]\S*|_default'; +my $isnick1 = 'a-zA-Z\[\]\{\}\_\`\^\|\\\\'; +my $isnick2 = '0-9\-'; +$mask{nick} = "[$isnick1]{1}[$isnick1$isnick2]*"; +$mask{nuh} = '\S*!\S*\@\S*'; $msgtime = time(); $msgsize = 0; $msgcount = 0; @@ -70,11 +78,10 @@ $nottime = 0; $notsize = 0; $notcount = 0; ### +$bot_release = "1.1.0"; if ( -d "CVS" ) { use POSIX qw(strftime); - $bot_release = strftime("cvs (%Y%m%d)", localtime( (stat("CVS"))[9] ) ); -} else { - $bot_release = "1.0.10 (2001xxxx)"; + $bot_release .= strftime(" cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) ); } $bot_version = "blootbot $bot_release -- $^O"; $noreply = "NOREPLY"; @@ -83,6 +90,14 @@ $noreply = "NOREPLY"; ### misc commands. ### +sub whatInterface { + if (!&IsParam("Interface") or $param{'Interface'} =~ /IRC/) { + return "IRC"; + } else { + return "CLI"; + } +} + sub doExit { my ($sig) = @_; @@ -100,6 +115,8 @@ sub doExit { &status("--- Start of quit."); $ident ||= "blootbot"; # lame hack. + &status("Memory Usage: $memusage KiB"); + &closePID(); &closeStats(); # shutdown IRC and related components. @@ -111,8 +128,7 @@ sub doExit { &writeUserFile(); &writeChanFile(); &uptimeWriteFile() if (&IsChanConf("uptime")); - &News::writeNews() if (&ChanConfList("news")); - &closeDB(); + &sqlCloseDB(); &closeSHM($shm); &dumpallvars() if (&IsParam("dumpvarsAtExit")); &symdumpAll() if (&IsParam("symdumpAtExit")); @@ -209,7 +225,7 @@ sub IsChanConf { return 0; } - # should we use IsParam() externally where needed or hack it in + # should we use IsParam() externally where needed or hack it in # here just in case? fix it later. if (&IsParam($param)) { &DEBUG("ICC: found '$param' option in main config file."); @@ -292,7 +308,7 @@ sub getChanConf { return 0; } - # this looks evil... + # this looks evil... if (0 and !defined $chan) { &DEBUG("gCC: ok !chan... doing _default instead."); } @@ -300,7 +316,7 @@ sub getChanConf { $c ||= $chan; $c ||= "_default"; $c = "_default" if ($c eq "*"); # fix! - my @c = grep /^$c$/i, keys %chanconf; + my @c = grep /^\Q$c\E$/i, keys %chanconf; if (@c) { if (0 and $c[0] ne $c) { @@ -320,7 +336,7 @@ sub getChanConfDefault { if (exists $param{$what}) { if (!exists $cache{config}{$what}) { - &status("conf: backward-compat: found param{$what} ($param{$what}) for $chan instead."); + &status("config ($chan): backward-compatible option: found param{$what} ($param{$what}) instead of chan option"); $cache{config}{$what} = 1; } @@ -330,7 +346,7 @@ sub getChanConfDefault { return $val if (defined $val); $param{$what} = $default; - &status("conf: $chan auto-setting param{$what} = $default"); + &status("config ($chan): auto-setting param{$what} = $default"); $cache{config}{$what} = 1; return $default; } @@ -375,7 +391,7 @@ sub showProc { close IN; } elsif ($^O eq "netbsd") { - $memusage = (stat "/proc/$$/mem")[7]/1024; + $memusage = int( (stat "/proc/$$/mem")[7]/1024 ); } elsif ($^O =~ /^(free|open)bsd$/) { my @info = split /\s+/, `/bin/ps -l -p $$`; @@ -393,13 +409,13 @@ sub showProc { if ($delta == 0) { return; } elsif ($delta > 500) { - $str = "MEM:$prefix increased by $delta kB. (total: $memusage kB)"; + $str = "MEM:$prefix increased by $delta KiB. (total: $memusage KiB)"; } elsif ($delta > 0) { - $str = "MEM:$prefix increased by $delta kB"; + $str = "MEM:$prefix increased by $delta KiB"; } else { # delta < 0. $delta = -$delta; # never knew RSS could decrease, probably Size can't? - $str = "MEM:$prefix decreased by $delta kB."; + $str = "MEM:$prefix decreased by $delta KiB."; } &status($str); @@ -425,11 +441,11 @@ sub setup { $shm = &openSHM(); &openSQLDebug() if (&IsParam("SQLDebug")); - &openDB($param{'DBName'}, $param{'SQLUser'}, $param{'SQLPass'}); + &sqlOpenDB($param{'DBName'}, $param{'DBType'}, $param{'SQLUser'}, + $param{'SQLPass'}); &checkTables(); &status("Setup: ". &countKeys("factoids") ." factoids."); - &News::readNews() if (&ChanConfList("news")); &getChanConfDefault("sendPrivateLimitLines", 3); &getChanConfDefault("sendPrivateLimitBytes", 1000); &getChanConfDefault("sendPublicLimitLines", 3); @@ -439,7 +455,7 @@ sub setup { $param{tempDir} =~ s#\~/#$ENV{HOME}/#; - &status("Initial memory usage: $memusage kB"); + &status("Initial memory usage: $memusage KiB"); &status("-------------------------------------------------------"); } @@ -475,7 +491,7 @@ sub setupConfig { sub startup { if (&IsParam("DEBUG")) { &status("enabling debug diagnostics."); - ### I thought disabling this reduced memory usage by 1000 kB. + ### I thought disabling this reduced memory usage by 1000 KiB. use diagnostics; } @@ -486,18 +502,21 @@ sub startup { } sub shutdown { + my ($sig) = @_; # reverse order of &setup(). &status("--- shutdown called."); $ident ||= "blootbot"; # hack. - # opened files must be written to on shutdown/hup/whatever - # unless they're write-only, like uptime. - &writeUserFile(); - &writeChanFile(); - &News::writeNews() if (&ChanConfList("news")); + if (!&isFileUpdated("$bot_state_dir/blootbot.users", $wtime_userfile)) { + &writeUserFile() + } + + if (!&isFileUpdated("$bot_state_dir/blootbot.chan", $wtime_chanfile)) { + &writeChanFile(); + } - &closeDB(); + &sqlCloseDB(); &closeSHM($shm); # aswell. TODO: use this in &doExit? &closeLog(); } @@ -509,8 +528,10 @@ sub restart { &status("--- $sig called."); ### crappy bug in Net::IRC? - if (!$conn->connected and time - $msgtime > 900) { - &status("reconnecting because of uncaught disconnect \@ ".scalar(localtime) ); + my $delta = time() - $msgtime; + &DEBUG("restart: dtime = $delta"); + if (!$conn->connected or time() - $msgtime > 900) { + &status("reconnecting because of uncaught disconnect \@ ".scalar(gmtime) ); ### $irc->start; &clearIRCVars(); $conn->connect(); @@ -520,7 +541,7 @@ sub restart { &ircCheck(); # heh, evil! &DCCBroadcast("-HUP called.","m"); - &shutdown(); + &shutdown($sig); &loadConfig($bot_config_dir."/blootbot.config"); &reloadAllModules() if (&IsParam("DEBUG")); &setup();