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);