Samples - lua

基本形

決まった文言の返答

robot:hear("Hello!", function(res)
   res:send("Hello!")
end)

echo

相手の発言と同じ内容をやまびこのように発言します。

robot:hear(".*", function(res)
   res:send(res.message.text)
end)

cron

時報

月曜から金曜まで、毎時00分になったら"O'clock!"と発言します。

robot.newCronJob(
  '00 00 * ? * 2-6',
-- sec min hour day-of-month month day-of-week
  function() robot.messageRoom("<channel name>", "O'clock!") end,
  'Asia/Tokyo'
  )

http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html


brain

カウンター

brainにデータを保持します。
Incrementと発言したら数字を1足し、Decrementと発言したら数字を1減らします。

function ensure_counter()
  if not robot.brain.count then
    robot.brain.count = 0
  end
end
robot:hear("[iI]ncrement", function (res)
  ensure_counter()

  robot.brain.count = robot.brain.count + 1
  res:send(robot.brain.count)
end)

robot:hear("[dD]ecrement", function (res)
  ensure_counter()

  robot.brain.count = robot.brain.count - 1
  res:send(robot.brain.count)
end)

会話

接待じゃんけん

掛け声のあとに発言を待ち、相手の出した手に負ける手を出すじゃんけんゲームです。プレイヤーは必ず勝つことができます。

robot:hear("^じゃんけん", function(res)
  res:send("最初はグー")
  res:send("じゃんけん、、、(グー、チョキ、パーのどれかを発言してください)")
  local m = robot.wait_message()
  if m.message.text:match("グー") then
    res:send("チョキ! あなたの勝ち!")
  elseif m.message.text:match("チョキ") then
    res:send("パー! あなたの勝ち!")
  else
    res:send("グー! あなたの勝ち!")
  end
end)

API呼び出し

猫画像をランダムに返すAPI https://thecatapi.com/ を使って、猫を眺めることのできるボットです。

function catme()
  local r, b = http.get("https://thecatapi.com/api/images/get?format=html")
  local url = b:match("src=\"(.*)\"")
  return url
end  

robot:hear("cat me", function(res)
  res:send(catme())
end)

JSON

pugme

パグ画像を発言してくれます。hubotのpugmeと同じものです。

json.parse()でデシリアライズ、json.serialize()でシリアライズができます。

function pugme()
  local r, b, h, e = http.get("https://pugme.herokuapp.com/random")
  local pug = json.parse(b).pug
  return pug
end

robot:hear("pug me", function(res)
  res:send(pugme())
end)