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
67
68
|
use strict;
use Irssi 20020217; # Irssi 0.8.0
use vars qw($VERSION %IRSSI);
$VERSION = "1.2";
%IRSSI = (
authors => "Matti 'qvr' Hiljanen",
contact => "matti\@hiljanen.com",
name => "wkb",
description => "A simple word kickbanner",
license => "Public Domain",
url => "http://matin.maapallo.org/softa/irssi",
);
use Irssi;
my @channels;
my @words;
my @gods;
sub sig_public {
my ($server, $msg, $nick, $address, $target) = @_;
return if $nick eq $server->{nick};
$msg =~ s/[\000-\037]//g;
my $rmsg = $msg;
$msg = lc($msg);
# bad word
my $nono = 0;
foreach (@words) { $nono = 1 if $msg =~ /$_/ }
return unless $nono;
# channel?
my $react = 0;
foreach (@channels) { $react = 1 if lc($target) eq lc($_) }
return unless $react;
# god-like person?
my $jumala = 0;
foreach (@gods) { $jumala = 1 if lc($nick) =~ /$_/ }
return if $jumala;
# voiced or op'd?
return if $server->channel_find($target)->nick_find($nick)->{op} || $server->channel_find($target)->nick_find($nick)->{voice};
$server->command("kickban $target $nick WKB initiated");
Irssi::print("Word kick: Kicking $nick from $target. (He said $rmsg)");
}
sub sig_setup_changed {
@channels= split(/\s+/, Irssi::settings_get_str($IRSSI{name}.'_channels'));
@words= split(/\s+/, Irssi::settings_get_str($IRSSI{name}.'_words'));
@gods= split(/\s+/, Irssi::settings_get_str($IRSSI{name}.'_gods'));
}
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_channels', '#foo #foo2');
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_words', 'bad_word bad_word2');
Irssi::settings_add_str($IRSSI{name}, $IRSSI{name}.'_gods', 'qvr other_gods');
Irssi::signal_add_last('message public', 'sig_public');
Irssi::signal_add('setup changed', 'sig_setup_changed');
sig_setup_changed();
# vim:set ts=4 sw=4 expandtab:
|