]> git.donarmstrong.com Git - infobot.git/blobdiff - blootbot/src/Misc.pl
root[wW]arn -> RootWarn
[infobot.git] / blootbot / src / Misc.pl
index 358515467576b10dedebb1a9bac7906a406fe79d..df5e8de99789b42ea8ccd5c023eacbe57ed4beb4 100644 (file)
@@ -5,7 +5,11 @@
 #      NOTE: Based on code by Kevin Lenzo & Patrick Cole  (c) 1997
 #
 
-#use strict;
+use strict;
+
+use vars qw(%file %mask %param %cmdstats %myModules);
+use vars qw($msgType $who $bot_pid $nuh $shm $force_public_reply
+       $no_timehires $bot_data_dir $addrchar);
 
 sub help {
     my $topic = shift;
@@ -66,7 +70,7 @@ sub help {
 
     if (exists $help{$topic}) {
        foreach (split /\n/, $help{$topic}) {
-           &performStrictReply($_);
+           &pSReply($_);
        }
     } else {
        &pSReply("no help on $topic.  Use 'help' without arguments.");
@@ -92,7 +96,7 @@ sub timeget {
     } else {                   # the real thing.
        return [gettimeofday()];
     }
-}    
+}
 
 sub timedelta {
     my($start_time) = shift;
@@ -117,6 +121,9 @@ sub formListReply {
     my $maxlen = $param{'maxListReplyLength'} || 400;
     my $reply;
 
+    # remove irc overhead
+    $maxlen -= 30;
+
     # no results.
     return $prefix ."returned no results." unless ($total);
 
@@ -127,7 +134,7 @@ sub formListReply {
            push(@rand, $list[$_]);
            last if (scalar @rand == $maxshow);
        }
-       @list = @rand;
+       @list = sort @rand;
     } elsif ($total > $maxshow) {
        &status("formListReply: truncating list.");
 
@@ -136,9 +143,9 @@ sub formListReply {
 
     # form the reply.
     while () {
-       $reply  = $prefix ."(\002". scalar(@list). "\002 shown";
-       $reply .= "; \002$total\002 total" if ($total != scalar @list);
-       $reply .= "): ". join(" \002;;\002 ",@list) .".";
+       $reply  = $prefix ."(\002". scalar(@list). "\002";
+       $reply .= " of \002$total\002" if ($total != scalar @list);
+       $reply .= "): " . join(" \002;;\002 ", @list) .".";
 
        last if (length($reply) < $maxlen and scalar(@list) <= $maxshow);
        last if (scalar(@list) == 1);
@@ -164,29 +171,31 @@ sub IJoin {
 #####
 # Usage: &Time2String(seconds);
 sub Time2String {
-    my $time = shift;
-    my $retval;
+    my ($time) = @_;
+    my $prefix = "";
+    my (@s, @t);
 
-    return("NULL s") if (!defined $time or $time !~ /\d+/);
+    return "NULL" if (!defined $time);
+    return $time  if ($time !~ /\d+/);
 
-    my $prefix = "";
     if ($time < 0) {
        $time   = - $time;
        $prefix = "- ";
     }
 
-    my $s = int($time) % 60;
-    my $m = int($time / 60) % 60;
-    my $h = int($time / 3600) % 24;
-    my $d = int($time / 86400);
+    $t[0] = int($time) % 60;
+    $t[1] = int($time / 60) % 60;
+    $t[2] = int($time / 3600) % 24;
+    $t[3] = int($time / 86400);
 
-    my @data;
-    push(@data, sprintf("\002%d\002d", $d)) if ($d != 0);
-    push(@data, sprintf("\002%d\002h", $h)) if ($h != 0);
-    push(@data, sprintf("\002%d\002m", $m)) if ($m != 0);
-    push(@data, sprintf("\002%d\002s", $s)) if ($s != 0 or !@data);
+    push(@s, "$t[3]d") if ($t[3] != 0);
+    push(@s, "$t[2]h") if ($t[2] != 0);
+    push(@s, "$t[1]m") if ($t[1] != 0);
+    push(@s, "$t[0]s") if ($t[0] != 0 or !@s);
 
-    return $prefix.join(' ', @data);
+    my $retval = $prefix.join(' ', @s);
+    $retval =~ s/(\d+)/\002$1\002/g;
+    return $retval;
 }
 
 ###
@@ -200,9 +209,9 @@ sub fixFileList {
 
     # generate a hash list.
     foreach (@files) {
-       if (/^(.*\/)(.*?)$/) {
-           $files{$1}{$2} = 1;
-       }
+       next unless /^(.*\/)(.*?)$/;
+
+       $files{$1}{$2} = 1;
     }
     @files = ();       # reuse the array.
 
@@ -368,7 +377,7 @@ sub getRandomInt {
        my $i = $1;
        my $fuzzy = int(rand 5);
        if ($i < 10) {
-           return $i*60;
+           return $i;
        }
        if (rand > 0.5) {
            return ($i - $fuzzy)*60;
@@ -464,6 +473,22 @@ sub isStale {
     return 0;
 }
 
+sub isFileUpdated {
+    my ($file, $time) = @_;
+
+    if (! -f $file) {
+       return 1;
+    }
+
+    my $time_file = (stat $file)[9];
+
+    if ($time <= $time_file) {
+       return 0;
+    } else {
+       return 1;
+    }
+}
+
 ##########
 ### make commands.
 ###
@@ -535,7 +560,7 @@ sub checkMsgType {
 sub validExec {
     my ($str) = @_;
 
-    if ($str =~ /[\'\"\|]/) {  # invalid.
+    if ($str =~ /[\`\'\"\|]/) {        # invalid.
        return 0;
     } else {                   # valid.
        return 1;
@@ -550,7 +575,7 @@ sub hasProfanity {
     for (lc $string) {
        /fuck/ and last;
        /dick|dildo/ and last;
-       /shit|turd|crap/ and last;
+       /shit/ and last;
        /pussy|[ck]unt/ and last;
        /wh[0o]re|bitch|slut/ and last;
 
@@ -629,21 +654,22 @@ sub closeStats {
 
     foreach (keys %cmdstats) {
        my $type        = $_;
-       my $i   = &dbGet("stats", "counter", "nick=".&dbQuote($type).
-                       " AND type='cmdstats'");
+       my $i   = &sqlSelect("stats", "counter", {
+               nick    => $type,
+               type    => "cmdstats",
+       } );
        my $z   = 0;
        $z++ unless ($i);
 
        $i      += $cmdstats{$type};
 
-       my %hash = (
-               nick => $type,
-               type => "cmdstats",
-               counter => $i
-       );              
-       $hash{time} = time() if ($z);
 
-       &dbReplace("stats", "nick", %hash);
+       &sqlReplace("stats", {
+           nick        => $type,
+           type        => "cmdstats",
+           'time'      => time(),
+           counter     => $i,
+       } );
     }
 }