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;