diff options
Diffstat (limited to 'scripts/version-stat.pl')
| -rw-r--r-- | scripts/version-stat.pl | 87 | 
1 files changed, 87 insertions, 0 deletions
| diff --git a/scripts/version-stat.pl b/scripts/version-stat.pl new file mode 100644 index 0000000..acd2f47 --- /dev/null +++ b/scripts/version-stat.pl @@ -0,0 +1,87 @@ +#!/usr/bin/perl -w +# shows top[0-9]+ irc client versions in a channel +#  by c0ffee  +#    - http://www.penguin-breeder.org/?page=irssi + +#<scriptinfo> +use vars qw($VERSION %IRSSI); + +use Irssi 20020120; +$VERSION = "0.1"; +%IRSSI = ( +    authors	=> "c0ffee", +    contact	=> "c0ffee\@penguin-breeder.org", +    name	=> "version-stats", +    description	=> "shows top[0-9]+ irc client versions in a channel", +    license	=> "Public Domain", +    url		=> "http://www.penguin-breeder.org/?page=irssi", +    changed	=> "Sun Apr 14 17:30 GMT 2002", +); +#</scriptinfo> + +my %versions; +my $tag; +my $running = 0; + +sub version_reply { +  my ($server, $data, $nick, $addr, $target) = @_; + +  $versions{$data} = 1 + $versions{$data} if $running; + +  if (not Irssi::settings_get_bool('mute_version_reply') or not $running) { +  + +     Irssi::signal_emit("default ctcp reply", $server, "VERSION $data", $nick, $addr, $target); + +  } +  + +} + +sub show_stats { + +  my ($data) = @_; +  my @stats = map "$versions{$_},$_", sort { $versions{$b} <=> $versions{$a} } keys %versions; +  my ($top,$best,$cnt,$v,$foo,$bar); +  $running = 0; + +  ($top,$best) = $data =~ /(.*)\/(.*)/; + +  Irssi::print("VERSION stats:"); +  +  Irssi::timeout_remove($tag); + +  foreach (1..$top) { +    last if not defined $stats[$_ - 1]; +    ($cnt,$v) = $stats[$_ - 1] =~ /(.*?),(.*)/; +    $bar = $cnt * 20 / $best; +    $foo = "|" x $bar . "." x (20 - $bar), +    Irssi::print("$_. [$foo]: ($cnt) $v"); +  } +   +} + +sub cmd_vstat { +  my ($data, $server, $channel) = @_; +  my ($period, $top,@nicks,$num); + +  Irssi::print("usage: /vstat period-in-secs top-n"), return +    if not (($period, $top) = $data =~ /(\d+)\s+(\d+)/); + +  @nicks = $channel->nicks(); + +  $num = @nicks; + +  $tag = Irssi::timeout_add($period * 1000, 'show_stats', "$top/$num"); + +  undef %versions; +  $running = 1; + +  $server->send_raw("PRIVMSG $channel->{name} :\001VERSION\001"); +  Irssi::print("Starting version collection in $channel->{name}"); + +} + +Irssi::signal_add_last('ctcp reply version', 'version_reply'); +Irssi::command_bind('vstat', 'cmd_vstat'); +Irssi::settings_add_bool('misc', 'mute_version_reply', 1); | 
