Scala

こわくないScala vol.5 今日のランチbotを作ってみる

More than 3 years have passed since last update.

いきなりvol.5ですがそれ以前は

http://fscoward.hateblo.jp/

にあります。


作るもの

今日のごはんbot(Slack)

Slackのgeneralチャンネルで「ランチ」と発言するとランチを返してくれるbotを作成します。

general___Sphere_s_Orbit_Slack.png


Applicationの登録

https://api.slack.com/applications


tokenの発行

https://api.slack.com/web

の下の方にトークン発行ボタンがあるので、tokenの発行をしましょう。


準備


Intellij IDEAを使用して空プロジェクト作成

スクリーンショット 2015-08-15 12.27.23.png

スクリーンショット_2015-08-15_12_30_24.png


ライブラリを使用

https://github.com/gilbertw1/slack-scala-client


build.sbt

name := "lunch_bot"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
"com.github.gilbertw1" %% "slack-scala-client" % "0.1.2"
,"com.h2database" % "h2" % "1.4.188"
)


h2-databaseはとりあえず使おうかなぁって感じでいれています。

やっぱいいやってなったら後で外します。


作成


空のMainを作成

※他のファイル、フォルダは一旦無視してください。

Main_scala_-__lunch_bot__-_lunch_bot_-____Dropbox_lunch_bot_.png


Main.scala

/**

* Created by FScoward on 15/08/12.
*/

object Main extends App {

}



出来上がったものがこちらです。

Main_scala_-__lunch_bot__-_lunch_bot_-____Dropbox_lunch_bot_2.png


Regexについて


Regex.scala

package util

import scala.util.matching.Regex

/**
* Created by FScoward on 15/08/14.
*/

object Regex {
val REGISTER: Regex = """(reg:.*)""".r
val VOTE: Regex = """(vote:.*)""".r
}


ここ作ってる時に最初は括弧でくくらずに

val REGISTER: Regex = """reg:.*""".r

ってやってたんだけどどうやら括弧でくくってやる必要があるらしいです。


ランチを返してもらうための仕組み作り


LunchService

package service

import scala.util.Random

/**
* Created by FScoward on 15/08/15.
*/

trait LunchService {
val list: List[String] = List("弁当", "大戸屋")
def search(user: String): String = {
val r = new Random().nextInt(list.length)
s"@$user ${list(r)}"
}
}
object LunchService extends LunchService {}


今は「弁当」か「大戸屋」の二者択一です。

まるで役に立ちません。

ここを作りこんでいく必要があります。


ソースコード

https://github.com/FScoward/lunch_bot

途中から説明がめんどくさくなってだいぶ端折ってしまいました。

わからない部分は聞いてください。

答えられるものであれば回答します。