読者です 読者をやめる 読者になる 読者になる

量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

perlで簡単にSlack Botを作るモジュールを公開した

Slack perl

CPAN authorになりました。

Slack::RTM::Bot - search.cpan.org

GitHubでいくつかperlのモジュールを書いたりはしていたのですが、せっかくなのでCPANに登録することにしました。

SlackのReal Time Messaging (RTM) APIを使ったモジュールです。
公開したモジュールを使うとperlで簡単にSlackのbotが作れます。
CPANに登録したのでインストールも簡単です。

cpanm Slack::RTM::Bot

例えばこのモジュールを利用してチャット内容のログをとる場合。

use Data::Dumper;
use Slack::RTM::Bot;

my $bot = Slack::RTM::Bot->new(
    token => 'Slackで取得したAPIトークン'
);

$bot->add_action(
    { 
        type : 'message',
        text : '.*'
    },
    sub {
        my ($response) = @_;
        print Dumper $response;
    }
);

$bot->start_RTM;

sleep 60;

$bot->stop_RTM;

add_actionメソッドで条件とコールバックを登録します。
条件には正規表現が使えます。Slackからのレスポンス内に条件に合った項目があればコールバックのメソッドを実行します。第一引数を{}にすればすべてのレスポンスに対してコールバックを実施します。
userchannel はIDではなく表示されてる名前で扱えるようにしています。

コールバックの引数にはSlackからのレスポンスが入ってます。
条件やレスポンスはSlack RTM APIで確認できます。

Slackへの通知にはsayメソッドを利用します。

use Slack::RTM::Bot;

my $bot = Slack::RTM::Bot->new(
    token => 'Slackで取得したAPIトークン'
);

$bot->start_RTM;

$bot->say(
    channel => 'general',
    text => 'Hello, World.'
);

$bot->stop_RTM;

ユーザあてにダイレクトメッセージを送りたい場合はchannel@付きのユーザ名で送ることができるようにしました。

$bot->say(
    channel => '@duck8823',
    text => 'Hello, World.'
);

にしても、あっという間にCPANに公開できてしまうんですね。
GitHubにおいてあるいくつかのモジュールも整備してCPANに上げたいなと思います。

Slack::RTM::Botソースコードここにあります。