banaffects.pl
use strict;
use Irssi;
use Irssi::Irc;
use vars qw($VERSION %IRSSI);
$VERSION = "0.2";
%IRSSI = (
authors => 'Valentin Batz',
contact => 'senneth@irssi.org',
name => 'banaffects',
description => 'shows affected nicks by a ban on a new ban',
url => 'http://www.oberkommando.org/~senneth/irssi/scripts/',
licence => 'GPLv2',
revision => '$LastChangedRevision: 369 $',
changed => '$LastChangedDate: 2006-01-31 22:35:03 +0100 (Tue, 31 Jan 2006) $',
version => $VERSION,
);
Irssi::theme_register([ 'ban_affects', 'Ban {hilight $0} affects: {hilight $1-}']);
sub ban_new() {
#print "@_";
my ($chan, $ban) = @_;
return unless $chan;
my $server = $chan->{server};
my $banmask = $ban->{ban};
my $window = $server->window_find_item($chan->{name});
my @matches;
foreach my $nick ( sort ( $chan->nicks() ) ) {
if (Irssi::mask_match_address( $banmask, $nick->{nick}, $nick->{host} )) {
push (@matches, $nick->{nick});
}
}
my $nicks = join(", ", @matches);
$window->printformat(MSGLEVEL_CRAP, 'ban_affects', $banmask, $nicks) if ($nicks ne '');
}
Irssi::signal_add('ban new', \&ban_new);
sub test_ban() {
my ($arg, $server, $witem) = @_;
return unless (defined $witem && $witem->{type} eq 'CHANNEL');
my $chan = $server->channel_find($witem->{name});
my @matches;
foreach my $nick ( sort ( $chan->nicks() ) ) {
if (Irssi::mask_match_address( $arg, $nick->{nick}, $nick->{host} )) {
push (@matches, $nick->{nick});
}
}
my $nicks = join(", ", @matches);
$witem->printformat(MSGLEVEL_CRAP, 'ban_affects', $arg, $nicks) if ($nicks ne '');
}
Irssi::command_bind('banaffects', \&test_ban);