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