diff options
| author | David Phillips <david@sighup.nz> | 2018-01-03 20:33:11 +1300 | 
|---|---|---|
| committer | David Phillips <david@sighup.nz> | 2018-01-03 20:33:11 +1300 | 
| commit | afe5fc41fa45b4fbc2b12103f7e8bbb4e1dc706a (patch) | |
| tree | 005c9dde3ca5a83badea4e3aa0a2d03bea140ebf | |
| parent | 1e004d22dbccdfff4d8cce8a4c12bd0fe6a49a81 (diff) | |
| download | idalius-afe5fc41fa45b4fbc2b12103f7e8bbb4e1dc706a.tar.xz | |
Ignore users who summon responses from bot too quickly
| -rwxr-xr-x | idalius.pl | 22 | 
1 files changed, 22 insertions, 0 deletions
@@ -13,6 +13,7 @@ use Module::Pluggable search_path => "plugin", instantiate => 'configure';  my $config_file = "bot.conf";  my %config = config_file::parse_config($config_file); +my %laststrike = ();  $| = 1; @@ -75,6 +76,26 @@ sub log_info {  	print "$stamp | @_\n";  } +# Add a strike against a nick for module flood protection +# This differs from antiflood.pm in that it is used only for when users have +# triggered a response from the bot. +sub strike_add { +	my $strike_count = 15; +	my $strike_period = 30; + +	my ($nick) = @_; +	my $now = time(); +	push @{$laststrike{$nick}}, $now; +	if (@{$laststrike{$nick}} >= $strike_count) { +		@{$laststrike{$nick}} = splice @{$laststrike{$nick}}, 1, $strike_count - 1; +		my $first = @{$laststrike{$nick}}[0]; +		if ($now - $first <= $strike_period) { +			log_info "Ignoring $nick because of command flood\n"; +			push @{$config{ignore}}, $nick; +		} +	} +} +  sub _start {  	my $heap = $_[HEAP];  	my $irc = $heap->{irc}; @@ -128,6 +149,7 @@ sub irc_public {  	for my $module (@plugin_list) {  		my $stripped_what = strip_color(strip_formatting($what));  		my $output = $module->message(\&log_info, $irc->nick_name, $who, $where, $what, $stripped_what, $irc); +		strike_add $nick if $output;  		$irc->yield(privmsg => $where => $output) if $output;  	}  | 
