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