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");