diff options
Diffstat (limited to 'scripts/verstats.pl')
| -rw-r--r-- | scripts/verstats.pl | 81 | 
1 files changed, 81 insertions, 0 deletions
| diff --git a/scripts/verstats.pl b/scripts/verstats.pl new file mode 100644 index 0000000..c40195c --- /dev/null +++ b/scripts/verstats.pl @@ -0,0 +1,81 @@ +use strict; + +use vars qw($VERSION %IRSSI); +$VERSION = "20030208"; +%IRSSI = ( +    authors     => "Stefan 'tommie' Tomanek", +    contact     => "stefan\@pico.ruhr.de", +    name        => "VerStats", +    description => "Draws a diagram of the used clients in a channel", +    license     => "GPLv2", +    url         => "http://scripts.irssi.org", +    changed     => "$VERSION", +    commands	=> "verstats" +); + + +use Irssi; + +use vars qw(%clients $timeout); + +sub draw_box ($$$$) { +    my ($title, $text, $footer, $colour) = @_; +    my $box = ''; +    $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n"; +    foreach (split(/\n/, $text)) { +        $box .= '%R|%n '.$_."\n"; +    } +    $box .= '%R`--<%n'.$footer.'%R>->%n'; +    $box =~ s/%.//g unless $colour; +    return $box; +}    + + +sub sig_ctcp_reply_version ($$$$$) { +    my ($server, $args, $nick, $addr, $target) = @_; +    return unless $timeout; +    Irssi::timeout_remove($timeout); +    if ($args =~ /^(.*?)( |\/|$)/) { +	my $client = lc($1); +	$client =~ s/^[^\w]//; +	$client =~ s/%.//g; +	#$clients{$client} = 0 unless defined $clients{$client}; +	push @{$clients{$client}}, $nick; +    } +    $timeout = Irssi::timeout_add(5000, \&finished, undef); +} + +sub finished { +    my $max=0; +    foreach (keys %clients) { +	$max = @{$clients{$_}} if $max < @{$clients{$_}}; +    } +    return if $max == 0; +    my $width = 60; +    my $block = $width/$max; +    my $text; +    foreach (sort {@{$clients{$b}} <=> @{$clients{$a}}} keys %clients) { +	s/%/%%/g; +	$text .= "'".$_."'".': '.@{$clients{$_}}."\n"; +	my $bar = '#'x(($block * @{$clients{$_}})-1); +	$text .= $bar.">\n"; +	#$text .= $_.' ' foreach (@{$clients{$_}}); +	#$text .= "\n"; +    } +    %clients = (); +    print CLIENTCRAP draw_box('VerStats', $text, 'stats', 1); +    Irssi::timeout_remove($timeout); +    $timeout = undef; +} + +sub cmd_verstats ($$$) { +    my ($args, $server, $witem) = @_; +    return unless ($server && ref $witem && $witem->{type} eq 'CHANNEL'); +    $witem->command('ctcp '.$witem->{name}.' version'); +    $timeout = Irssi::timeout_add(5000, \&finished, undef) +} + +Irssi::signal_add('ctcp reply version' => \&sig_ctcp_reply_version); +Irssi::command_bind('verstats' => \&cmd_verstats); + +print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded'; | 
