From 8714b27669ec7032a31ef88a8c8c451bcee56552 Mon Sep 17 00:00:00 2001
From: David Phillips <david@sighup.nz>
Date: Thu, 12 Oct 2017 14:14:45 +1300
Subject: Add antiflood module, expose $irc to modules

---
 plugin/antiflood.pm | 39 +++++++++++++++++++++++++++++++++++++++
 plugin/tittilate.pm |  2 +-
 plugin/url_title.pm |  2 +-
 3 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 plugin/antiflood.pm

(limited to 'plugin')

diff --git a/plugin/antiflood.pm b/plugin/antiflood.pm
new file mode 100644
index 0000000..d9326ba
--- /dev/null
+++ b/plugin/antiflood.pm
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl
+
+package plugin::antiflood;
+
+use strict;
+use warnings;
+
+my $message_count = 5;
+my $message_period = 11;
+
+
+my %config;
+my %lastmsg = ();
+
+sub configure {
+	my $self = $_[0];
+	my $cref = $_[1];
+	%config = %$cref;
+	return $self;
+}
+
+sub message {
+	my ($self, $logger, $me, $who, $where, $raw_what, $what, $irc) = @_;
+	my $channel = $where->[0];
+	my $nick = (split /!/, $who)[0];
+
+	my $now = time();
+	push @{$lastmsg{$nick}}, $now;
+
+	# FIXME limit buffer size to 5
+	if (@{$lastmsg{$nick}} >= $message_count) {
+		my $first = @{$lastmsg{$nick}}[0];
+		if ($now - $first <= $message_period) {
+			$irc->yield(kick => $channel => $nick => "Flood");
+		}
+	}
+	return;
+}
+1;
diff --git a/plugin/tittilate.pm b/plugin/tittilate.pm
index 51253ec..7a1ecd5 100644
--- a/plugin/tittilate.pm
+++ b/plugin/tittilate.pm
@@ -15,7 +15,7 @@ sub configure {
 }
 
 sub message {
-	my ($self, $logger, $me, $who, $where, $raw_what, $what) = @_;
+	my ($self, $logger, $me, $who, $where, $raw_what, $what, $irc) = @_;
 	my $gathered = "";
 	my @expressions = (keys %{$config{triggers}});
 	my $expression = join '|', @expressions;
diff --git a/plugin/url_title.pm b/plugin/url_title.pm
index 1c376df..9deaae2 100644
--- a/plugin/url_title.pm
+++ b/plugin/url_title.pm
@@ -18,7 +18,7 @@ sub configure {
 
 sub message
 {
-	my ($self, $logger, $me, $who, $where, $raw_what, $what) = @_;
+	my ($self, $logger, $me, $who, $where, $raw_what, $what, $irc) = @_;
 	my $url;
 
 	if ($what =~ /(https?:\/\/[^ ]+)/i) {
-- 
cgit v1.1