&addCmdHook("extra", 'uptime', ('CODEREF' => 'uptime', 'Identifier' => 'uptime',
'Cmdstats' => 'Uptime') );
&addCmdHook("extra", 'nullski', ('CODEREF' => 'nullski', ) );
-&addCmdHook("extra", 'crash', ('CODEREF' => 'crash' ) );
-sub nullski { my ($arg) = @_; foreach (`$arg`) { &msg($who,$_); } }
+ sub nullski { my ($arg) = @_; foreach (`$arg`) { &msg($who,$_); } }
&addCmdHook("extra", '(fm|freshmeat)', ('CODEREF' => 'Freshmeat::Freshmeat',
'Identifier' => 'freshmeat', 'Cmdstats' => 'Freshmeat',
'Forker' => 1, 'Help' => 'freshmeat') );
+&addCmdHook("extra", 'verstats', ('CODEREF' => 'do_verstats' ) );
+
###
### END OF ADDING HOOKS.
###
&loadMyModule($myModules{'nickometer'});
if ($term =~ /^$mask{chan}$/) {
- &DEBUG("nickometer: term == chan.");
+ &status("Doing nickometer for chan $term.");
if (!&validChan($term)) {
&msg($who, "error: channel is invalid.");
# step 1.
my %nickometer;
foreach (keys %{ $channels{lc $term}{''} }) {
- if (!defined $_) {
- &WARN("nickometer: _ is undefined.");
+ my $value = &nickometer($_);
+
+ if (!defined $value) {
+ &WARN("nickometer: value is undefined.");
next;
}
+ &DEBUG("value => $value.");
- my $value = &nickometer($_);
$nickometer{$value}{$_} = 1;
}
+
# step 2.
### TODO: compact with map?
my @list;
foreach (sort {$a <=> $b} keys %nickometer) {
my $str = join(", ", sort keys %{$nickometer{$_}});
- push(@list, "$str ($_)");
+ push(@list, "$str ($_ %)");
}
&pSReply( &formListReply(0, "Nickometer list for $term ", @list) );
+ &DEBUG("test.");
return;
}
&::performStrictReply( &::formListReply(0, "New debian packages:", @new) );
}
+sub do_verstats {
+ my ($chan) = @_;
+
+ if (!defined $chan) {
+ &help("verstats");
+ return;
+ }
+
+ if (!&validChan($chan)) {
+ &pSReply("chan $chan is invalid.");
+ return;
+ }
+
+ if (scalar keys %ver or scalar @vernick) {
+ &DEBUG("verstats already in progress.");
+ return;
+ }
+
+ &msg($who, "Sending CTCP VERSION...");
+ $conn->ctcp("VERSION", $chan);
+ $conn->schedule(60, sub {
+ my $vtotal = 0;
+ my $total = keys %{ $channels{lc $chan}{''} };
+
+ foreach (keys %ver) {
+ $vtotal += scalar keys %{ $ver{$_} };
+ }
+
+ my %sorted;
+ my $unknown = $total - $vtotal;
+ my $perc = sprintf("%.1f", $unknown * 100 / $total);
+ $sorted{$perc} = "unknown/cloak - $unknown ($perc %)";
+ $perc =~ s/.0$//;
+
+ foreach (keys %ver) {
+ my $count = scalar keys %{ $ver{$_} };
+ $perc = sprintf("%.01f", $count * 100 / $total);
+ $perc =~ s/.0$//; # lame compression.
+
+ if (exists $sorted{$perc}) {
+ &WARN("sorted{$perc} already exists; FIXME.");
+ }
+
+ $sorted{$perc} = "$_ - $count ($perc %)";
+ }
+
+ ### can be compressed to a map?
+ my @list;
+ foreach ( sort { $a <=> $b } keys %sorted ) {
+ push(@list, $sorted{$_});
+ }
+
+ &pSReply( &formListReply(0, "IRC Client versions for $chan ", @list) );
+
+ # clean up not-needed data structures.
+ undef %ver;
+ undef @vernick;
+ } );
+
+ return;
+}
+
1;