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

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 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

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

FScoward
i love sphere !!! http://www.planet-sphere.jp/main.php 元海岸沿いのSIer/現オフィス内に海岸のある某社 https://github.com/FScoward
http://fscoward.hateblo.jp/
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