]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Misc.pl
- Remaining files that were changed due to removal of $noreply or
[infobot.git] / src / Misc.pl
index a7be35f192c26f483da2f56027638995eba9c4f9..d105bf65209d02ab84f8d4134e231e675a4909b6 100644 (file)
@@ -8,8 +8,8 @@
 if (&IsParam("useStrict")) { use strict; }
 
 sub help {
-    my $topic = $_[0];
-    my $file  = $infobot_misc_dir."/infobot.help";
+    my $topic = shift;
+    my $file  = $bot_misc_dir."/blootbot.help";
     my %help  = ();
 
     if (!open(FILE, $file)) {
@@ -37,7 +37,7 @@ sub help {
     }
     close FILE;
 
-    if (!defined $topic) {
+    if (!defined $topic or $topic eq "") {
        &msg($who, $help{'main'});
 
        my $i = 0;
@@ -63,25 +63,41 @@ 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 '';
 }
 
-sub gettimeofday {
-    if ($no_syscall) {         # fallback.
+sub getPath {
+    my ($pathnfile) = @_;
+
+    ### TODO: gotta hate an if statement.
+    if ($pathnfile =~ /(.*)\/(.*?)$/) {
+       return $1;
+    } else {
+       return ".";
+    }
+}
+
+sub timeget {
+    if ($no_timehires) {       # fallback.
        return time();
     } else {                   # the real thing.
-       my $time = pack("LL", 0);
+       return [gettimeofday()];
+    }
+}    
 
-       syscall(&SYS_gettimeofday, $time, 0);
-       my @time = unpack("LL",$time);
+sub timedelta {
+    my($start_time) = shift;
 
-       return sprintf("%d.%d", @time);
+    if ($no_timehires) {       # fallback.
+       return time() - $start_time;
+    } else {                   # the real thing.
+       return tv_interval ($start_time);
     }
 }
 
@@ -148,7 +164,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;
@@ -212,6 +229,7 @@ sub fixString {
        s/\s+/ /g;              # remove excessive whitespaces.
 
        next unless (defined $level);
+       &DEBUG("strip control chars?");
        s/[\cA-\c_]//ig         # remove control characters.
     }
 
@@ -222,6 +240,11 @@ sub fixString {
 sub fixPlural {
     my ($str,$int) = @_;
 
+    if (!defined $str) {
+       &WARN("fixPlural: str == NULL.");
+       return;
+    }
+
     if ($str eq "has") {
        $str = "have"   if ($int > 1);
     } elsif ($str eq "is") {
@@ -319,6 +342,11 @@ sub getRandom {
 sub getRandomInt {
     my $str = $_[0];
 
+    if (!defined $str) {
+       &WARN("gRI: str == NULL.");
+       return;
+    }
+
     srand();
 
     if ($str =~ /^(\d+)$/) {
@@ -383,7 +411,7 @@ sub IsHostMatch {
     # auth if 1) user and host match 2) user and nick match.
     # this may change in the future.
 
-    if ($this{'user'} =~ /^\Q$local{'user'}$/i) {
+    if ($this{'user'} =~ /^\Q$local{'user'}\E$/i) {
        return 2 if ($this{'host'} eq $local{'host'});
        return 1 if ($this{'nick'} eq $local{'nick'});
     }
@@ -396,10 +424,9 @@ sub isStale {
     my ($file, $age) = @_;
 
     return 1 unless ( -f $file);
-    return 1 if (time() - (stat($file))[8] > $age*60*60*24);
-    my $delta = time() - (stat($file))[8];
+    return 1 if (time() - (stat($file))[9] > $age*60*60*24);
+    my $delta = time() - (stat($file))[9];
     my $hage  = $age*60*60*24;
-    &DEBUG("isStale: not stale! $delta < $hage ($age) ?");
     return 0;
 }
 
@@ -502,6 +529,9 @@ sub validFactoid {
        /\=\~/ and last;                # substituition.
        /^\S+ to \S+ \S+/ and last;     # babelfish.
 
+       /^\=/ and last;                 # botnick = heh is.
+       /wants you to know/ and last;
+
        # symbols.
        /(\"\*)/ and last;
        /, / and last;
@@ -537,7 +567,7 @@ sub validFactoid {
        /\\\%/ and last;
        /\\\_/ and last;
 
-       # weird/special stuff. also old (stock) infobot bugs.
+       # weird/special stuff. also old blootbot or stock infobot bugs.
        $rhs =~ /( \Q$ident\E's|\Q$ident\E's )/i and last; # ownership.
 
        # duplication.
@@ -568,10 +598,12 @@ sub hasProfanity {
     return $profanity;
 }
 
+### rename to hasChanConf() ?
 sub hasParam {
     my ($param) = @_;
 
-    if (&IsParam($param)) {
+    ### TODO: specific reason why it failed.
+    if (&IsChanConf($param)) {
        return 1;
     } else {
        &msg($who, "unfortunately, \002$param\002 is disabled in my configuration") unless ($addrchar);
@@ -584,19 +616,28 @@ sub Forker {
     my $pid;
 
     &shmFlush();
-    &status("double fork detected; not forking.") if ($$ != $infobot_pid);
+    &VERB("double fork detected; not forking.",2) if ($$ != $bot_pid);
+
+    if (&IsParam("forking") and $$ == $bot_pid) {
+       return unless &addForked($label);
 
-    if (&IsParam("forking") and $$ == $infobot_pid) {
-       return 'NOREPLY' unless (&addForked($label));
        $SIG{CHLD} = 'IGNORE';
-       $pid = eval { fork() };  # catch non-forking OSes and other errors
-       return 'NOREPLY' if $pid;   # parent does nothing
-       &status("fork starting for '$label', PID == $$.");
+       $pid = eval { fork() };
+       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;
     }
 
-    if (!&loadMyModule($myModules{$label})) {
+    ### TODO: use AUTOLOAD
+    ### very lame hack.
+    if ($label !~ /-/ and !&loadMyModule($myModules{$label})) {
        &DEBUG("Forker: failed?");
-       return;
+       &delForked($label);
     }
 
     if (defined $code) {
@@ -605,17 +646,7 @@ sub Forker {
        &WARN("Forker: code not defined!");
     }
 
-    if (defined $pid) {                # child.
-       &delForked($label);
-       &status("fork finished for '$label'.");
-       exit 0;
-    }
-}
-
-sub checkPing {
-    &DEBUG("checkPing() called.");
-    $conn->schedule(60, \&checkPing, "this is a test");
-    $conn->sl("PING $server :".time());
+    &delForked($label);
 }
 
 sub closePID {
@@ -624,4 +655,5 @@ sub closePID {
     return 1 if (unlink $file{PID});
     return 0 if ( -f $file{PID});
 }
+
 1;