Usage:
- block <player_name> - manually block someone
- unblock <player_name> - remove player from block list
Code: Select all
#
# spamblocker.pl
#
# Automatically block spammers from chat
#
package SpamBlocker;
use strict;
use Plugins;
use Globals;
use Log qw(message error);
Plugins::register("spamblocker", "Spam Blocker Plugin", \&unloadFunc, \&reloadFunc);
my $plugHook = Plugins::addHook("ChatQueue::add", \&onMessage);
my $cmdHooks = Commands::register(
['block', "Block user from chat", \&onCommand],
['unblock', "Unblock user from chat", \&onCommand]
);
sub unloadFunc {
Plugins::delHook($plugHook);
Commands::unregister($cmdHooks);
}
sub reloadFunc {
&unloadFunc;
}
my %userHistory = ();
my %blackList = ();
my %whiteList = ();
my $threshold_msg = 8;
my $threshold_sec = 5;
sub block {
my $player = shift;
Commands::run("ignore 1 $player");
delete $userHistory{$player};
delete $whiteList{$player};
$blackList{$player} = undef;
message "Player $player added to block list.\n";
}
sub unblock {
my $player = shift;
Commands::run("ignore 0 $player");
delete $blackList{$player};
$whiteList{$player} = undef;
message "Player $player removed from block list.\n";
}
sub onMessage {
my $data = $_[1]; #type, userID, user, msg, time
return if exists($whiteList{$data->{user}}) or exists($blackList{$data->{user}});
# increase message count in a second
if(exists($userHistory{$data->{user}}) && $data->{time}-$userHistory{$data->{user}}[0]<$threshold_sec) {
$userHistory{$data->{user}}[1]++;
} else {
$userHistory{$data->{user}} = [($data->{time}, 1)];
}
# block player
if($userHistory{$data->{user}}[1] >= $threshold_msg) {
block($data->{user});
}
}
sub onCommand {
my ($cmd,$player) = @_;
if(!defined($player)) {
error "Usage: $cmd <player_name>\n";
} elsif ($cmd =~ /^block$/) {
block($player);
} elsif ($cmd =~ /^unblock$/) {
unblock($player);
}
}
return 1;