BotKit を使って導入した Slack のボットの挙動を自分なりにカスタマイズしてみましょう。まずは以下のエントリを参考にして、BotKit を導入し、ボットがデフォルトの挙動で動くような状態を作っておいてください:
Slack の BotKit を使う
さて、ボットの実体は bot.js ファイルです。このファイルをテキストエディタで開くと、初期化処理などの後にこのような contoller.hears() の処理がいくつか定義されていることに気付きます:
例えばコマンドとして ['hello','hi'] が定義されているものとして、このような記載を見つけることができます:
これは次のような意味になります:
(1) 'hello' または 'hi' というコマンドを、
(2) 'direct_message'(1対1でのメッセージ)か、'direct_mention'(@XXX hello のように直接メンションされた場合)か、'mention'(hello @XXX のようにメッセージ中でメンションされた場合)に、
(3) function(bot,message){ ... } の内容を実行する
つまり前回のエントリでボットに対して @XXX hello というメッセージをダイレクトメンションで送った時に実行される処理がこれ、ということになります。
では簡単な処理でカスタマイズしてみましょう。bot.js 内に以下のようなコードを追加します:
これはボットに対してダイレクトメンションで "@XXX double ABCDE" のようなメッセージが送られた時にハンドルし、"ABCDE ABCDE" のように double に続く部分を2度喋る、という処理をするようなコードです。
この bot.js を保存して実行(実行方法は前回のエントリ参照)し、"@XXX double Happy" のようにダイレクトメンションでメッセージを送ると、"Happy Happy" のような反応をしてくれるはずです:

この例では処理内容がかなりシンプルな例でしたが、5行程度の追加でここまでは出来てしまいました。実際には受け取ったパラメータを元にデータベースや外部などから情報を作り出して返す、といったより本格的な Slack ボットを作ることもできると思っています。
応用編というわけではないのですが、REST API を使って外部から情報を取り出して表示する、というサンプルも1つ作ってみました。こちらも同様に bot.js に追加します:
以前作った為替の JSON サービス(http://fx.mybluemix.net/)を使い、ダイレクトメンションで USD(米ドル)EUR(ユーロ)GBP(英ポンド)AUD(豪ドル)NZD(NZドル)CAD(カナダドル)CHF(スイスフラン)のいずれかを受け取った場合、それらの通貨が日本円だといくらになるのか、をリアルタイムに計算して返信してくれる、というボットです:

Node.js、というか JavaScript での実装に慣れない人がいるかもしれませんが、比較的簡単な言語だと思うので、この Slack ボットを作る機会と一緒に勉強して慣れておくと面白いと思います。
Slack の BotKit を使う
さて、ボットの実体は bot.js ファイルです。このファイルをテキストエディタで開くと、初期化処理などの後にこのような contoller.hears() の処理がいくつか定義されていることに気付きます:
controller.hears( コマンド, 種類, 処理 );
例えばコマンドとして ['hello','hi'] が定義されているものとして、このような記載を見つけることができます:
controller.hears( ['hello','hi'], 'direct_message,direct_mention,mention', function(bot, message){ : (処理の中身) : } );
これは次のような意味になります:
(1) 'hello' または 'hi' というコマンドを、
(2) 'direct_message'(1対1でのメッセージ)か、'direct_mention'(@XXX hello のように直接メンションされた場合)か、'mention'(hello @XXX のようにメッセージ中でメンションされた場合)に、
(3) function(bot,message){ ... } の内容を実行する
つまり前回のエントリでボットに対して @XXX hello というメッセージをダイレクトメンションで送った時に実行される処理がこれ、ということになります。
では簡単な処理でカスタマイズしてみましょう。bot.js 内に以下のようなコードを追加します:
controller.hears(['double (.*)'],'direct_mention',function(bot, message) { var matches = message.text.match(/double (.*)/i); var msg = matches[1]; bot.reply(message,msg+' '+msg); });
これはボットに対してダイレクトメンションで "@XXX double ABCDE" のようなメッセージが送られた時にハンドルし、"ABCDE ABCDE" のように double に続く部分を2度喋る、という処理をするようなコードです。
この bot.js を保存して実行(実行方法は前回のエントリ参照)し、"@XXX double Happy" のようにダイレクトメンションでメッセージを送ると、"Happy Happy" のような反応をしてくれるはずです:

この例では処理内容がかなりシンプルな例でしたが、5行程度の追加でここまでは出来てしまいました。実際には受け取ったパラメータを元にデータベースや外部などから情報を作り出して返す、といったより本格的な Slack ボットを作ることもできると思っています。
応用編というわけではないのですが、REST API を使って外部から情報を取り出して表示する、というサンプルも1つ作ってみました。こちらも同様に bot.js に追加します:
: : controller.hears(['(usd|eur|gbp|aud|nzd|cad|chf)'],'direct_mention',function (bot, message) { var matches = message.text.match(/(usd|eur|gbp|aud|nzd|cad|chf)/i); var cur = matches[0].toUpperCase() + "JPY"; var request = require( 'request' ); url = 'http://fx.mybluemix.net/'; request( url, function( error, response, body ){ if( !error && response.statusCode == 200 ){ var json = JSON.parse( body ); var dt = json['datetime']; var rate = json['rate']; var p = rate[cur]; bot.reply( message, dt + ' ' + p ); } }); });
以前作った為替の JSON サービス(http://fx.mybluemix.net/)を使い、ダイレクトメンションで USD(米ドル)EUR(ユーロ)GBP(英ポンド)AUD(豪ドル)NZD(NZドル)CAD(カナダドル)CHF(スイスフラン)のいずれかを受け取った場合、それらの通貨が日本円だといくらになるのか、をリアルタイムに計算して返信してくれる、というボットです:

Node.js、というか JavaScript での実装に慣れない人がいるかもしれませんが、比較的簡単な言語だと思うので、この Slack ボットを作る機会と一緒に勉強して慣れておくと面白いと思います。