1use strict; 2use vars qw($VERSION %IRSSI); 3use Irssi; 4 5$VERSION = "1.11"; 6%IRSSI = ( 7 authors => "Rick (strlen) Jansen", 8 contact => "strlen\@shellz.nl", 9 name => "cloneprot", 10 description => "Parses OperServ notices to make autokill aliases from clonewarnings", 11 license => "GPL/1", 12 url => "http://www.shellz.nl/", 13 changed => "Wed Mar 13 20:26:46 CET 2002", 14); 15 16my ($lastmask, $clones, $trig, $hostmask, $username, $hostname); 17 18sub event_callback { 19 my ($server, $data, $sender, $address) = @_; 20 my $count = 0; 21 if ($sender eq $server->{address}) { 22 if ($data =~ /from OperServ: CLONES\((\d+)\): /) { 23 $clones = $1; 24 $trig = $clones + 2; 25 if ($data =~ /((\S+)\@(\S+))/) { 26 $hostmask = $1; 27 $username = $2; 28 $hostname = $3; 29 if ($hostmask eq $lastmask) { 30 $count++; 31 Irssi::print("[Warning #$count] $clones clones."); 32 Irssi::print("[[/tk (1h)] - [/ak 1|2 (6h)] - [/tr ($trig)] - [/cw 1|2 (/who)]]"); 33 } else { 34 $server->command("/who $hostname"); 35 Irssi::print("[Warning #1: $clones clones."); 36 Irssi::print("[1: $hostmask] - [2: $hostname]"); 37 Irssi::print("[[/tk (1h)] - [/ak 1|2 (6h)] - [/tr ($trig)] - [/cw 1|2 (/who)]]"); 38 $count=1; 39 } 40 Irssi::signal_stop(); 41 } 42 } 43 } 44} 45 46sub cw_callback { 47 my ($mode,$server) = @_; 48 if ($mode == 1) { 49 $server->command("/who $hostmask"); 50 } elsif ($mode == 2) { 51 $server->command("/who $hostname"); 52 } else { 53 Irssi::print("Usage: /cw 1|2"); 54 } 55} 56 57sub tk_callback { 58 my ($null,$server) = @_; 59 $server->command("/msg operserv tempakill $hostname Don't clone on SorceryNet."); 60} 61 62sub ak_callback { 63 my ($mode,$server) = @_; 64 if ($mode == 1) { 65 $server->command("/msg operserv autokill 6 $hostmask Don't clone on SorceryNet."); 66 } elsif ($mode == 2) { 67 $server->command("/msg operserv autokill 6 *!*\@$hostname Don't clone on SorceryNet."); 68 } else { 69 Irssi::print("Usage: /ak 1|2"); 70 } 71} 72 73sub tr_callback { 74 my ($mode,$server) = @_; 75 if ($mode == 1) { 76 $server->command("/msg operserv trigger $username\@$hostname $trig"); 77 } elsif ($mode == 2) { 78 $server->command("/msg operserv trigger $hostname $trig"); 79 } else { 80 Irssi::print("Usage: /tr 1|2"); 81 } 82} 83 84Irssi::command_bind("tk","tk_callback"); 85Irssi::command_bind("ak","ak_callback"); 86Irssi::command_bind("tr","tr_callback"); 87Irssi::command_bind("cw","cw_callback"); 88 89Irssi::signal_add("server event","event_callback"); 90