+ # step 1.
+ my %nickometer;
+ foreach (keys %{ $::channels{lc $term}{''} }) {
+ my $str = $_;
+ if (!defined $str) {
+ &WARN("nickometer: nick in chan $term undefined?");
+ next;
+ }
+
+ my $value = &nickometer($str);
+ $nickometer{$value}{$str} = 1;
+ }
+
+ # step 2.
+ ### TODO: compact with map?
+ my @list;
+ foreach (sort {$b <=> $a} keys %nickometer) {
+ my $str = join(", ", sort keys %{ $nickometer{$_} });
+ push(@list, "$str ($_%)");
+ }
+
+ &::performStrictReply( &::formListReply(0, "Nickometer list for $term ", @list) );
+
+ return;
+ }
+
+ my $percentage = &nickometer($term);
+
+ if ($percentage =~ /NaN/) {
+ $percentage = "off the scale";
+ } else {
+ $percentage = sprintf("%0.4f", $percentage);
+ $percentage =~ s/(\.\d+)0+$/$1/;
+ $percentage .= '%';
+ }
+
+ if ($::msgType eq 'public') {
+ &::say("'$term' is $percentage lame, $::who");
+ } else {
+ &::msg($::who, "the 'lame nick-o-meter' reading for $term is $percentage, $::who");
+ }
+
+ return;
+}
+
+sub nickometer ($) {
+ my ($text) = @_;