summaryrefslogtreecommitdiffstats
path: root/scripts/version-stat.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/version-stat.pl')
-rw-r--r--scripts/version-stat.pl88
1 files changed, 88 insertions, 0 deletions
diff --git a/scripts/version-stat.pl b/scripts/version-stat.pl
new file mode 100644
index 0000000..6894ab4
--- /dev/null
+++ b/scripts/version-stat.pl
@@ -0,0 +1,88 @@
+#!/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 strict;
+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);