Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # 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;
Advertisement
Add Comment
Please, Sign In to add comment