]> git.donarmstrong.com Git - infobot.git/blobdiff - src/core.pl
- nice patch from Phil Edwards <pme@devphil.com>. Thanks!
[infobot.git] / src / core.pl
index 77c8f9c4fc3767d981a0d99290c6f14e5ae75532..9bcaccd07031b863cc5f7cb37b6d4cd722ac34a2 100644 (file)
@@ -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,11 +26,11 @@ 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
@@ -72,7 +72,7 @@ $notcount     = 0;
 ###
 if ( -d "CVS" ) {
     use POSIX qw(strftime);
-    $bot_release       = strftime("cvs (%Y%m%d)", localtime( (stat("CVS"))[9] ) );
+    $bot_release       = strftime("cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) );
 } else {
     $bot_release       = "1.0.10 (2001xxxx)";
 }
@@ -100,6 +100,8 @@ sub doExit {
        &status("--- Start of quit.");
        $ident ||= "blootbot";  # lame hack.
 
+       &status("Memory Usage: $memusage kB");
+
        &closePID();
        &closeStats();
        # shutdown IRC and related components.
@@ -111,8 +113,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"));
@@ -212,7 +213,7 @@ sub IsChanConf {
     # should we use IsParam() externally where needed or hack it in 
     # here just in case? fix it later.
     if (&IsParam($param)) {
-       &status("ICC: found '$param' option in main config file.");
+       &DEBUG("ICC: found '$param' option in main config file.");
        return 1;
     }
 
@@ -300,7 +301,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) {
@@ -316,9 +317,11 @@ sub getChanConf {
 sub getChanConfDefault {
     my($what, $default, $chan) = @_;
 
+    $chan      ||= "_default";
+
     if (exists $param{$what}) {
        if (!exists $cache{config}{$what}) {
-           &status("conf: backward-compat: found param{$what} ($param{$what}) instead.");
+           &status("Config ($chan): backward-compatible option: found param{$what} ($param{$what}) instead");
            $cache{config}{$what} = 1;
        }
 
@@ -328,7 +331,7 @@ sub getChanConfDefault {
     return $val if (defined $val);
 
     $param{$what}      = $default;
-    &status("conf: auto-setting param{$what} = $default");
+    &status("Config ($chan): auto-setting param{$what} = $default");
     $cache{config}{$what} = 1;
     return $default;
 }
@@ -351,7 +354,6 @@ sub findChanConf {
        foreach (keys %{ $chanconf{$c} }) {
            next unless (/^$param$/);
 
-           &DEBUG("chanconf{$c}{$_} ...");
            return $chanconf{$c}{$_};
        }
     }
@@ -374,7 +376,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 $$`;
@@ -424,11 +426,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);
@@ -485,18 +487,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();
 }
@@ -508,8 +513,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();
@@ -519,7 +526,7 @@ sub restart {
        &ircCheck();    # heh, evil!
 
        &DCCBroadcast("-HUP called.","m");
-       &shutdown();
+       &shutdown($sig);
        &loadConfig($bot_config_dir."/blootbot.config");
        &reloadAllModules() if (&IsParam("DEBUG"));
        &setup();