html/rot13.pl
1 # rot13.pl
2 # Mariusz "Craig" Cie¶la <craig at fish.mac.edu.pl>
3 # ROT13-encodes and decodes messages on the channel :)
4
5 use strict;
6
7 use vars qw($VERSION %IRSSI);
8
9 $VERSION = "2003121202";
10
11 %IRSSI = (
12 authors => "Mariusz 'Craig' Ciesla",
13 contact => "craig\@fish.mac.edu.pl",
14 name => "rot13",
15 description => "ROT13 encoding and reverse :)",
16 license => "GPLv2",
17 changed => "$VERSION",
18 commands => "rot13 unrot13"
19 );
20
21 use Irssi 20020324;
22
23 sub text2rot ($)
24 {
25 my ($text) = @_;
26
27 $text =~ y/N-ZA-Mn-za-m/A-Za-z/;
28
29 return $text." ";
30 }
31
32 sub rot2text ($)
33 {
34 my ($text) = @_;
35
36 $text =~ y/A-Za-z/N-ZA-Mn-za-m/;
37
38 return $text;
39 }
40
41 sub rot13_decode ($$$)
42 {
43 my ($server, $target, $text) = @_;
44
45 return unless ($text =~ /(^|.*?) /g);
46 my $witem = $server->window_item_find($target);
47
48 return unless ($witem);
49 $witem->print("%B[ROT13]>>%n ".rot2text($1), MSGLEVEL_CLIENTCRAP);
50 }
51
52 sub cmd_rot13 ($$$)
53 {
54 my ($arg, $server, $witem) = @_;
55
56 if ($witem && ($witem->{type} eq 'CHANNEL' || $witem->{type} eq 'QUERY'))
57 {
58 $witem->command('MSG '.$witem->{name}.' '.text2rot($arg));
59 } else {
60 print CLIENTCRAP "%B>>%n ".text2rot($arg);
61 }
62 }
63
64 sub cmd_unrot13 ($$$)
65 {
66 my ($arg, $server, $witem) = @_;
67
68 print CLIENTCRAP "%B>>%n ".rot2text($arg);
69 }
70
71 Irssi::command_bind('rot13',\&cmd_rot13);
72 Irssi::command_bind('unrot13',\&cmd_unrot13);
73
74 Irssi::signal_add('message public',sub {rot13_decode($_[0], $_[4], $_[1]);} );
75 Irssi::signal_add('message own_public',sub {rot13_decode($_[0], $_[2], $_[1]);});
76
77 print "%B>>%n ".$IRSSI{name}." ".$VERSION." loaded";