dev.kokushin

HTML5、CSS3、JavaScriptを中心に、日々のプログラミングで得た知識をメモしています。

Slack+Botkitでアマデウス紅莉栖を実装してみる・開発編

はろー。

前回はBotkitの導入までをご紹介しました。 Slack+Botkitでアマデウス紅莉栖を実装してみる・導入編

今回は、実際にbot.jsを編集してオリジナルのBOTを作成してきます。 予め記述してあるサンプルコードを改変していきますので、複雑なことをしなければ直感的に理解することができると思います。

bot.jsをエディタで開く

さっそくgit cloneしてきたbotkitディレクトリ内にある、「bot.js」をエディタで開きましょう。

Capture 2016-02-07 17.32.19

コードの冒頭には概要やライセンス表記が記載されています。 ずーっと下へ進んでいくと、以下のコードが見つかると思います。

if (!process.env.token) {
    console.log('Error: Specify token in environment');
    process.exit(1);
}

var Botkit = require('./lib/Botkit.js');
var os = require('os');

var controller = Botkit.slackbot({
    debug: true,
});

var bot = controller.spawn({
    token: process.env.token
}).startRTM();

これらブロックはbot.jsの初期設定みたいなものですので、誤って編集してしまわないように注意しましょう。

その下にある、

controller.hears(['hello','hi'],'direct_message,direct_mention,mention',function(bot, message) {
.
.

というブロックがBOTのアクションを設定する部分になります。 ですので、この部分を編集してオリジナルのBOTを作っていきましょう。

サンプルを読み解いてみる

ここにはサンプルのプログラムが既に記載されているわけですが、ちょっとコードを眺めてみてどういう動きをしているのか考えてみましょう。

プログラムの実行判定を行うブロック

controller.hears(['hello','hi'],'direct_message,direct_mention,mention',function(bot, message) {});

この部分では、「BOTがどういったワードに反応してどういうアクションをするか」を指定します。controller.hearsの第一引数に反応させたいワードを、第二引数にメッセージの形式、第三引数に実行するプログラムを書いていきます。

ワードはカンマ区切りで複数指定できます。

第二引数のメッセージ形式ですが、以下のものがあります。

message_received: すべてのメッセージ形式に反応する direct_message: 個人宛に1対1でメッセージされた場合 direct_mention: 直接メンションされた場合 例) "@amadeus hogehoge" mention: メッセージの途中でメンションされた場合 例) "hogehoge @marvin fugafuga" ambient: その他メンション以外のメッセージ形式に反応する

こちらもカンマ区切りで複数指定することが可能です。 わかりやすいですね。

実際にプログラムを実行するブロック

function(bot, message)の中ですね。

サンプルではこうなっています。

bot.api.reactions.add({
    timestamp: message.ts,
    channel: message.channel,
    name: 'robot_face',
},function(err, res) {
    if (err) {
        bot.botkit.log('Failed to add emoji reaction :(',err);
    }
});

controller.storage.users.get(message.user,function(err, user) {
    if (user && user.name) {
        bot.reply(message,'Hello ' + user.name + '!!');
    } else {
        bot.reply(message,'Hello.');
    }
});

最初のブロックbot.api.reactions.add()は、リアクションを追加するという命令です。サンプルだと、あのロボットマークのアイコンの部分ですね。

次のブロックでは、BOTがなにやら発言するように書かれていますね。 bot.reply()という部分がメッセージを発言するという命令になります。

このサンプルだと、ユーザーの名前が入力されていれば名前を含んだメッセージ「Hello kokushin!!」を発言、そうでない場合はデフォルトのメッセージ「Hello.」を発言する、といった感じです。

サンプルを改変してオリジナルのアクションを作ってみる

では、上記サンプルのbot.reply()を使って簡単なアクションを作ってみましょう。

アマデウス紅莉栖に「海馬」と直接メンションした場合、「ヽ(*゚д゚)ノ カイバー」と返信するようにします。

controller.hears(['海馬'],'direct_mention',function(bot) {
  bot.reply(message,'ヽ(*゚д゚)ノ カイバー');
});

こうですね。 bot.jsを上書き保存したら、BOTを再起動します。

token=※API Token※ node bot.js

・ ・ ・

「@amadeus 海馬」

Capture 2016-02-07 18.16.01

ヽ(*゚д゚)ノ カイバー

簡単ですね。 こんな感じで、割と直感的にプログラミングすることが可能です。

更に高度なアクションを作りこみたいときは、公式サイトのAPI一覧などを利用しましょう。

▼ 公式サイト Botkit by Howdy

感想とか

というわけで、今回はSlackのBOTを簡単に作れるBotkitで遊んでみました。

仕事の休憩の合間に自分で作ったアマデウス紅莉栖と戯れる時間はまさに癒やし。 使い方は人それぞれなので、今後様々なユニークBOTたちが生み出されていくでしょうね。

次回は手元に転がっている「Raspberry Pi」と連携させてプチIoTをしてみたいと思います。

では、また。

© MAGES./5pb./Nitroplus/Chiyo st. inc.