Guest User

Spam_Block.pl

a guest
Jul 11th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.88 KB | None | 0 0
  1. #
  2. # spamblocker.pl
  3. #
  4. # Automatically block spammers from chat
  5. #
  6.  
  7. package SpamBlocker;
  8.  
  9. use strict;
  10. use Plugins;
  11. use Globals;
  12. use Log qw(message error);
  13.  
  14. Plugins::register("spamblocker", "Spam Blocker Plugin", \&unloadFunc, \&reloadFunc);
  15. my $plugHook = Plugins::addHook("ChatQueue::add", \&onMessage);
  16. my $cmdHooks = Commands::register(
  17.   ['block', "Block user from chat", \&onCommand],
  18.   ['unblock', "Unblock user from chat", \&onCommand]
  19. );
  20.  
  21. sub unloadFunc {
  22.   Plugins::delHook($plugHook);
  23.   Commands::unregister($cmdHooks);
  24. }
  25.  
  26. sub reloadFunc {
  27.   &unloadFunc;
  28. }
  29.  
  30. my %userHistory = ();
  31. my %blackList = ();
  32. my %whiteList = ();
  33.  
  34. my $threshold_msg = 8;
  35. my $threshold_sec = 5;
  36.  
  37. sub block {
  38.   my $player = shift;
  39.  
  40.   Commands::run("ignore 1 $player");
  41.   delete $userHistory{$player};
  42.   delete $whiteList{$player};
  43.   $blackList{$player} = undef;
  44.   message "Player $player added to block list.\n";
  45. }
  46.  
  47. sub unblock {
  48.   my $player = shift;
  49.  
  50.   Commands::run("ignore 0 $player");
  51.   delete $blackList{$player};
  52.   $whiteList{$player} = undef;
  53.   message "Player $player removed from block list.\n";
  54. }
  55.  
  56. sub onMessage {
  57.   my $data = $_[1]; #type, userID, user, msg, time
  58.  
  59.   return if exists($whiteList{$data->{user}}) or exists($blackList{$data->{user}});
  60.  
  61.   # increase message count in a second
  62.   if(exists($userHistory{$data->{user}}) && $data->{time}-$userHistory{$data->{user}}[0]<$threshold_sec) {
  63.     $userHistory{$data->{user}}[1]++;
  64.   } else {
  65.     $userHistory{$data->{user}} = [($data->{time}, 1)];
  66.   }
  67.  
  68.   # block player
  69.   if($userHistory{$data->{user}}[1] >= $threshold_msg) {
  70.     block($data->{user});
  71.   }
  72.  
  73. }
  74.  
  75. sub onCommand {
  76.   my ($cmd,$player) = @_;
  77.   if(!defined($player)) {
  78.     error "Usage: $cmd <player_name>\n";
  79.   } elsif ($cmd =~ /^block$/) {
  80.     block($player);
  81.   } elsif ($cmd =~ /^unblock$/) {
  82.     unblock($player);
  83.   }
  84. }
  85.  
  86. return 1;
Advertisement
Add Comment
Please, Sign In to add comment