天然パーマです。

Twitterのハッシュタグ付き発言をIRCに投稿するボットをYAPC::Asia向けに作った

前夜祭も終わり(僕の発表した件とかはまた後ほどポスト)、いよいよ明日(というか今日)から YAPC::Asia 2009 開幕! てなわけでなにかと、Twitter上での YAPC に関する発言が気になったりする わけです。そこで、その状況が IRC 上でわかれば便利かと思い、 これまたコピペで AnyEvent::* を使ったボットを作ってみました。 ハッシュタグ「#yapc.asia2009」「#yapc」を Stream API からトラックして、発言があると その内容をほぼリアルタイムに IRC の yapc チャンネルに投稿します。 ソースはこちら。すっごく敏感でいい娘です♡

あ、ちなみに、前夜祭はトリを務めさせていただきましたが、 なんと明日YAPCほんちゃん1日目のLTでも最後にトークするっぽいので(しかも英語だよ!)、 2日連続トリということになります。なので、お願いいたします。 あ、弊社ワディットのトークも13:45からあるよ。こちらもよろしく!

 #!/usr/bin/perl
use strict;
use AnyEvent::IRC::Client;
use AnyEvent::Twitter::Stream;
use Encode;

my $user     = 'nanpaman';
my $password = 'hogehoge';
my $channel  = '#yapc.asia-ja';

my $cv = AnyEvent->condvar;
my $pc = AnyEvent::IRC::Client->new;
$pc->reg_cb(
    connect => sub {
        my ( $pc, $err ) = @_;
        if ( defined $err ) {
            print "Couldn't connect to server: $err\n";
        }
    },
    registered => sub {
        my ($self) = @_;
        print "registered!\n";
        $pc->enable_ping(60);
    },
    disconnect => sub {
        print "disconnected: $_[1]!\n";
    }
);
$pc->send_srv( "JOIN", $channel );
$pc->send_chan( $channel, "NOTICE", $channel, "hi" );
$pc->connect( "irc.freenode.net", 6667,
    { nick => 'twitter_bot', user => 'twitter_bot', real => 'twitter_bot' } );

my $streamer = AnyEvent::Twitter::Stream->new(
    username => $user,
    password => $password,
    method   => 'filter',
    track    => '#yapcasia2009,#yapc',
    on_tweet => sub {
        my $tweet = shift;
        $pc->send_chan( $channel, "NOTICE", $channel,
            encode( 'utf8', "$tweet->{user}{screen_name}: $tweet->{text}" ) );
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $cv->send;
    },
    on_eof => sub {
        $cv->send;
    },
);

$cv->recv;