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 7use strict; 8 9use 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 22use Irssi; 23 24 25my %mix; 26my %nick; 27my %len; 28my %servers; 29 30my @valid_chars = (split //, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789[]{}`_-\\'); 31 32sub 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 40sub 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 48sub 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 70sub 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 84Irssi::command_bind("stopmix", "cmd_stopmix"); 85Irssi::command_bind("nickmix", "cmd_nickmix"); 86 87Irssi::print("Nickmix $VERSION loaded..."); 88 89Irssi::timeout_add(30000,'mixer',0); 90