Mustache :{

moon indicating dark mode
sun indicating light mode

p5-hubot

...

October 04, 2012

p5-hubot scipts explained

필요해서 hubotperl 로 옮기고 있습니다. - p5-hubot

아직 해야할 일이 많지만 테스트 + 문서화를 해서 CPAN 에 올릴 생각입니다.

hubot-scripts contributors 는 100명이 넘습니다.

p5-hubot 도 도움을 받아서 멋진 기능을 장착하고 싶습니다.

CPANHubot::Scripts::* 모듈이 많아지면 좋겠습니다.

robot 에게 http://twitter.com/<username>/status/<tweetid> 의 패턴이 들리면 그 내용을 파싱해서 말하는 스크립트 입니다.

package Hubot::Scripts::tweet;
use strict;
use warnings;
use JSON::XS;
sub load {
my ( $class, $robot ) = @_;
$robot->hear(
qr/https?:\/\/(mobile\.)?twitter\.com\/.*?\/status\/([0-9]+)/i,
sub {
my $msg = shift; # Hubot::Response
$msg->http( 'https://api.twitter.com/1/statuses/show/'
. $msg->match->[1]
. '.json' )->get(
sub {
my ( $body, $hdr ) = @_;
return if ( !$body || !$hdr->{Status} =~ /^2/ );
my $tweet = decode_json($body);
$msg->send("$tweet->{user}{screen_name}: $tweet->{text}");
}
);
$msg->message->finish;
}
);
}
1;
=head1 SYNOPSIS
http://twitter.com/<username>/status/<tweetid>
=head1 DEPENDENCIES
None
=head1 CONFIGURATION
None
=head1 AUTHOR
Hyungsuk Hong
=cut
# Description:
# Detect tweet URL and send tweet content
#
# Dependencies:
# None
#
# Configuration:
# None
#
# Commands:
#
# Author:
# Vrtak-CZ
module.exports = (robot) ->
robot.hear /https?:\/\/(mobile\.)?twitter\.com\/.*?\/status\/([0-9]+)/i, (msg) ->
msg.http("https://api.twitter.com/1/statuses/show/#{msg.match[2]}.json").get() (err, res, body) ->
return if err or (res.statusCode != 200)
tweet = JSON.parse(body)
msg.send "@#{tweet.user.screen_name}: #{tweet.text}"
msg.message.finish()
  • robot.hear /foo/: foo 가 들리면 반응합니다.
  • robot.respond /foo/: hubot: foo 에 반응합니다.
  • robot.send 'hi': 로봇이 hi 라고 합니다.
  • robot.reply 'hi': 로봇이 말건사람한테 <user>: hi 라고 합니다.

요거 4개의 기능만 알면 스크립트를 작성하긴 쉽습니다.

저희회사에서는 이걸 이용해서 standup-meeting 도 하고 그럽니다.

우선 아이디어가 있으면 남겨주세요.

테스트환경구축이랑 의존성문제는 해결해서 다시 포스팅하겠습니다.

SEE ALSO