]> git.donarmstrong.com Git - infobot.git/blobdiff - src/core.pl
* Add vim formatting comments ( # vim:ts=4:sw=4:expandtab:tw=80 )
[infobot.git] / src / core.pl
index 909ff37a1e78e5be732a747009a2e5604ed5ff3e..936f31cc784ec8aab6fb43951b23f72a67c7cdac 100644 (file)
@@ -47,8 +47,8 @@ $SIG{'__WARN__'} = 'doWarn';
 
 # initialize variables.
 $last{buflen}  = 0;
-$last{say}     = "";
-$last{msg}     = "";
+$last{say}     = '';
+$last{msg}     = '';
 $userHandle    = "_default";
 $wingaterun    = time();
 $firsttime     = 1;
@@ -78,23 +78,22 @@ $nottime    = 0;
 $notsize       = 0;
 $notcount      = 0;
 ###
-$bot_release   = "1.3.1";
-if ( -d "CVS" ) {
-    use POSIX qw(strftime);
-    $bot_release       .= strftime(" cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) );
-}
-$bot_version   = "blootbot $bot_release -- $^O";
-$noreply       = "NOREPLY";
+open(VERSION, '<VERSION');
+$bot_release   = <VERSION> || "(unknown version)";
+chomp($bot_release);
+close(VERSION);
+$bot_version   = "infobot $bot_release -- $^O";
+$noreply       = 'NOREPLY';
 
 ##########
 ### misc commands.
 ###
 
 sub whatInterface {
-    if (!&IsParam("Interface") or $param{'Interface'} =~ /IRC/) {
-       return "IRC";
+    if (!&IsParam('Interface') or $param{'Interface'} =~ /IRC/) {
+       return 'IRC';
     } else {
-       return "CLI";
+       return 'CLI';
     }
 }
 
@@ -113,7 +112,7 @@ sub doExit {
        &status("parent caught SIG$sig (pid $$).") if (defined $sig);
 
        &status("--- Start of quit.");
-       $ident ||= "blootbot";  # lame hack.
+       $ident ||= 'infobot';   # lame hack.
 
        &status("Memory Usage: $memusage KiB");
 
@@ -127,17 +126,17 @@ sub doExit {
        }
        &writeUserFile();
        &writeChanFile();
-       &uptimeWriteFile()      if (&IsChanConf("uptime"));
+       &uptimeWriteFile()      if (&IsParam('Uptime'));
        &sqlCloseDB();
        &closeSHM($shm);
 
-       if (&IsParam("dumpvarsAtExit")) {
+       if (&IsParam('dumpvarsAtExit')) {
            &loadMyModule('DumpVars');
            &dumpallvars();
        }
-       &symdumpAll()           if (&IsParam("symdumpAtExit"));
+       &symdumpAll()           if (&IsParam('symdumpAtExit'));
        &closeLog();
-       &closeSQLDebug()        if (&IsParam("SQLDebug"));
+       &closeSQLDebug()        if (&IsParam('SQLDebug'));
 
        &status("--- QUIT.");
     } else {                                   # child.
@@ -158,7 +157,7 @@ sub doWarn {
 }
 
 # Usage: &IsParam($param);
-# blootbot.config specific.
+# infobot.config specific.
 sub IsParam {
     my $param = $_[0];
 
@@ -197,8 +196,8 @@ sub getChanConfList {
 
     foreach (keys %chanconf) {
        my $chan        = $_;
-#      &DEBUG("chan => $chan");
        my @array       = grep /^$param$/, keys %{ $chanconf{$chan} };
+       #&DEBUG("gCCL param => $param, chan => $chan, keys => " . join(':',keys %{ $chanconf{$chan} }) . " array => " . join(':', @array)) if ($param eq 'whatever');
 
        next unless (scalar @array);
 
@@ -206,7 +205,7 @@ sub getChanConfList {
            &WARN("multiple items found?");
        }
 
-       if ($array[0] eq "0") {
+       if ($chanconf{$chan}{$param} eq '0') {
            $chan{$chan}        = -1;
        } else {
            $chan{$chan}        =  1;
@@ -222,21 +221,23 @@ sub getChanConfList {
 # Return: 1 for enabled, 0 for passive disable, -1 for active disable.
 sub IsChanConf {
     my($param) = shift;
-    my $debug  = 0;    # knocked tons of bugs with this! :)
+
+    # knocked tons of bugs with this! :)
+    my $debug  = 0; # 1 if ($param eq 'whatever');
 
     if (!defined $param) {
        &WARN("IsChanConf: param == NULL.");
        return 0;
     }
 
-    # should we use IsParam() externally where needed or hack it in
-    # here just in case? fix it later.
+    # these should get moved to your .chan file instead of the .config
+    # .config items overide any .chan entries
     if (&IsParam($param)) {
-       &DEBUG("ICC: found '$param' option in main config file.");
+       &WARN("ICC: found '$param' option in main config file.");
        return 1;
     }
 
-    $chan      ||= "_default";
+    $chan ||= "_default";
 
     my $old = $chan;
     if ($chan =~ tr/A-Z/a-z/) {
@@ -249,14 +250,16 @@ sub IsChanConf {
     if (!defined $msgType) {
        $nomatch++;
     } else {
-       $nomatch++ if ($msgType eq "");
+       $nomatch++ if ($msgType eq '');
        $nomatch++ unless ($msgType =~ /^(public|private)$/i);
     }
 
 ### debug purposes only.
-#    &DEBUG("param => $param, msgType => $msgType.");
-#    foreach (keys %chan) {
-#      &DEBUG("   $_ => $chan{$_}");
+#    if ($debug) {
+#      &DEBUG("param => $param, msgType => $msgType.");
+#      foreach (keys %chan) {
+#          &DEBUG("   $_ => $chan{$_}");
+#      }
 #    }
 
     if ($nomatch) {
@@ -267,31 +270,15 @@ sub IsChanConf {
        } else {
            &DEBUG("ICC: other: 0 ($param)") if ($debug);
        }
-
        return $chan{$chan} || $chan{_default} || 0;
-    }
-
-    if ($msgType eq "public") {
+    } elsif ($msgType =~ /^(public|private)$/i) {
        if ($chan{$chan}) {
-           &DEBUG("ICC: public: $chan{$chan} ($chan/$param)") if ($debug);
+           &DEBUG("ICC: $msgType: $chan{$chan} ($chan/$param)") if ($debug);
        } elsif ($chan{_default}) {
-           &DEBUG("ICC: public: $chan{_default} (_default/$param)") if ($debug);
-       } else {
-           &DEBUG("ICC: public: 0 ($param)") if ($debug);
-       }
-
-       return $chan{$chan} || $chan{_default} || 0;
-    }
-
-    if ($msgType eq "private") {
-       if ($chan{_default}) {
-           &DEBUG("ICC: private: $chan{_default} (_default/$param)") if ($debug);
-       } elsif ($chan{$chan}) {
-           &DEBUG("ICC: private: $chan{$chan} ($chan/$param) (hack)") if ($debug);
+           &DEBUG("ICC: $msgType: $chan{_default} (_default/$param)") if ($debug);
        } else {
-           &DEBUG("ICC: private: 0 ($param)") if ($debug);
+           &DEBUG("ICC: $msgType: 0 ($param)") if ($debug);
        }
-
        return $chan{$chan} || $chan{_default} || 0;
     }
 
@@ -326,16 +313,19 @@ sub getChanConf {
        if (0 and $c[0] ne $c) {
            &WARN("c ne chan ($c[0] ne $chan)");
        }
+       if (!defined $chanconf{$c[0]}{$param} and ($c ne '_default')) {
+           return &getChanConf($param, '_default');
+       }
+       &DEBUG("gCC: $param,$c \"" . $chanconf{$c[0]}{$param} . '"');
        return $chanconf{$c[0]}{$param};
     }
 
-#    &DEBUG("gCC: returning _default... ");
+    #&DEBUG("gCC: returning _default... " . $chanconf{"_default"}{$param});
     return $chanconf{"_default"}{$param};
 }
 
 sub getChanConfDefault {
     my($what, $default, $chan) = @_;
-
     $chan      ||= "_default";
 
     if (exists $param{$what}) {
@@ -381,9 +371,9 @@ sub findChanConf {
 }
 
 sub showProc {
-    my ($prefix) = $_[0] || "";
+    my ($prefix) = $_[0] || '';
 
-    if ($^O eq "linux") {
+    if ($^O eq 'linux') {
        if (!open(IN, "/proc/$$/status")) {
            &ERROR("cannot open '/proc/$$/status'.");
            return;
@@ -394,7 +384,7 @@ sub showProc {
        }
        close IN;
 
-    } elsif ($^O eq "netbsd") {
+    } elsif ($^O eq 'netbsd') {
        $memusage = int( (stat "/proc/$$/mem")[7]/1024 );
 
     } elsif ($^O =~ /^(free|open)bsd$/) {
@@ -402,11 +392,11 @@ sub showProc {
        $memusage = $info[20];
 
     } else {
-       $memusage = "UNKNOWN";
+       $memusage = 'UNKNOWN';
        return;
     }
 
-    if (defined $memusageOld and &IsParam("DEBUG")) {
+    if (defined $memusageOld and &IsParam('DEBUG')) {
        # it's always going to be increase.
        my $delta = $memusage - $memusageOld;
        my $str;
@@ -437,25 +427,25 @@ sub setup {
     &status("--- Started logging.");
 
     # read.
-    &loadLang($bot_data_dir. "/blootbot.lang");
+    &loadLang($bot_data_dir. "/infobot.lang");
     &loadIRCServers();
     &readUserFile();
     &readChanFile();
     &loadMyModulesNow();       # must be after chan file.
 
     $shm = &openSHM();
-    &openSQLDebug()    if (&IsParam("SQLDebug"));
+    &openSQLDebug()    if (&IsParam('SQLDebug'));
     &sqlOpenDB($param{'DBName'}, $param{'DBType'}, $param{'SQLUser'},
        $param{'SQLPass'});
     &checkTables();
 
-    &status("Setup: ". &countKeys("factoids") ." factoids.");
-    &getChanConfDefault("sendPrivateLimitLines", 3);
-    &getChanConfDefault("sendPrivateLimitBytes", 1000);
-    &getChanConfDefault("sendPublicLimitLines", 3);
-    &getChanConfDefault("sendPublicLimitBytes", 1000);
-    &getChanConfDefault("sendNoticeLimitLines", 3);
-    &getChanConfDefault("sendNoticeLimitBytes", 1000);
+    &status("Setup: ". &countKeys('factoids') ." factoids.");
+    &getChanConfDefault('sendPrivateLimitLines', 3, $chan);
+    &getChanConfDefault('sendPrivateLimitBytes', 1000, $chan);
+    &getChanConfDefault('sendPublicLimitLines', 3, $chan);
+    &getChanConfDefault('sendPublicLimitBytes', 1000, $chan);
+    &getChanConfDefault('sendNoticeLimitLines', 3, $chan);
+    &getChanConfDefault('sendNoticeLimitBytes', 1000, $chan);
 
     $param{tempDir} =~ s#\~/#$ENV{HOME}/#;
 
@@ -465,7 +455,7 @@ sub setup {
 
 sub setupConfig {
     $param{'VERBOSITY'} = 1;
-    &loadConfig($bot_config_dir."/blootbot.config");
+    &loadConfig($bot_config_dir."/infobot.config");
 
     foreach ( qw(ircNick ircUser ircName DBType tempDir) ) {
        next if &IsParam($_);
@@ -493,7 +483,7 @@ sub setupConfig {
 }
 
 sub startup {
-    if (&IsParam("DEBUG")) {
+    if (&IsParam('DEBUG')) {
        &status("enabling debug diagnostics.");
        # I thought disabling this reduced memory usage by 1000 KiB.
        use diagnostics;
@@ -511,13 +501,13 @@ sub shutdown {
     &status("--- shutdown called.");
 
     # hack.
-    $ident ||= "blootbot";
+    $ident ||= 'infobot';
 
-    if (!&isFileUpdated("$bot_state_dir/blootbot.users", $wtime_userfile)) {
+    if (!&isFileUpdated("$bot_state_dir/infobot.users", $wtime_userfile)) {
        &writeUserFile()
     }
 
-    if (!&isFileUpdated("$bot_state_dir/blootbot.chan", $wtime_chanfile)) {
+    if (!&isFileUpdated("$bot_state_dir/infobot.chan", $wtime_chanfile)) {
        &writeChanFile();
     }
 
@@ -546,10 +536,10 @@ sub restart {
 
        &ircCheck();    # heh, evil!
 
-       &DCCBroadcast("-HUP called.","m");
+       &DCCBroadcast("-HUP called.",'m');
        &shutdown($sig);
-       &loadConfig($bot_config_dir."/blootbot.config");
-       &reloadAllModules() if (&IsParam("DEBUG"));
+       &loadConfig($bot_config_dir."/infobot.config");
+       &reloadAllModules() if (&IsParam('DEBUG'));
        &setup();
 
        &status("--- End of $sig.");
@@ -575,7 +565,7 @@ sub loadConfig {
        next unless /\S/;
        my ($set,$key,$val) = split(/\s+/, $_, 3);
 
-       if ($set ne "set") {
+       if ($set ne 'set') {
            &status("loadConfig: invalid line '$_'.");
            next;
        }
@@ -594,3 +584,5 @@ sub loadConfig {
 }
 
 1;
+
+# vim:ts=4:sw=4:expandtab:tw=80