]> git.donarmstrong.com Git - infobot.git/blobdiff - src/core.pl
* Stop recursive is also loops
[infobot.git] / src / core.pl
index 7a9f6312f12d5f7211bbb6038c2231b9ff026861..ecbcee5f7c9388019e495797b910f66a920bc9fc 100644 (file)
@@ -78,7 +78,7 @@ $nottime      = 0;
 $notsize       = 0;
 $notcount      = 0;
 ###
-$bot_release   = "1.3.1";
+$bot_release   = "1.3.3";
 if ( -d "CVS" ) {
     use POSIX qw(strftime);
     $bot_release       .= strftime(" cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) );
@@ -127,10 +127,14 @@ sub doExit {
        }
        &writeUserFile();
        &writeChanFile();
-       &uptimeWriteFile()      if (&IsChanConf("uptime"));
+       &uptimeWriteFile()      if (&IsParam('Uptime'));
        &sqlCloseDB();
        &closeSHM($shm);
-       &dumpallvars()          if (&IsParam("dumpvarsAtExit"));
+
+       if (&IsParam("dumpvarsAtExit")) {
+           &loadMyModule('DumpVars');
+           &dumpallvars();
+       }
        &symdumpAll()           if (&IsParam("symdumpAtExit"));
        &closeLog();
        &closeSQLDebug()        if (&IsParam("SQLDebug"));
@@ -193,8 +197,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);
 
@@ -202,7 +206,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;
@@ -218,21 +222,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/) {
@@ -250,9 +256,11 @@ sub IsChanConf {
     }
 
 ### 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) {
@@ -263,31 +271,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;
     }
 
@@ -322,16 +314,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}) {
@@ -446,12 +441,12 @@ sub setup {
     &checkTables();
 
     &status("Setup: ". &countKeys("factoids") ." factoids.");
-    &getChanConfDefault("sendPrivateLimitLines", 3);
-    &getChanConfDefault("sendPrivateLimitBytes", 1000);
-    &getChanConfDefault("sendPublicLimitLines", 3);
-    &getChanConfDefault("sendPublicLimitBytes", 1000);
-    &getChanConfDefault("sendNoticeLimitLines", 3);
-    &getChanConfDefault("sendNoticeLimitBytes", 1000);
+    &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}/#;