html/cloneprot.pl
1 use strict;
2 use vars qw($VERSION %IRSSI);
3 use 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
16 my ($lastmask, $clones, $trig, $hostmask, $username, $hostname);
17
18 sub 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
46 sub 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
57 sub tk_callback {
58 my ($null,$server) = @_;
59 $server->command("/msg operserv tempakill $hostname Don't clone on SorceryNet.");
60 }
61
62 sub 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
73 sub 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
84 Irssi::command_bind("tk","tk_callback");
85 Irssi::command_bind("ak","ak_callback");
86 Irssi::command_bind("tr","tr_callback");
87 Irssi::command_bind("cw","cw_callback");
88
89 Irssi::signal_add("server event","event_callback");