diff options
Diffstat (limited to 'Plugin/Antiflood.pm')
-rw-r--r-- | Plugin/Antiflood.pm | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Plugin/Antiflood.pm b/Plugin/Antiflood.pm new file mode 100644 index 0000000..4db7ace --- /dev/null +++ b/Plugin/Antiflood.pm @@ -0,0 +1,42 @@ +#!/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 $cmdref = $_[1]; + my $cref = $_[2]; + %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]; + + return if ($config{antiflood_on} == 0); + + my $now = time(); + push @{$lastmsg{$nick}}, $now; + + if (@{$lastmsg{$nick}} >= $message_count) { + @{$lastmsg{$nick}} = splice @{$lastmsg{$nick}}, 1, $message_count - 1; + my $first = @{$lastmsg{$nick}}[0]; + if ($now - $first <= $message_period) { + $irc->yield(kick => $channel => $nick => "Flood"); + } + } + return; +} +1; |