IRCにperlでアクセス

IRC経由でメッセージを送ると何かをしてくれるIRCロボットを作ってみる。
CPANに公開されているNet::IRCのおかげで、非常に簡単だ。


起動すると、とりあえず指定したチャンネルにjoinする。(ロボットが動作中かと、ニックネームの確認用)
で、プライベートメッセージを受け取ると、その内容に応じて返答したり、何かの処理を実行したりさせられる。
当然セキュリティ上問題ないよう注意しないといけないが、
自分のマシンのいろんなサービスをIRC経由で呼び出せると遊べそう。
書いたコードは以下の通り。

#!/usr/bin/perl
use Net::IRC;

my $channel = shift || "#test";  #ログインするチャンネル名
my $def_nick = shift || "irc-robot-test";  #robotのnick名

$irc = new Net::IRC;
$conn = $irc->newconn(
			  Nick => $def_nick,
			  Server => 'irc.media.kyoto-u.ac.jp',
			  Port => 6667,
			  Ircname => $def_nick);

sub on_connect {
	my ($self, $event) = @_;
	print "Joining $channel...\n";
	$self->join($channel);
	$self->schedule(1, sub {
		$self->privmsg($channel, "irc robot started.");
	});
}
sub on_msg {
	my ($self, $event) = @_;
	my @to = $event->to;
	my ($nick, $mynick) = ($event->nick, $self->nick);
	my ($arg) = $event->args;
	$arg =~ s/\s+$//;
	if ($arg =~ /^Hello/) {
		# プライベートメッセージに応じて何かする
		$self->privmsg($nick, "Hello!!!!!!");
	} else {
		$self->privmsg($nick, "$arg ?");
	}
}

sub on_nick_taken {
    my ($self) = shift;
    $self->nick($def_nick.'-'.(++$nick_n));
}

$conn->add_handler(376, \&on_connect);
$conn->add_handler(433, \&on_nick_taken);
$conn->add_handler('msg', \&on_msg);
$irc->start;