summaryrefslogtreecommitdiffstats
path: root/scripts/cloneprot.pl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 20:19:02 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 20:19:02 +0000
commit03929dac2a29664878d2c971648a4fe1fb698462 (patch)
tree02c5e2b3e006234aa29545f7a93a1ce01b291a8b /scripts/cloneprot.pl
parentInitial commit. (diff)
downloadirssi-scripts-upstream/20231031.tar.xz
irssi-scripts-upstream/20231031.zip
Adding upstream version 20231031.upstream/20231031upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'scripts/cloneprot.pl')
-rw-r--r--scripts/cloneprot.pl89
1 files changed, 89 insertions, 0 deletions
diff --git a/scripts/cloneprot.pl b/scripts/cloneprot.pl
new file mode 100644
index 0000000..2e51721
--- /dev/null
+++ b/scripts/cloneprot.pl
@@ -0,0 +1,89 @@
+use strict;
+use vars qw($VERSION %IRSSI);
+use Irssi;
+
+$VERSION = "1.11";
+%IRSSI = (
+ authors => "Rick (strlen) Jansen",
+ contact => "strlen\@shellz.nl",
+ name => "cloneprot",
+ description => "Parses OperServ notices to make autokill aliases from clonewarnings",
+ license => "GPL/1",
+ url => "http://www.shellz.nl/",
+ changed => "Wed Mar 13 20:26:46 CET 2002",
+);
+
+my ($lastmask, $clones, $trig, $hostmask, $username, $hostname);
+
+sub event_callback {
+ my ($server, $data, $sender, $address) = @_;
+ my $count = 0;
+ if ($sender eq $server->{address}) {
+ if ($data =~ /from OperServ: CLONES\((\d+)\): /) {
+ $clones = $1;
+ $trig = $clones + 2;
+ if ($data =~ /((\S+)\@(\S+))/) {
+ $hostmask = $1;
+ $username = $2;
+ $hostname = $3;
+ if ($hostmask eq $lastmask) {
+ $count++;
+ Irssi::print("[Warning #$count] $clones clones.");
+ Irssi::print("[[/tk (1h)] - [/ak 1|2 (6h)] - [/tr ($trig)] - [/cw 1|2 (/who)]]");
+ } else {
+ $server->command("/who $hostname");
+ Irssi::print("[Warning #1: $clones clones.");
+ Irssi::print("[1: $hostmask] - [2: $hostname]");
+ Irssi::print("[[/tk (1h)] - [/ak 1|2 (6h)] - [/tr ($trig)] - [/cw 1|2 (/who)]]");
+ $count=1;
+ }
+ Irssi::signal_stop();
+ }
+ }
+ }
+}
+
+sub cw_callback {
+ my ($mode,$server) = @_;
+ if ($mode == 1) {
+ $server->command("/who $hostmask");
+ } elsif ($mode == 2) {
+ $server->command("/who $hostname");
+ } else {
+ Irssi::print("Usage: /cw 1|2");
+ }
+}
+
+sub tk_callback {
+ my ($null,$server) = @_;
+ $server->command("/msg operserv tempakill $hostname Don't clone on SorceryNet.");
+}
+
+sub ak_callback {
+ my ($mode,$server) = @_;
+ if ($mode == 1) {
+ $server->command("/msg operserv autokill 6 $hostmask Don't clone on SorceryNet.");
+ } elsif ($mode == 2) {
+ $server->command("/msg operserv autokill 6 *!*\@$hostname Don't clone on SorceryNet.");
+ } else {
+ Irssi::print("Usage: /ak 1|2");
+ }
+}
+
+sub tr_callback {
+ my ($mode,$server) = @_;
+ if ($mode == 1) {
+ $server->command("/msg operserv trigger $username\@$hostname $trig");
+ } elsif ($mode == 2) {
+ $server->command("/msg operserv trigger $hostname $trig");
+ } else {
+ Irssi::print("Usage: /tr 1|2");
+ }
+}
+
+Irssi::command_bind("tk","tk_callback");
+Irssi::command_bind("ak","ak_callback");
+Irssi::command_bind("tr","tr_callback");
+Irssi::command_bind("cw","cw_callback");
+
+Irssi::signal_add("server event","event_callback");