]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Modules/Factoids.pl
- added support to factstats (requested,requesters) of "total" value.
[infobot.git] / src / Modules / Factoids.pl
index 5fe634bf783fac3e91a3ac8a23382d48ac397080..d6c20b4a1e382f1480e3c04136099435186303b6 100644 (file)
@@ -16,7 +16,7 @@ sub CmdFactInfo {
 
     if ($faqtoid eq "") {
        &help("factinfo");
-       return $noreply;
+       return;
     }
 
     my $i = 0;
@@ -30,7 +30,18 @@ sub CmdFactInfo {
     # factoid does not exist.
     if (scalar @factinfo <= 1) {
        &performReply("there's no such factoid as \002$faqtoid\002");
-       return $noreply;
+       return;
+    }
+
+    # fix for problem observed by asuffield.
+    # why did it happen though?
+    if (!$factinfo{'factoid_value'}) {
+       &performReply("there's no such factoid as \002$faqtoid\002; deleted because we don't have factoid_value!");
+       foreach (keys %factinfo) {
+           &DEBUG("factinfo{$_} => '$factinfo{$_}'.");
+       }
+###    &delFactoid($faqtoid);
+       return;
     }
 
     # created:
@@ -43,7 +54,7 @@ sub CmdFactInfo {
        my $time = $factinfo{'created_time'};
        if ($time) {
            if (time() - $time > 60*60*24*7) {
-               my $days = int( (time() - $time)*60*60*24 );
+               my $days = int( (time() - $time)/60/60/24 );
                $string .= " at \037". scalar(localtime $time). "\037" .
                                " ($days days) ";
            } else {
@@ -121,11 +132,11 @@ sub CmdFactInfo {
     # factoid was inserted not through the bot.
     if (!scalar @array) {
        &performReply("no extra info on \002$faqtoid\002");
-       return $noreply;
+       return;
     }
 
     &performStrictReply("$factinfo{'factoid_key'} -- ". join("; ", @array) .".");
-    return $noreply;
+    return;
 }
 
 sub CmdFactStats {
@@ -214,7 +225,7 @@ sub CmdFactStats {
 
        my @newlist;
        foreach $f (keys %redir) {
-           my @sublist = keys %{$redir{$f}};
+           my @sublist = keys %{ $redir{$f} };
            for (@sublist) {
                s/([\,\;]+)/\037$1\037/g;
            }
@@ -271,6 +282,27 @@ sub CmdFactStats {
        my $prefix = "dupe factoid ";
        return &formListReply(1, $prefix, @list);
 
+    } elsif ($type =~ /^nullfactoids$/i) {
+       my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE factoid_value=''";
+       my $sth = $dbh->prepare($query);
+       &ERROR("factstats(null): => '$query'.") unless $sth->execute;
+
+       my @list;
+       while (my @row = $sth->fetchrow_array) {
+           if ($row[1] ne "") {
+               &DEBUG("row[1] != NULL for $row[0].");
+               next;
+           }
+
+           &DEBUG("row[0] => '$row[0]'.");
+           push(@list, $row[0]);
+       }
+       $sth->finish;
+
+       # parse the results.
+       my $prefix = "NULL factoids (not deleted yet) ";
+       return &formListReply(1, $prefix, @list);
+
     } elsif ($type =~ /^(2|too)short$/i) {
        # Custom select statement.
        my $query = "SELECT factoid_key,factoid_value FROM factoids WHERE length(factoid_value) <= 40";
@@ -462,15 +494,18 @@ sub CmdFactStats {
 
        my $count;
        my @list;
+       my $total       = 0;
        foreach $count (sort {$b <=> $a} keys %hash) {
-           my @faqtoids = sort keys %{$hash{$count}};
+           my @faqtoids = sort keys %{ $hash{$count} };
 
            for (@faqtoids) {
                s/([\,\;]+)/\037$1\037/g;
            }
+           $total      += $count * scalar(@faqtoids);
 
            push(@list, "$count - ". join(", ", @faqtoids));
        }
+       unshift(@list, "\037$total - TOTAL\037");
 
        my $prefix = "factoid statistics on $type ";
        return &formListReply(0, $prefix, @list);
@@ -499,10 +534,17 @@ sub CmdFactStats {
 
        my $count;
        my @list;
+       my $total       = 0;
+       my $users       = 0;
        foreach $count (sort { $b <=> $a } keys %count) {
-           my $requester = join(", ", sort keys %{$count{$count}});
+           my $requester = join(", ", sort keys %{ $count{$count} });
+           $total      += $count * scalar(keys %{ $count{$count} });
+           $users      += scalar(keys %{ $count{$count} });
            push(@list, "$count by $requester");
        }
+       unshift(@list, "\037$total TOTAL REQUESTS; $users UNIQUE REQUESTERS\037");
+       # should not the above value be the same as collected by
+       # 'requested'? soemthing weird is going on!
 
        my $prefix = "rank of top factoid requesters: ";
        return &formListReply(0, $prefix, @list);
@@ -518,21 +560,22 @@ sub CmdFactStats {
        for (@list) {
            my $factoid = $_;
            my $val = &getFactInfo($factoid, "factoid_value");
-           if ($val =~ /^see( also)? (.*?)\.?$/i) {
-               my $redirf = lc $2;
-               my $redir = &getFactInfo($redirf, "factoid_value");
+       
+           next unless ($val =~ /^see( also)? (.*?)\.?$/i);
 
-               if ($redirf =~ /^\Q$factoid\W$/i) {
-                   &delFactoid($factoid);
-                   $loop{$factoid} = 1;
-               }
+           my $redirf  = lc $2;
+           my $redir   = &getFactInfo($redirf, "factoid_value");
 
-               if (defined $redir) {   # good.
-                   &setFactInfo($factoid,"factoid_value","<REPLY> see $redir");
-                   $fixed++;
-               } else {
-                   push(@newlist, $redirf);
-               }
+           if ($redirf =~ /^\Q$factoid\W$/i) {
+               &delFactoid($factoid);
+               $loop{$factoid} = 1;
+           }
+
+           if (defined $redir) {       # good.
+               &setFactInfo($factoid,"factoid_value","<REPLY> see $redir");
+               $fixed++;
+           } else {
+               push(@newlist, $redirf);
            }
        }