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