"IRC に issue 番号に反応する bot がいると捗る" らしいので
IRC に issue 番号に反応する bot がいると捗る - handlename's blog
anysan お手軽!
use strict; use warnings; use AnySan; use AnySan::Provider::IRC; use AnyEvent::HTTP; use JSON::XS; use Try::Tiny; use HTTP::Request::Common; my $host; my $port; my $password; my $nickname; my $channel; my $owner; my $repos; my $github_user; my $github_password; my $irc = irc $host, port => $port, enable_ssl => 1, password => $password, nickname => $nickname, channels => { "#$channel" => {}, }, ; AnySan->register_listener( github_issue => { cb => sub { my $receive = shift; my @numbers = $receive->message =~ /#(\d+)/g; for my $number ( @numbers ) { my $req = GET sprintf( "https://api.github.com/repos/%s/%s/issues/%d", $owner, $repos, $number ); $req->authorization_basic($github_user, $github_password); my %headers = map { $_ => $req->header($_) } $req->headers->header_field_names; my $g; $g = http_get $req->uri, headers => \%headers, sub { my ( $body, $hdr) = @_; return unless $hdr->{Status} =~ /^2/; try { my $json = decode_json $body; $receive->send_reply( sprintf "#%d %s %s", $json->{number}, $json->{title}, $json->{html_url} ); } catch { warn $_; } finally { undef $g; }; }; } }, }, ); AnySan->run;