html/nickmix-c0ffee.pl


   1 # Nickmix - Perturbates your nick to avoid being collided of be split-riders
   2 #	    trying to guess your nick (this normally includes banning them
   3 #	    and setting the channel +i)
   4 #
   5 
   6 
   7 use strict;
   8 
   9 use vars qw ($VERSION %IRSSI);
  10 
  11 $VERSION = 'v0.1';
  12 %IRSSI = (
  13           name        => 'nickmix-c0ffee',
  14           authors     => 'c0ffee',
  15           contact     => 'c0ffee@penguin-breeder.org',
  16           url         => 'http://www.penguin-breeder.org/irssi/',
  17           license     => 'GPLv2, not later',
  18           description => 'Perturbates your nick, use /nickmix nick/len where len is the number of chars you want to keep from your orig nick. use /stopmix to stop. Always issue the commands in a window of the server you want to mix in.'
  19          );
  20 
  21 
  22 use Irssi;
  23 
  24 
  25 my %mix;
  26 my %nick;
  27 my %len;
  28 my %servers;
  29 
  30 my @valid_chars = (split //, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789[]{}`_-\\');
  31 
  32 sub nickmix {
  33   my ($data, $mask, $cnt) = @_;
  34 
  35   $data =~ s/$mask/"$1" . join "", (map { $valid_chars[rand @valid_chars] } (1..$cnt))/e;
  36   return $data;
  37 
  38 }
  39 
  40 sub mixer {
  41   my $new_nick;
  42   
  43   $new_nick = nickmix($nick{$_},"(.\{$len{$_}\}).*",length($nick{$_}) - $len{$_}),
  44   $servers{$_}->command("NICK $new_nick") foreach (keys %mix);
  45 
  46 }
  47 
  48 sub cmd_nickmix {
  49   my ($data, $server, $channel) = @_;
  50 
  51   Irssi::print("Not connected to a server."), return if not $server;
  52 
  53   if ($data eq "") {
  54     Irssi::print "mixing $nick{$_} on $servers{$_}->{chatnet}" foreach (keys %mix);
  55     return;
  56   }
  57 
  58   Irssi::print("Invalid format: usage: /nickmix nick/keep (keep is an int)"),
  59     return if $data !~ /^\S+\/\d+$/;
  60 
  61   $mix{$server->{chatnet}} = $data;
  62 
  63   ($nick{$server->{chatnet}},$len{$server->{chatnet}}) = $data =~ /^(\S+)\/(\d+)$/;
  64   $servers{$server->{chatnet}} = $server;
  65 
  66   Irssi::print("Now mixing $nick{$server->{chatnet}} on $server->{chatnet}");
  67 
  68 }
  69 
  70 sub cmd_stopmix {
  71 
  72   my ($data, $server, $channel) = @_;
  73 
  74   Irssi::print("Not connected to a server."), return if not $server;
  75 
  76 
  77   Irssi::print("Invalid format: usage: /stopmix"),
  78     return if $data !~ /^\s*$/;
  79 
  80   Irssi::print("Stop mixing $nick{$server->{chatnet}} on $server->{chatnet}");
  81   delete $mix{$server->{chatnet}};
  82 }
  83 
  84 Irssi::command_bind("stopmix", "cmd_stopmix");
  85 Irssi::command_bind("nickmix", "cmd_nickmix");
  86 
  87 Irssi::print("Nickmix $VERSION loaded...");
  88 
  89 Irssi::timeout_add(30000,'mixer',0);