]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/Factoids.pl
- strictify
[infobot.git] / src / Modules / Factoids.pl
index 64bc303aedbbc237b7b77d57a524b4b3f7ed2eed..9ca5c547c1fea0b643ccbbae7fe6a30ebea24b74 100644 (file)
@@ -5,7 +5,10 @@
 #     Splitted: SQLExtras.pl
 #
 
-if (&IsParam("useStrict")) { use strict; }
+use strict;
+
+use vars qw($dbh $who);
+use vars qw(%param);
 
 ###
 # Usage: &CmdFactInfo($faqtoid, $query);
@@ -19,16 +22,10 @@ sub CmdFactInfo {
        return;
     }
 
-    my $i = 0;
-    my %factinfo;
-    my @factinfo = &getFactInfo($faqtoid,"*");
-    foreach ( &dbGetColInfo("factoids") ) {
-       $factinfo{$_} = $factinfo[$i] || '';
-       $i++;
-    }
+    my %factinfo = &dbGetColNiceHash("factoids", "*", "factoid_key=".&dbQuote($faqtoid));
 
     # factoid does not exist.
-    if (scalar @factinfo <= 1) {
+    if (scalar (keys %factinfo) <= 1) {
        &performReply("there's no such factoid as \002$faqtoid\002");
        return;
     }
@@ -66,28 +63,28 @@ sub CmdFactInfo {
     }
 
     # modified:
-#    if ($factinfo{'modified_by'}) {
-#      $string = "last modified";
-#
-#      my $time = $factinfo{'modified_time'};
-#      if ($time) {
-#          if (time() - $time > 60*60*24*7) {
-#              $string .= " at \037". scalar(localtime $time). "\037";
-#          } else {
-#              $string .= " ".&Time2String(time() - $time)." ago";
-#          }
-#      }
-#
-#      my @x;
-#      foreach (split ",", $factinfo{'modified_by'}) {
-#          /\!/;
-#          push(@x, $`);
-#      }
-#      $string .= "by ".&IJoin(@x);
-#
-#      $i++;
-#      push(@array,$string);
-#    }
+    if ($factinfo{'modified_by'}) {
+       $string = "last modified";
+
+       my $time = $factinfo{'modified_time'};
+       if ($time) {
+           if (time() - $time > 60*60*24*7) {
+               $string .= " at \037". scalar(localtime $time). "\037";
+           } else {
+               $string .= " ".&Time2String(time() - $time)." ago ";
+           }
+       }
+
+       my @x;
+       foreach (split ",", $factinfo{'modified_by'}) {
+           /\!/;
+           push(@x, $`);
+       }
+       $string .= "by ".&IJoin(@x);
+
+       $i++;
+       push(@array,$string);
+    }
 
     # requested:
     if ($factinfo{'requested_by'}) {
@@ -143,7 +140,7 @@ sub CmdFactStats {
     my ($type) = @_;
 
     if ($type =~ /^author$/i) {
-       my %hash = &dbGetCol("factoids", "factoid_key","created_by");
+       my %hash = &dbGetCol("factoids", "factoid_key,created_by", "created_by IS NOT NULL");
        my %author;
 
        foreach (keys %hash) {
@@ -174,14 +171,14 @@ sub CmdFactStats {
        my $prefix = "factoid statistics by author: ";
        return &formListReply(0, $prefix, @list);
 
-    } elsif ($type =~ /^broken$/i) {
-        &status("factstats(broken): starting...");
+    } elsif ($type =~ /^vandalism$/i) {
+        &status("factstats(vandalism): starting...");
        my $start_time  = &timeget();
-       my %data        = &dbGetCol("factoids", "factoid_key","factoid_value");
+       my %data        = &dbGetCol("factoids", "factoid_key,factoid_value", "factoid_value IS NOT NULL");
        my @list;
 
        my $delta_time  = &timedelta($start_time);
-        &status(sprintf("factstats(broken): %.02f sec to retreive all factoids.", $delta_time)) if ($delta_time > 0);
+        &status(sprintf("factstats(vandalismbroken): %.02f sec to retreive all factoids.", $delta_time)) if ($delta_time > 0);
        $start_time     = &timeget();
 
        # parse the factoids.
@@ -193,15 +190,15 @@ sub CmdFactStats {
        }
 
        $delta_time     = &timedelta($start_time);
-        &status(sprintf("factstats(broken): %.02f sec to complete.", $delta_time)) if ($delta_time > 0);
+        &status(sprintf("factstats(vandalism): %.02f sec to complete.", $delta_time)) if ($delta_time > 0);
 
        # bail out on no results.
        if (scalar @list == 0) {
-           return 'no broken factoids... wooohoo.';
+           return 'no vandalised factoids... wooohoo.';
        }
 
        # parse the results.
-       my $prefix = "broken factoid ";
+       my $prefix = "Vandalised factoid ";
        return &formListReply(1, $prefix, @list);
 
     } elsif ($type =~ /^total$/i) {
@@ -277,7 +274,7 @@ sub CmdFactStats {
        for (@list) {
            my $factoid = $_;
            my $val = &getFactInfo($factoid, "factoid_value");
-           if ($val =~ /^<REPLY> see( also)? (.*?)\.?$/i) {
+           if ($val =~ /^<REPLY> ?see( also)? (.*?)\.?$/i) {
                my $redirf = lc $2;
                my $redir = &getFactInfo($redirf, "factoid_value");
                next if (defined $redir);
@@ -304,7 +301,7 @@ sub CmdFactStats {
     } elsif ($type =~ /^dup(licate|e)$/i) {
         &status("factstats(dupe): starting...");
        my $start_time  = &timeget();
-       my %hash        = &dbGetCol("factoids", "factoid_key", "factoid_value", 1);
+       my %hash        = &dbGetCol("factoids", "factoid_key,factoid_value", "factoid_value IS NOT NULL", 1);
        my $refs        = 0;
        my @list;
        my $v;
@@ -420,7 +417,7 @@ sub CmdFactStats {
        return &formListReply(1, $prefix, @list);
 
     } elsif ($type =~ /^locked$/i) {
-       my %hash = &dbGetCol("factoids", "factoid_key","locked_by");
+       my %hash = &dbGetCol("factoids", "factoid_key,locked_by", "locked_by IS NOT NULL");
        my @list = keys %hash;
 
        for (@list) {
@@ -431,7 +428,7 @@ sub CmdFactStats {
        return &formListReply(0, $prefix, @list);
 
     } elsif ($type =~ /^new$/i) {
-       my %hash = &dbGetCol("factoids", "factoid_key","created_time");
+       my %hash = &dbGetCol("factoids", "factoid_key,created_time", "created_time IS NOT NULL");
        my %age;
 
        foreach (keys %hash) {
@@ -509,7 +506,7 @@ sub CmdFactStats {
        return &formListReply(1, $prefix, @list);
 
     } elsif ($type =~ /^profanity$/i) {
-       my %data = &dbGetCol("factoids", "factoid_key","factoid_value");
+       my %data = &dbGetCol("factoids", "factoid_key,factoid_value", "factoid_value IS NOT NULL");
        my @list;
 
        foreach (keys %data) {
@@ -555,7 +552,7 @@ sub CmdFactStats {
        return &formListReply(1, $prefix, @newlist);
 
     } elsif ($type =~ /^request(ed)?$/i) {
-       my %hash = &dbGetCol("factoids", "factoid_key", "requested_count",1);
+       my %hash = &dbGetCol("factoids", "factoid_key,requested_count", "requested_count IS NOT NULL", 1);
 
        if (!scalar keys %hash) {
            return 'sorry, no factoids have been questioned.';
@@ -579,8 +576,27 @@ sub CmdFactStats {
        my $prefix = "factoid statistics on $type ";
        return &formListReply(0, $prefix, @list);
 
+    } elsif ($type =~ /^reqrate$/i) {
+       my %hash = &dbGetCol("factoids",
+               "factoid_key,(unix_timestamp() - created_time)/requested_count as rate",
+               "requested_by IS NOT NULL and created_time IS NOT NULL ORDER BY rate LIMIT 15", 1);
+
+       my $rate;
+       my @list;
+       my $total       = 0;
+       my $users       = 0;
+       foreach $rate (sort { $b <=> $a } keys %hash) {
+           my $f       = join(", ", sort keys %{ $hash{$rate} });
+           my $str     = "$f - ".&Time2String($rate);
+           $str        =~ s/\002//g;
+           push(@list, $str);
+       }
+
+       my $prefix = "Rank of top factoid rate (time/req): ";
+       return &formListReply(0, $prefix, @list);
+
     } elsif ($type =~ /^requesters?$/i) {
-       my %hash = &dbGetCol("factoids", "factoid_key","requested_by");
+       my %hash = &dbGetCol("factoids", "factoid_key,requested_by", "requested_by IS NOT NULL");
        my %requester;
 
        foreach (keys %hash) {
@@ -658,6 +674,7 @@ sub CmdFactStats {
 
     } elsif ($type =~ /^(2|too)long$/i) {
        my @list;
+       my $query;
 
        # factoid_key.
        $query = "SELECT factoid_key FROM factoids WHERE length(factoid_key) >= $param{'maxKeySize'}";
@@ -666,14 +683,16 @@ sub CmdFactStats {
        while (my @row = $sth->fetchrow_array) {
            push(@list,$row[0]);
        }
+       $sth->finish;
 
        # factoid_value.
-       my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE length(factoid_value) >= $param{'maxDataSize'}";
+       $query = "SELECT factoid_key,factoid_value FROM factoids WHERE length(factoid_value) >= $param{'maxDataSize'}";
        $sth = $dbh->prepare($query);
        $sth->execute;
        while (my @row = $sth->fetchrow_array) {
            push(@list,sprintf("\002%s\002 - %s", length($row[1]), $row[0]));
        }
+       $sth->finish;
 
        if (scalar @list == 0) {
            return "good. no factoids exceed length.";