]> git.donarmstrong.com Git - infobot.git/blobdiff - src/UserExtra.pl
- remove several debug messages; convert some to VERB()
[infobot.git] / src / UserExtra.pl
index dae2d6bb2388a3c72b6dec7719c12ae8b96b2e25..92bb19537093209d74ca076a65a90b50e52d80c2 100644 (file)
@@ -34,7 +34,9 @@ use vars qw(%channels %chanstats %cmdstats);
        Cmdstats => 'Tell') );
 &addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', 
        Module => 'news', ) );
-#      Module => 'news', Identifier => 'news') );
+&addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', 
+#      Forker => "NULL",
+ ) );
 
 &status("CMD: loaded ".scalar(keys %hooks_main)." MAIN command hooks.");
 
@@ -60,13 +62,13 @@ sub chaninfo {
                &ircCheck();
                next;
            }
-           push(@array, "$_ (".scalar(keys %{$channels{$_}{''}}).")");
+           push(@array, "$_ (".scalar(keys %{ $channels{$_}{''} }).")");
        }
        &pSReply($reply.": ".join(' ', @array));
 
        ### total user count.
        foreach $chan (keys %channels) {
-           $tucount += scalar(keys %{$channels{$chan}{''}});
+           $tucount += scalar(keys %{ $channels{$chan}{''} });
        }
 
        ### unique user count.
@@ -103,7 +105,7 @@ sub chaninfo {
 
     # Step 1:
     my @array;
-    foreach (sort keys %{$chanstats{$chan}}) {
+    foreach (sort keys %{ $chanstats{$chan} }) {
        my $int = $chanstats{$chan}{$_};
        next unless ($int);
 
@@ -123,7 +125,7 @@ sub chaninfo {
                - $chanstats{$chan}{'Part'};
 
     if ($delta_stats) {
-       my $total = scalar(keys %{$channels{$chan}{''}});
+       my $total = scalar(keys %{ $channels{$chan}{''} });
        &status("chaninfo: join ~= signoff + part (drift of $delta_stats < $total).");
 
        if ($delta_stats > $total) {
@@ -135,7 +137,7 @@ sub chaninfo {
     undef @array;
     my $type;
     foreach ("v","o","") {
-       my $int = scalar(keys %{$channels{$chan}{$_}});
+       my $int = scalar(keys %{ $channels{$chan}{$_} });
        next unless ($int);
 
        $type = "Voice" if ($_ eq "v");
@@ -147,11 +149,15 @@ sub chaninfo {
     $reply .= ".  At the moment, ". &IJoin(@array);
 
     # Step 3:
-    ### TODO: what's wrong with the following?
-    my %new = map { $userstats{$_}{'Count'} => $_ } keys %userstats;
+    my %new;
+    foreach (keys %userstats) {
+       next unless (exists $userstats{$_}{'Count'});
+       $new{$_} = $userstats{$_}{'Count'};
+    }
+
     my($count) = (sort { $b <=> $a } keys %new)[0];
     if ($count) {
-       $reply .= ".  \002$new{$count}\002 has said the most with a total of \002$count\002 messages";
+       $reply .= ".  \002$count\002 has said the most with a total of \002$new{$count}\002 messages";
     }
     &pSReply("$reply.");
 }
@@ -167,14 +173,14 @@ sub cmdstats {
 
     my %countstats;
     foreach (keys %cmdstats) {
-       $countstats{$cmdstats{$_}}{$_} = 1;
+       $countstats{ $cmdstats{$_} }{$_} = 1;
     }
 
     foreach (sort {$b <=> $a} keys %countstats) {
        my $int = $_;
        next unless ($int);
 
-       foreach (keys %{$countstats{$int}}) {
+       foreach (keys %{ $countstats{$int} }) {
            push(@array, "\002$int\002 of $_");
        }
     }
@@ -406,6 +412,66 @@ sub DNS {
     &performReply($result);
 }
 
+sub countryStats {
+    if (exists $cache{countryStats}) {
+       &msg($who,"countrystats is already running!");
+       return;
+    }
+
+    if ($chan eq "") {
+       $chan = $_[0];
+    }
+
+    if ($chan eq "") {
+       &help("countrystats");
+       return;
+    }
+
+    &rawout("WHO $chan");
+    $cache{countryStats}{chan} = $chan;
+    $cache{countryStats}{mtype}        = $msgType;
+    $cache{countryStats}{who}  = $who;
+    $cache{on_who_Hack}                = 1;
+}
+
+sub do_countrystats {
+    $chan      = $cache{countryStats}{chan};
+    $msgType   = $cache{countryStats}{mtype};
+    $who       = $cache{countryStats}{who};
+
+    my $total  = 0;
+    my %cstats;
+    foreach (keys %{ $cache{nuhInfo} }) {
+       my $h = $cache{nuhInfo}{$_}{Host};
+
+       if ($h =~ /^.*\.(\D+)$/) {      # host
+           $cstats{$1}++;
+       } else {                        # ip
+           $cstats{unresolve}++;
+       }
+       $total++;
+    }
+    my %count;
+    foreach (keys %cstats) {
+       $count{ $cstats{$_} }{$_} = 1;
+    }
+
+    my @list;
+    foreach (sort {$b <=> $a} keys %count) {
+       my $str = join(", ", sort keys %{ $count{$_} });
+#      push(@list, "$str ($_)");
+       my $perc        = sprintf("%.01f", 100 * $_ / $total);
+       $perc           =~ s/\.0+$//;
+       push(@list, "$str ($_, $perc %)");
+    }
+
+    # todo: move this into a scheduler like nickometer
+    $msgType   = "private";
+    &pSReply( &formListReply(0, "Country Stats ", @list) );
+
+    delete $cache{countryStats};
+    delete $cache{on_who_Hack};
+}
 
 ###
 ### amalgamated commands.
@@ -414,7 +480,10 @@ sub DNS {
 sub userCommands {
     # conversion: ascii.
     if ($message =~ /^(asci*|chr) (\d+)$/) {
-       return unless (&IsParam("allowConv"));
+       &DEBUG("ascii/chr called ...");
+       return unless (&hasParam("allowConv"));
+
+       &DEBUG("ascii/chr called");
 
        $arg    = $2;
        $result = chr($arg);
@@ -426,10 +495,16 @@ sub userCommands {
     }
 
     # conversion: ord.
-    if ($message =~ /^ord (.)$/) {
-       return unless (&IsParam("allowConv"));
+    if ($message =~ /^ord(\s+(.*))$/) {
+       return unless (&hasParam("allowConv"));
+
+       $arg = $2;
+
+       if (!defined $arg or length $arg != 1) {
+           &help("ord");
+           return;
+       }
 
-       $arg = $1;
        if (ord($arg) < 32) {
            $arg = chr(ord($arg) + 64);
            if ($arg eq chr(64)) {
@@ -445,7 +520,7 @@ sub userCommands {
 
     # hex.
     if ($message =~ /^hex(\s+(.*))?$/i) {
-       return unless (&IsParam("allowConv"));
+       return unless (&hasParam("allowConv"));
        my $arg = $2;
 
        if (!defined $arg) {
@@ -635,10 +710,10 @@ sub userCommands {
 
        my $connectivity = 100 * ($total_time - $ircstats{'OffTime'}) /
                                $total_time;
-       my $p = sprintf("%.02f", $connectivity);
+       my $p = sprintf("%.03f", $connectivity);
        $p =~ s/(\.\d*)0+$/$1/;
        if ($p =~ s/\.0$//) {
-           &DEBUG("p sar not working properly :(");
+           # this should not happen... but why...
        } else {
            $p =~ s/\.$//
        }
@@ -662,7 +737,7 @@ sub userCommands {
        ### REASON.
        my $reason = $ircstats{'DisconnectReason'};
        if (defined $reason) {
-           $reply .= "  I was last disconnected for '$reason'.";
+           $reply .= ".  I was last disconnected for '$reason'.";
        }
 
        &pSReply($reply);