]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Misc.pl
safe delete did not run delFactoid, hah! found by asuffield
[infobot.git] / src / Misc.pl
index ce25d77b8eb9a14d8088fa987be03539f54d05f7..b190857e494deb4ed4c2793885ebce9a946b1b3a 100644 (file)
@@ -12,6 +12,9 @@ sub help {
     my $file  = $bot_misc_dir."/blootbot.help";
     my %help  = ();
 
+    # crude hack for pSReply() to work as expected.
+    $msgType = "private" if ($msgType eq "public");
+
     if (!open(FILE, $file)) {
        &ERROR("FAILED loadHelp ($file): $!");
        return;
@@ -63,10 +66,10 @@ sub help {
 
     if (exists $help{$topic}) {
        foreach (split /\n/, $help{$topic}) {
-           &msg($who,$_);
+           &performStrictReply($_);
        }
     } else {
-       &msg($who, "no help on $topic.  Use 'help' without arguments.");
+       &pSReply("no help on $topic.  Use 'help' without arguments.");
     }
 
     return '';
@@ -87,7 +90,7 @@ sub timeget {
     if ($no_timehires) {       # fallback.
        return time();
     } else {                   # the real thing.
-       return gettimeofday();
+       return [gettimeofday()];
     }
 }    
 
@@ -164,7 +167,8 @@ sub Time2String {
     my $time = shift;
     my $retval;
 
-    return("0s")       if ($time !~ /\d+/ or $time <= 0);
+    return("0s")
+               if (!defined $time or $time !~ /\d+/ or $time <= 0);
 
     my $s = int($time) % 60;
     my $m = int($time / 60) % 60;
@@ -228,8 +232,9 @@ sub fixString {
        s/\s+/ /g;              # remove excessive whitespaces.
 
        next unless (defined $level);
-       &DEBUG("strip control chars?");
-       s/[\cA-\c_]//ig         # remove control characters.
+       if (s/[\cA-\c_]//ig) {          # remove control characters.
+           &DEBUG("stripped control chars");
+       }
     }
 
     return $str;
@@ -239,6 +244,16 @@ sub fixString {
 sub fixPlural {
     my ($str,$int) = @_;
 
+    if (!defined $str) {
+       &WARN("fixPlural: str == NULL.");
+       return;
+    }
+
+    if (!defined $int or $int =~ /^\D+$/) {
+       &WARN("fixPlural: int != defined or int");
+       return $str;
+    }
+
     if ($str eq "has") {
        $str = "have"   if ($int > 1);
     } elsif ($str eq "is") {
@@ -336,9 +351,14 @@ sub getRandom {
 sub getRandomInt {
     my $str = $_[0];
 
+    if (!defined $str) {
+       &WARN("gRI: str == NULL.");
+       return;
+    }
+
     srand();
 
-    if ($str =~ /^(\d+)$/) {
+    if ($str =~ /^(\d+(\.\d+)?)$/) {
        my $i = $1;
        my $fuzzy = int(rand 5);
        if ($i < 10) {
@@ -412,10 +432,22 @@ sub IsHostMatch {
 sub isStale {
     my ($file, $age) = @_;
 
+    if (!defined $age) {
+       &WARN("isStale: age == NULL.");
+       return 1;
+    }
+
+    if (!defined $file) {
+       &WARN("isStale: file == NULL.");
+       return 1;
+    }
+
     return 1 unless ( -f $file);
+    if ($file =~ /idx/) {
+       my $age = time() - (stat($file))[9];
+       &DEBUG("stale: $age. (". &Time2String($age) .")");
+    }
     return 1 if (time() - (stat($file))[9] > $age*60*60*24);
-    my $delta = time() - (stat($file))[9];
-    my $hage  = $age*60*60*24;
     return 0;
 }
 
@@ -590,9 +622,10 @@ sub hasProfanity {
 sub hasParam {
     my ($param) = @_;
 
-    if (&IsParam($param)) {
+    if (&IsChanConf($param) or &IsParam($param)) {
        return 1;
     } else {
+       ### TODO: specific reason why it failed.
        &msg($who, "unfortunately, \002$param\002 is disabled in my configuration") unless ($addrchar);
        return 0;
     }
@@ -606,12 +639,15 @@ sub Forker {
     &VERB("double fork detected; not forking.",2) if ($$ != $bot_pid);
 
     if (&IsParam("forking") and $$ == $bot_pid) {
-       return $noreply unless (&addForked($label));
+       return unless &addForked($label);
 
        $SIG{CHLD} = 'IGNORE';
        $pid = eval { fork() };
-       return $noreply if $pid;        # parent does nothing
-       &status("fork starting for '$label', PID == $$.");
+       return if $pid;         # parent does nothing
+
+       select(undef, undef, undef, 0.2);
+#      &status("fork starting for '$label', PID == $$.");
+       &status("--- fork starting for '$label', PID == $$ ---");
        &shmWrite($shm,"SET FORKPID $label $$");
 
        sleep 1;