コンソール用のIRCクライアントは数はあれど、日本語が表示できないとかかゆい所に手が届かないものが多かったのですが、他の方のブログ記事で irssi というソフトを見つけました。
http://d.hatena.ne.jp/themorthem/20080702/1214998634
記事はDebianだけど、Ubuntuでも導入方法は同じ。紹介記事のプラグインで日本語表示までできました。
そんでもって、日本語でログも取れたらなぁと設定してみたものの、文字化け状態で保存されてしまってうまくいかない。仕方がないので、手抜きのロギングプラグインを作った。Perlで機能を拡張できるのもirssiの強みなのかもしれない。
use strict;
use Irssi;
use Encode;
use POSIX qw/strftime/ ;
use vars qw($VERSION %IRSSI);
$VERSION = "0.1";
%IRSSI = (
authors => 'u1f',
contact => 'u1f@outlook.jp',
name => 'logjpn.pl',
description => '日本語ロギングプラグイン',
license => 'GPL',
url => 'http://u1f.blogspot.com',
changed => '2010-11-29',
);
my $local_charset = 'UTF-8';
my $remote_charset = 'ISO-2022-JP';
my $logpath = "/home/hogehoge/.irssi/irclogs/";
my $ownnick = "hogehoge";
Irssi::print("*****\n* $IRSSI{name} $VERSION loaded.");
sub handle_public {
my ($srv, $msg, $nick, $addr, $tgt) = @_;
write_log($nick, $msg, $tgt);
}
sub handle_private {
my ($srv, $msg, $nick, $addr) = @_;
write_log($nick, $msg);
}
sub own_public {
my ($server, $msg, $tgt) = @_;
write_log($ownnick, $msg, $tgt);
}
sub own_private{
my ($server, $msg, $tgt, $orgtgt) = @_;
write_log($ownnick, $msg);
}
sub write_log {
my ($nick, $msg, $tgt) = @_ ;
$tgt ||= "->" ;
Encode::from_to($msg, $remote_charset, $local_charset );
my $day = strftime("%y-%m-%d", localtime()) ;
my $ts = strftime("%H:%M", localtime()) ;
my $lfile = $logpath . $tgt . "." . $day . ".log";
if (open(OUT, ">>$lfile")) {
print OUT "$ts <$nick> $msg\n" ;
close(OUT);
} else {
Irssi::active_win()->print("can't open file `$lfile': $! \n") ;
}
}
Irssi::signal_add_first("message own_public", "own_public") ;
Irssi::signal_add_first("message own_private", "own_private") ;
Irssi::signal_add_first("message public", "handle_public") ;
Irssi::signal_add_first("message private", "handle_private") ;