html/intjoin.pl


   1 #!/usr/bin/perl -w
   2 # joins channel with non-utf8 non-ascii names
   3 #   by c0ffee
   4 #     - http://penguin-breeder.org/irssi/
   5 
   6 #<scriptinfo>
   7 use vars qw($VERSION %IRSSI);
   8 
   9 use Irssi 20020120;
  10 $VERSION="0.2";
  11 %IRSSI = (
  12      authors	=> "c0ffee",
  13      contact	=> "c0ffee\@penguin-breeder.org",
  14      name	=> "i18n /join",
  15      description=> "Joins channels with non-utf8 non-ascii names.",
  16      license	=> "Public Domain",
  17      url	=> "http://www.penguin-breeder.org/irssi/",
  18      changed	=> "Sun Sep 21 12:22:24 CEST 2008",
  19 );
  20 #</scriptinfo>
  21 
  22 
  23 use Text::Iconv;
  24 
  25 sub cmd_join18n {
  26 	my ($data, $server, $channel) = @_;
  27 
  28 	if (!$server || !$server->{connected}) {
  29 		Irssi::print("Not connected to a server");
  30 		return;
  31 	}
  32 
  33 	if (!$data) {
  34 		Irssi::print("No channel given");
  35 		return;
  36 	}
  37 
  38 	$enc = Irssi::settings_get_str("join18n_encoding");
  39 
  40 	$enc = $1 if $data =~ /^\s*-enc\s+(\S+)/;
  41 	$data =~ s/^\s*-enc\s+(\S+)//;
  42 
  43 	$converter = Text::Iconv->new("UTF-8", $enc);
  44 	
  45 	if (!$converter) {
  46 		Irssi::print("Invalid encoding specified: $enc");
  47 		return;
  48 	}
  49 
  50 	$server->send_raw("JOIN " . $converter->convert($data));
  51 }
  52 
  53 sub cmd_msg18n {
  54 	my ($data, $server, $channel) = @_;
  55 
  56 	if (!$server || !$server->{connected}) {
  57 		Irssi::print("Not connected to a server");
  58 		return;
  59 	}
  60 
  61 	if (!$channel) {
  62 		Irssi::print("Not in a channel");
  63 		return;
  64 	}
  65 
  66 	$name = $channel->{name};
  67 
  68 	$enc = Irssi::settings_get_str("join18n_encoding");
  69 
  70 	$enc = $1 if $data =~ /^\s*-enc\s+(\S+)/;
  71 	$data =~ s/^\s*-enc\s+(\S+)//;
  72 
  73 	$converter = Text::Iconv->new("UTF-8", $enc);
  74 	
  75 	if (!$converter) {
  76 		Irssi::print("Invalid encoding specified: $enc");
  77 		return;
  78 	}
  79 
  80 	Irssi::signal_emit("message own_public", $server, $data, $name);
  81 	$server->send_raw("PRIVMSG " . $converter->convert($name) . " :" . $converter->convert($data));
  82 }
  83 
  84 sub cmd_part18n {
  85 	my ($data, $server, $channel) = @_;
  86 
  87 	if (!$server || !$server->{connected}) {
  88 		Irssi::print("Not connected to a server");
  89 		return;
  90 	}
  91 
  92 	if (!$channel) {
  93 		Irssi::print("Not in a channel");
  94 		return;
  95 	}
  96 
  97 	$name = $channel->{name};
  98 
  99 	$enc = Irssi::settings_get_str("join18n_encoding");
 100 
 101 	$enc = $1 if $data =~ /^\s*-enc\s+(\S+)/;
 102 	$data =~ s/^\s*-enc\s+(\S+)//;
 103 
 104 	$converter = Text::Iconv->new("UTF-8", $enc);
 105 	
 106 	if (!$converter) {
 107 		Irssi::print("Invalid encoding specified: $enc");
 108 		return;
 109 	}
 110 
 111 	$server->send_raw("PART " . $converter->convert($name) . ($data ? " :" . $converter->convert($data) : ""));
 112 }
 113 
 114 Irssi::settings_add_str("misc", "join18n_encoding", "latin1");
 115 Irssi::command_bind("join18n", "cmd_join18n");
 116 Irssi::command_bind("msg18n", "cmd_msg18n");
 117 Irssi::command_bind("part18n", "cmd_part18n");
 118