#!/usr/bin/perl -w # joins channel with non-utf8 non-ascii names # by c0ffee # - http://penguin-breeder.org/irssi/ # use strict; use vars qw($VERSION %IRSSI); use Irssi 20020120; $VERSION="0.2"; %IRSSI = ( authors => "c0ffee", contact => "c0ffee\@penguin-breeder.org", name => "i18n /join", description=> "Joins channels with non-utf8 non-ascii names.", license => "Public Domain", url => "http://www.penguin-breeder.org/irssi/", changed => "Sun Sep 21 12:22:24 CEST 2008", ); # use Text::Iconv; sub cmd_join18n { my ($data, $server, $channel) = @_; if (!$server || !$server->{connected}) { Irssi::print("Not connected to a server"); return; } if (!$data) { Irssi::print("No channel given"); return; } my $enc = Irssi::settings_get_str("join18n_encoding"); $enc = $1 if $data =~ /^\s*-enc\s+(\S+)/; $data =~ s/^\s*-enc\s+(\S+)//; my $converter = Text::Iconv->new("UTF-8", $enc); if (!$converter) { Irssi::print("Invalid encoding specified: $enc"); return; } $server->send_raw("JOIN " . $converter->convert($data)); } sub cmd_msg18n { my ($data, $server, $channel) = @_; if (!$server || !$server->{connected}) { Irssi::print("Not connected to a server"); return; } if (!$channel) { Irssi::print("Not in a channel"); return; } my $name = $channel->{name}; my $enc = Irssi::settings_get_str("join18n_encoding"); $enc = $1 if $data =~ /^\s*-enc\s+(\S+)/; $data =~ s/^\s*-enc\s+(\S+)//; my $converter = Text::Iconv->new("UTF-8", $enc); if (!$converter) { Irssi::print("Invalid encoding specified: $enc"); return; } Irssi::signal_emit("message own_public", $server, $data, $name); $server->send_raw("PRIVMSG " . $converter->convert($name) . " :" . $converter->convert($data)); } sub cmd_part18n { my ($data, $server, $channel) = @_; if (!$server || !$server->{connected}) { Irssi::print("Not connected to a server"); return; } if (!$channel) { Irssi::print("Not in a channel"); return; } my $name = $channel->{name}; my $enc = Irssi::settings_get_str("join18n_encoding"); $enc = $1 if $data =~ /^\s*-enc\s+(\S+)/; $data =~ s/^\s*-enc\s+(\S+)//; my $converter = Text::Iconv->new("UTF-8", $enc); if (!$converter) { Irssi::print("Invalid encoding specified: $enc"); return; } $server->send_raw("PART " . $converter->convert($name) . ($data ? " :" . $converter->convert($data) : "")); } Irssi::settings_add_str("misc", "join18n_encoding", "latin1"); Irssi::command_bind("join18n", "cmd_join18n"); Irssi::command_bind("msg18n", "cmd_msg18n"); Irssi::command_bind("part18n", "cmd_part18n");