PerlでSlackBot
はじめに
この記事は,kstm Advent Calendar 12日目の記事として書かれました.
目次
PerlでSlackの会話Botを作る?
私の研究の関係でSlackの会話Botを作ることになりました. 研究で使っているツールは主にPythonやJSで作っているのですが,そのためにPerlをここ最近書けていませんでした. そこで,Slack BotはPerlで作ろうと思い行動してしまった次第です.
Slack tokenを得る
SlackでBotを作るにあたって,Tokenが必要になります. Slackには2つのTokenがあり,一つは現在Slackが推奨している権限を細かく決めることができる物で,もう一つはほぼ全ての機能が使えてしまうLegacy番があります.SlackのLegacy Tokenのページの冒頭には非推奨であるこことが掲示されています.
推奨
基本的には*1と同じ内容になります.
- https://api.slack.com/apps
- Create New App
- Development Slack Team
- Create App
重要なのはスコープの設定です. 左側のリストの中から,Features > OAuth & Permissionsに飛び, Scopesの項目のSelect Permission Scopesから必要な権限を選びます.
今回必要になる権限は2つ.
これらを追加してSave Changesを押します.
最後にInstall App to Team > Authorizeに進み,tokenを取得します.
Slackの画面のAppの欄に今作ったBotが増えているので,Botを利用したいチャンネルにこのBotを参加させます.
非推奨 レガシー番
非推奨なので割愛. こちらをご覧ください.
Slack::RTM::Bot モジュール
今回使うモジュールはSlack::RTM::Bot.
use strict; use warnings; use Slack::RTM::Bot; use Data::Dumper; use utf8; my $bot = Slack::RTM::Bot->new( token => 'API Token' ); $bot->on( { channel => 'random', text => qr/.*/ }, sub { my ($res) = @_; print Dumper $res; if($res->{text} eq 'Hello') { $bot->say( channel => 'random', text => 'World.' ); } else { $bot->say( channel => 'random', text => 'Slack.' ); } } ); $bot->start_RTM; sleep 60; $bot->stop_RTM; exit;
$bot->on();でどのチャンネルのどんなtextに反応するかを決めます.
$bot->say();でどのチャンネルにどんなtextを書き込むかを決めます.
$bot->start_RTM;でBotを起動するのですが,このプログラムが起動している間, Slackとコネクションが繋がり,Botが動きます. ずっと動かすならば,
while(1) {sleep 60;}
などにしておくといいでしょう.
今回はrandomチャンネルにHelloと書かれるとWorldと返し, それ以外の場合はSlackと返すようになっています.
$bot->on();のtext=>''の部分で条件を付けるのですが,今回はif文で条件を分岐しています.
最後に
YAPC::Tokyoに参加します. yapcjapan.org
kstm Advent Calendar 1日目の記事に「学会にいこう」 と言う記事があります. 学会もカンファレンスも自分の知見を広め深める場です.selee氏の記事の通り学生特権があるので,早いうちから参加するといいと思います.
明日はugwis氏の「6桁の数字を読み取る」です.