1# Nickmix - Perturbates given nick (or just a word) in certain way.
2#
3# $Id: nickmix.pl,v 1.2 2002/02/09 22:13:12 pasky Exp pasky $
4
5
6use strict;
7
8use vars qw ($VERSION %IRSSI $rcsid);
9
10$rcsid = '$Id: nickmix.pl,v 1.2 2002/02/09 22:13:12 pasky Exp pasky $';
11($VERSION) = '$Revision: 1.2 $' =~ / (\d+\.\d+) /;
12%IRSSI = (
13          name        => 'nickmix',
14          authors     => 'Petr Baudis',
15          contact     => 'pasky@ji.cz',
16          url         => 'http://pasky.ji.cz/~pasky/dev/irssi/',
17          license     => 'GPLv2, not later',
18          description => 'Perturbates given nick (or just a word) in certain way.'
19         );
20
21
22use Irssi;
23use Irssi::Irc;
24
25
26sub cmd_nickmix {
27  my ($data) = @_;
28  my %letters; # letters hash - value is count of letters
29  my $vstr; # vowels string
30  my $str; # resulting string
31
32  # First load the whole thing into letters hash
33  map { $letters{$_}++; } split(//, $data);
34
35  # Now take the (most of/all) vowels away and compose string from them
36  foreach (qw(a e i o u y)) {
37    my $c = int rand($letters{$_} * 4 + 1);
38
39    $c = $letters{$_} if ($c > $letters{$_});
40    $letters{$_} -= $c;
41
42    for (; $c; $c--) {
43      # Either add or prepend
44      if (rand(2) < 1) {
45	$vstr .= $_;
46      } else {
47	$vstr = $_ . $vstr;
48      }
49    }
50  }
51
52  # Position of the $vstr..
53  my $vpos = int rand (3);
54
55  $str = $vstr if (not $vpos);
56
57  # Now take the rest and do the same ;)
58  foreach (keys %letters) { for (; $letters{$_}; $letters{$_}--) {
59    # Either add or prepend
60    if (rand(2) < 1) {
61      $str .= $_;
62    } else {
63      $str = $_ . $str;
64    }
65  } }
66
67  if ($vpos == 1) { $str .= $vstr; } elsif ($vpos == 2) { $str = $vstr . $str; }
68
69  Irssi::print "$data -> $str";
70}
71
72Irssi::command_bind("nickmix", "cmd_nickmix");
73
74Irssi::print("Nickmix $VERSION loaded...");
75