1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = "1.2";
%IRSSI = (
authors => "Roeland 'Trancer' Nieuwenhuis",
contact => "irssi\@trancer.nl",
name => "nickban",
description => "A simple nick banner. If it encounters a nick it bans its host",
license => "Public Domain"
);
use Irssi;
# The channels the nicks are banned on (on which this script is active)
my @channels;
# The banned nicks
my @nicks;
# Your kickreason
my $kickreason;
sub nick_banner {
my($server, $channel, $nick, $address) = @_;
# Are we opped?
return unless $server->channel_find($channel)->{chanop};
# If the nick is a server, stop it.
return if $nick eq $server->{nick};
# Is the user a banned nick?
my $nono = 0;
foreach (@nicks) { $nono = 1 if lc($nick) eq lc($_) }
return unless $nono;
# Is the user on one of the banned channels?
my $react = 0;
foreach (@channels) { $react = 1 if lc($channel) eq lc($_) }
return unless $react;
# User voiced or op'd?
# Pretty useless, but ok
return if $server->channel_find($channel)->nick_find($nick)->{op} || $server->channel_find($channel)->nick_find($nick)->{voice};
$server->command("kickban $channel $nick $kickreason");
Irssi::print("Nick banning $nick on $channel. Banned.");
}
sub sig_setup_changed {
@channels = split(/\s+/,Irssi::settings_get_str($IRSSI{name}.'_channels'));
@nicks = split(/\s+/,Irssi::settings_get_str($IRSSI{name}.'_nicks'));
$kickreason = Irssi::settings_get_str($IRSSI{name}.'_reason');
}
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_channels', '#worldchat #chat-world #php');
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_nicks', 'evildude evilgirl');
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_reason', "Not welcome here.");
Irssi::signal_add_last('message join', 'nick_banner');
Irssi::signal_add('setup changed', 'sig_setup_changed');
sig_setup_changed();
# vim:set ts=4 sw=4 expandtab:
|