]> git.donarmstrong.com Git - infobot.git/blobdiff - src/core.pl
If topicAuthor is on then show it in topic, otherwise just topic -- contribution...
[infobot.git] / src / core.pl
index 9aef5f63b0266a8ca718208373a6ea990d92ae27..ecbcee5f7c9388019e495797b910f66a920bc9fc 100644 (file)
@@ -27,15 +27,15 @@ use vars qw(
 );
 
 # array.
-use vars qw(@joinchan @ircServers @wingateBad @wingateNow @wingateCache
+use vars qw(@ircServers @wingateBad @wingateNow @wingateCache
 );
 
 ### 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
-           %forked %chanconf %channels
+           %forked %chanconf %channels %cache
 );
 
 # Signals.
@@ -78,7 +78,7 @@ $nottime      = 0;
 $notsize       = 0;
 $notcount      = 0;
 ###
-$bot_release   = "1.1.0";
+$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);
+           &DEBUG("ICC: $msgType: $chan{_default} (_default/$param)") if ($debug);
        } else {
-           &DEBUG("ICC: public: 0 ($param)") if ($debug);
+           &DEBUG("ICC: $msgType: 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);
-       } else {
-           &DEBUG("ICC: private: 0 ($param)") if ($debug);
-       }
-
        return $chan{$chan} || $chan{_default} || 0;
     }
 
@@ -308,30 +300,33 @@ sub getChanConf {
        return 0;
     }
 
-    # this looks evil... 
+    # this looks evil...
     if (0 and !defined $chan) {
        &DEBUG("gCC: ok !chan... doing _default instead.");
     }
 
     $c         ||= $chan;
     $c         ||= "_default";
-    $c         = "_default" if ($c eq "*");    # fix!
+    $c         = "_default" if ($c eq "*");    # FIXME
     my @c      = grep /^\Q$c\E$/i, keys %chanconf;
 
     if (@c) {
        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}/#;
 
@@ -491,7 +486,7 @@ sub setupConfig {
 sub startup {
     if (&IsParam("DEBUG")) {
        &status("enabling debug diagnostics.");
-       ### I thought disabling this reduced memory usage by 1000 KiB.
+       # I thought disabling this reduced memory usage by 1000 KiB.
        use diagnostics;
     }
 
@@ -506,7 +501,8 @@ sub shutdown {
     # reverse order of &setup().
     &status("--- shutdown called.");
 
-    $ident ||= "blootbot";     # hack.
+    # hack.
+    $ident ||= "blootbot";
 
     if (!&isFileUpdated("$bot_state_dir/blootbot.users", $wtime_userfile)) {
        &writeUserFile()
@@ -517,7 +513,8 @@ sub shutdown {
     }
 
     &sqlCloseDB();
-    &closeSHM($shm);   # aswell. TODO: use this in &doExit?
+    # aswell. TODO: use this in &doExit?
+    &closeSHM($shm);
     &closeLog();
 }