html/wkb.pl


   1 use Irssi 20020217; # Irssi 0.8.0
   2 $VERSION = "1.1";
   3 %IRSSI = (
   4     authors     =>  "Matti 'qvr' Hiljanen",
   5     contact     =>  "matti\@hiljanen.com",
   6     name        =>  "wkb",
   7     description =>  "A simple word kickbanner",
   8     license     =>  "Public Domain",
   9     url         =>  "http://matin.maapallo.org/softa/irssi",
  10 );
  11 
  12 use strict;
  13 use Irssi;
  14 
  15 my @channels =
  16   qw(#foo #foo2);
  17 
  18 my @words =
  19   qw(bad_word bad_word2);
  20 
  21 my @gods =
  22   qw(qvr other_gods);
  23   
  24 sub sig_public {
  25     my ($server, $msg, $nick, $address, $target) = @_;
  26 
  27     return if $nick eq $server->{nick};
  28 
  29     $msg =~ s/[\000-\037]//g;
  30     my $rmsg = $msg;
  31     $msg = lc($msg);
  32 
  33     # bad word
  34     my $nono = 0;
  35     foreach (@words) { $nono = 1 if $msg =~ /$_/ }
  36     return unless $nono;
  37        
  38     # channel? 
  39     my $react = 0;
  40     foreach (@channels) { $react = 1 if lc($target) eq lc($_) }
  41     return unless $react;
  42 
  43     # god-like person?
  44     my $jumala = 0;
  45     foreach (@gods) { $jumala = 1 if lc($nick) =~ /$_/ }
  46     return if $jumala;
  47     
  48     # voiced or op'd?
  49     return if $server->channel_find($target)->nick_find($nick)->{op} || $server->channel_find($target)->nick_find($nick)->{voice};
  50 
  51     $server->command("kickban $target $nick WKB initiated");
  52     Irssi::print("Word kick: Kicking $nick from $target. (He said $rmsg)");
  53 }
  54 
  55 Irssi::signal_add_last('message public', 'sig_public');
  56 
  57