Posted at

slack-scala-clientを使用したAPI Clientのサンプル


概要

slack-scala-clientを使用してslackの情報を取得したり、メッセージを送信したりしてみましたので、サンプルを記載します。

なお、botの作り方を知りたい場合は、@FScowardさんのこわくないScala vol.5 今日のランチbotを作ってみるの記事で解説されているので、こちらをご参照ください。


前準備

slackのAPIへアクセスするためのtokenを発行する必要があります。tokenの取得方法の詳細は、@ykhiraoさんのSlack API 推奨Tokenについてにて解説されていますので、こちらをご参照ください。


サンプルコード

今回はチャンネル一覧取得・ユーザ一覧取得・メッセージ送信の簡単なサンプルを作成してみました。


SlackTest.scala

import akka.actor.ActorSystem

import scala.util.{ Success, Failure }
import scala.concurrent.ExecutionContext.Implicits.global
import slack.api.SlackApiClient

object Main extends App {
implicit val system = ActorSystem("slack")
val token = "ここに取得したtokenを設定"
val client = SlackApiClient(token)

// ユーザ一覧を取得するサンプル
client.listUsers().onComplete {
case Success(users) =>
users.foreach(u =>
println(s"${u.id}:${u.name}")
)
case Failure(t) => println(s"error:${t.getMessage()}")
}

// チャンネル一覧を取得するサンプル
client.listChannels().onComplete {
case Success(channels) =>
channels.foreach(c =>
println(s"${c.id}:${c.name}")
)
case Failure(t) => println(s"error:${t.getMessage()}")
}

// チャンネルIDまたは送信先のユーザIDを指定してtestメッセージを送るサンプル(送信者はToken発行ユーザ)
client.postChatMessage(channelId = "ここにIDを設定", text = "test", asUser = Some(true)).onComplete {
case Success(_) =>
println("Success")
case Failure(t) =>
println(s"error:${t.getMessage()}")
}
}



その他補足

メッセージの送信元ユーザは、Token発行者かbotユーザしか使用できないようです。@mizuki_takahashiさんのSlack APIでメッセージ送信の記事で詳細を解説されています。