このエントリーをはてなブックマークに追加
facebooktwittergoogle_plusredditpinterestlinkedinmail

こんにちは、tapunです。今日はクリスマスイブイブですね!

"Festive Commute" Christmas Lights Regent Street, London, UK

これまでにRaspverry Pi をSlack bot化しましたが、今日はhubot scriptを試してみようと思います。

これまでやったこと

  1. Slackを家庭内に導入する
  2. Raspberry Pi にHubotをインストールしてSlack ボット化する

hubot Scriptとは

hubot-scriptsとは、hubotコミュニティの方々が作った様々なスクリプト群のことです。
「hubotを使ってあんなことしたいなぁ~」「何かしたいな~、なんでもいいから試したいな~」と思った時、hubot-scripts を探せば、自分でスクリプトを書かなくてもOKな場合もあるので、探してみましょう。

※スクリプトが作成された日付が古いものはAPIが公開停止になっている場合とかもあるので、要注意です。

hubot scriptsはこちらにございます。
https://github.com/github/hubot-scripts/tree/master/src/scripts

advice.coffeeを試してみる

私もcoffeescriptでバリバリscriptを作成できれば良いのですが、まだまだ全然できないので、一旦hubot scriptsの中の”advice.coffee”を試してみます。

advice.coffeeとは、特定の型に当てはまるコトバをbotに投げかけることでその質問に対するアドバイスを答えてくれちゃう優れものです。

スクリプトはこちら

ここにも書いておきます。

# Description:
#   Get free advice from http://adviceslip.com/
#
# Dependencies:
#   None
#
# Configuration:
#   None
#
# Commands:
#   hubot what should I do about (.*)
#   hubot what do you think about (.*)
#   hubot how do you handle (.*)
#   hubot I need some advice
#
# Author:
#   pengwynn
#
getAdvice = (msg, query) ->
  msg.http("http://api.adviceslip.com/advice/search/#{query}")
    .get() (err, res, body) ->
      results = JSON.parse body
      if results.message? then randomAdvice(msg) else msg.send(msg.random(results.slips).advice)

randomAdvice = (msg) ->
  msg.http("http://api.adviceslip.com/advice")
    .get() (err, res, body) ->
      results = JSON.parse body
      advice = if err then "You're on your own, bud" else results.slip.advice
      msg.send advice


module.exports = (robot) ->
  robot.respond /what (do you|should I) do (when|about) (.*)/i, (msg) ->
    getAdvice msg, msg.match[3]

  robot.respond /how do you handle (.*)/i, (msg) ->
    getAdvice msg, msg.match[1]

  robot.respond /(.*) some advice about (.*)/i, (msg) ->
    getAdvice msg, msg.match[2]

  robot.respond /(.*) think about (.*)/i, (msg) ->
    getAdvice msg, msg.match[2]

  robot.respond /(.*) advice$/i, (msg) ->
    randomAdvice(msg)

 やること

  1. Raspberry Pi にログオンし、hubotをインストールしたディレクトリ/scriptsディレクトリに移動します。
    $ cd <your hubot>/scripts
  2. advice.coffeeファイルを作成します。そのままgitから持ってきても良いし、自分でコピペしても良いし。
    私はコピペしちゃいました。
    $ nano ./advice.coffee
  3. hubotを実行します。
    ※私は前回作成したSlack API を入れ込んだ”slack-token.sh”を実行するようにしてます。
     詳しくはこちらをご参照ください。
    $ sh <your hubot>/slack-token.sh

さっそくSlackでbotに話しかけてみる

これで準備は整いました!

advice.coffeeのソースを見ると、下記の5種類の話しかけ方でアドバイスをくれそうです。

  1. what (do you|should I) do (when|about) (.*)
    →(.*)部分に入れた言葉に関するアドバイスをくれます。
  2. how do you handle (.*)
    →(.*)部分に入れた言葉に関するアドバイスをくれます。
  3. (.*) some advice about (.*)
    →2箇所の(.*)部分に入れた言葉に関するアドバイスをくれます。
  4. (.*) think about (.*)
    →2箇所の(.*)部分に入れた言葉に関するアドバイスをくれます。
  5. (.*) advice
    →ランダムにアドバイスをくれます。

ということで早速試してみます。

advice1

例1

Q: @raspi–chan: give me some advice 
A: Today, do not use the words ‘Kind of,’ ‘Sort of’ or ‘Maybe.’ It either is or it isn’t.

  今日は「~など」といった曖昧なコトバは使うな

これは、質問の仕方5に当てはまるので、ランダムに返してくれました。

例2

Q: @raspi–chan:what should I do about sleep?
A: You spend half your life asleep or in bed. It’s worth spending money on a good mattress, decent pillows and a comfy duvet.
  人生のうち半分はベッドの上で過ごすのだから、寝具にはお金をかける価値がある

これは、質問の仕方1に当てはまるので、”sleep”に関連するアドバイスをくれました。

まとめ

今日はslack bot計画の取っ掛かりとして、hubot script(advice.coffee)を使って英語で人生における様々なアドバイスをしてくれるslack botを作ってみました。

英語なのがちょっとアレですが、為になるし暇つぶしになりそうです!

coffeescript勉強して自分で好きなAPIから情報をとってこれるようにしたいなぁ。

以上です。最後まで読んでいただいてありがとうございました :-) 


 


Raspberry Pi ブログランキングへ