LoginSignup
6
5

More than 5 years have passed since last update.

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

Posted at

いきなりvol.5ですがそれ以前は
http://fscoward.hateblo.jp/
にあります。

作るもの

今日のごはんbot(Slack)

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

general___Sphere_s_Orbit_Slack.png

Applicationの登録

tokenの発行

https://api.slack.com/web
の下の方にトークン発行ボタンがあるので、tokenの発行をしましょう。

準備

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

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

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

ライブラリを使用

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 {}

今は「弁当」か「大戸屋」の二者択一です。
まるで役に立ちません。

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

ソースコード

途中から説明がめんどくさくなってだいぶ端折ってしまいました。
わからない部分は聞いてください。
答えられるものであれば回答します。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5