Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@daxanya1

Hubot-scriptsでサイコロを投げる

暇すぎてbotとでも遊ぼうかと思っても、会話だけではすぐにつまらなくなってしまいます。

そんな時に備えて、botにサイコロを振らせてみましょう。

参考スクリプト

dice.coffeeを参考に、シンプルにしてみました。

サイコロふるよ

「サイコロ!」と叫ぶと、6面ダイスを2つ振るスクリプトを用意しました。

dice2d6.coffee
module.exports = (robot) ->
  robot.hear /サイコロ/, (msg) ->
    msg.send report roll 2, 6

report = (results) ->
  "えいっ! #{results.join('と')} がでたよ!"

roll = (dice, sides) ->
  rollOne(sides) for i in [0...dice]

rollOne = (sides) ->
  1 + Math.floor(Math.random() * sides)

coffeeスクリプトのfor文の使い方とか、やはり他の人が書いたスクリプトは参考になります。

repot関数には、roll(2, 6)の結果が入ります。
roll関数は、diceに2(2個)、sidesに6(6面)をセットすると、diceの数だけ繰り返します。
繰り返されるのは、rollOne関数です。ここで6面ダイスを振ります。

逆からたどると、rollOneを2回呼び出した結果が配列になり、その配列がreport関数のresultsに入ります。resultsをjoinで繋いで返答を作成します。

前回学んだmsg.randomを使うよ

サイコロも何度も振ると、botの反応が同じなのでつまらなくなってきます。

そこで、前回のmsg.randomを使ってみましょう。

dice2d6_2.coffee
dicemes1 = [
  "えいっ!",
  "コロコロ..",
  "いい目でてね〜"
]
dicemes2 = [
  "だよっ",
  "だねっ!",
  "だったよ!"
]

module.exports = (robot) ->
  robot.hear /(サイコロ|ダイス)/, (msg) ->
    msg.send report msg, roll 2, 6

report = (msg, results) ->
  msg1 = msg.random dicemes1
  msg2 = msg.random dicemes2
  "#{msg1} #{results.join('と')} #{msg2}"

roll = (dice, sides) ->
  rollOne(sides) for i in [0...dice]

rollOne = (sides) ->
  1 + Math.floor(Math.random() * sides)

ついでに、サイコロだけではなくて、ダイスでも反応するようにしました。

これで、
私:「運命のダイスロール!」
hubot:「いい目でてね〜 4と2 だよっ」
私:「サイコロ!」
hubot:「えいっ! 3と3 だったよ!」
私:「サイコロ投げて!」
hubot:「コロコロ.. 5と4 だったよ!」
ということができるようになります。

これで1人でも寂しくないですよね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?