html/foo.pl
1 use strict;
2 use vars qw($VERSION %IRSSI);
3
4 use Irssi qw(command_bind signal_add signal_emit signal_stop);
5
6 $VERSION = '3.00';
7 %IRSSI = (
8 authors => 'Juerd, Shiar',
9 contact => 'juerd@juerd.nl, shiar@shiar.org',
10 name => 'UeberRot encryption',
11 description => 'Rot n+i encryption and decryption',
12 license => 'Public Domain',
13 url => 'http://juerd.nl/site.plp/irssi',
14 changed => 'Tue Jan 21 01:40 CET 2003',
15 );
16
17 my $char1 = "\xC0-\xCF\xD2-\xD6\xD8-\xDD";
18 my $char2 = "\xE0-\xF6\xF8-\xFF";
19
20 sub rot {
21 my ($dir, $rotABC, $rot123, $rotshift, $msg) = @_;
22 my $i = 0;
23 for (0 .. length $msg) {
24 my $char = \substr $msg, $_, 1;
25 $i += $rotshift;
26 $$char =~ tr/a-zA-Z/b-zaB-ZA/ for 1..abs $dir *26 - ($rotABC + $i) % 26;
27 $$char =~ tr/0-9/1-90/ for 1..abs $dir *10 - ($rot123 + $i) % 10;
28 }
29 return $msg;
30 }
31
32 sub sig_message {
33 my $signal = shift;
34 my $msg = \$_[1];
35 return unless $$msg =~ s/^\cO(\cB+)\cO(\cB+)\cO(\cO*)//;
36 my $orig = $$msg;
37 $$msg = "\cB" . rot 1, length $1, length $2, length $3, $$msg;
38 $$msg =~ s{\c_\c_\cO([a-zA-Z])}<
39 my $char = $1;
40 eval qq{
41 \$char =~ tr/A-Z/$char1/;
42 \$char =~ tr/a-z/$char2/;
43 };
44 $char;
45 >ego;
46 signal_stop;
47 signal_emit($signal, $_[0], $orig, @_[2..$#_]);
48 signal_emit($signal, @_);
49 }
50
51 command_bind rot => sub {
52 my ($data, $server, $window) = @_;
53 $data =~ s/([$char1$char2])/\c_\c_\cO$1/og;
54 eval qq{
55 \$data =~ tr/$char1/A-Z/;
56 \$data =~ tr/$char2/a-z/;
57 };
58 my $rotABC = 1 + int rand 13;
59 my $rot123 = 1 + 2 * int rand 4;
60 my $rotshift = 1 + int rand 10;
61 $window->command(
62 sprintf "say \cO%s\cO%s\cO%s%s",
63 "\cB" x $rotABC,
64 "\cB" x $rot123,
65 "\cO" x $rotshift,
66 rot 0, $rotABC, $rot123, $rotshift, $data
67 );
68 };
69
70 signal_add {
71 'message private' => sub { sig_message 'message private' => @_ },
72 'message public' => sub { sig_message 'message public' => @_ },
73 'message own_private' => sub { sig_message 'message own_private' => @_ },
74 'message own_public' => sub { sig_message 'message own_public' => @_ },
75 };