Skip to content

Commit

Permalink
Merge branch 'feature/direct-channel-model' into develop
Browse files Browse the repository at this point in the history
* feature/direct-channel-model:
  clean unnecessary comments and no duplicated function.
  prevent from building documentation
  version change
  Entire response back to the actor
  Extract direct channels info from server response.
  DirectChannel Model
  Message refactor
  update build file
  • Loading branch information
marioosh committed Jul 2, 2015
2 parents 7d1d9fc + e12a9fd commit bc37cd6
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 43 deletions.
11 changes: 3 additions & 8 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name := "slack-scala-bot-core"

version := "0.1"
version := "0.2.1"

scalaVersion := "2.11.5"
scalaVersion := "2.11.6"

organization := "io.scalac"

Expand All @@ -23,10 +23,6 @@ libraryDependencies ++= {
"log4j" % "log4j" % "1.2.17",
"org.slf4j" % "slf4j-api" % "1.7.5",
"org.slf4j" % "slf4j-log4j12" % "1.7.5",
"org.scala-lang.modules" %% "scala-xml" % "1.0.2",
"org.scala-lang" % "scala-compiler" % "2.10.2",
"org.scala-lang" % "jline" % "2.10.2",
"org.twitter4j" % "twitter4j-core" % "4.0.0",
"com.typesafe.slick" %% "slick" % "2.1.0",
"com.h2database" % "h2" % "1.4.186"
)
Expand Down Expand Up @@ -58,5 +54,4 @@ pomExtra := (
<id>scalac</id>
<name>ScalaConsultants</name>
</developer>
</developers>)

</developers>)
15 changes: 7 additions & 8 deletions src/main/scala/io/scalac/slack/api/ApiActor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@ package io.scalac.slack.api
import akka.actor.{Actor, ActorLogging}
import io.scalac.slack.api.ResponseObject._
import io.scalac.slack.common.JsonProtocols._
import io.scalac.slack.common.{Attachment, RichOutboundMessage}
import io.scalac.slack.common.RichOutboundMessage
import io.scalac.slack.{ApiTestError, Config, SlackError}
import spray.json._

import scala.util.{Failure, Success}

/**
* Created on 21.01.15 20:32
*/
class ApiActor extends Actor with ActorLogging {

import context.dispatcher
Expand All @@ -22,12 +19,12 @@ class ApiActor extends Actor with ActorLogging {
case ApiTest(param, error) =>
log.debug("api.test requested")
val send = sender()
val params = Map("param" -> param, "error" -> error).collect { case (key, Some(value)) => key -> value}
val params = Map("param" -> param, "error" -> error).collect { case (key, Some(value)) => key -> value }

SlackApiClient.get[ApiTestResponse]("api.test", params) onComplete {
case Success(res) =>
if (res.ok) {
send ! Ok(res.args)
send ! Connected
}
else {
send ! ApiTestError
Expand Down Expand Up @@ -59,9 +56,11 @@ class ApiActor extends Actor with ActorLogging {
SlackApiClient.get[RtmStartResponse]("rtm.start", Map("token" -> token.key)) onComplete {

case Success(res) =>
if (res.ok)
if (res.ok) {
send ! RtmData(res.url)
send ! res.self
send ! res.self
send ! res
}
case Failure(ex) =>
send ! ex
}
Expand Down
9 changes: 3 additions & 6 deletions src/main/scala/io/scalac/slack/api/Message.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package io.scalac.slack.api

/**
* Created on 20.01.15 23:59
* Messages sends between actors
* Messages sended between actors
*/
sealed trait Message

Expand All @@ -12,16 +11,14 @@ case object RegisterModules extends Message

//API CALLS
case class ApiTest(param: Option[String] = None, error: Option[String] = None) extends Message

case class AuthTest(token: APIKey) extends Message

case class RtmStart(token: APIKey) extends Message

//API RESPONSES
case class Ok(args: Option[Map[String, String]]) extends Message
case object Ok extends Message
case object Connected extends Message

case class AuthData(url: String, team: String, user: String, teamId: String, userId: String) extends Message

case class RtmData(url: String)

object AuthData {
Expand Down
7 changes: 2 additions & 5 deletions src/main/scala/io/scalac/slack/api/ResponseObject.scala
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package io.scalac.slack.api

import io.scalac.slack.models.{Channel, SlackUser}
import io.scalac.slack.models.{Channel, DirectChannel, SlackUser}

/**
* Created on 21.01.15 22:28
*/
sealed trait ResponseObject

case class ApiTestResponse(ok: Boolean, error: Option[String], args: Option[Map[String, String]]) extends ResponseObject

case class AuthTestResponse(ok: Boolean, error: Option[String], url: Option[String], team: Option[String], user: Option[String], team_id: Option[String], user_id: Option[String]) extends ResponseObject

case class RtmStartResponse(ok: Boolean, url: String, users: List[SlackUser], channels: List[Channel], self: BotInfo) extends ResponseObject
case class RtmStartResponse(ok: Boolean, url: String, users: List[SlackUser], channels: List[Channel], self: BotInfo, ims: List[DirectChannel]) extends ResponseObject

object ResponseObject {
implicit def authTestResponseToAuthData(atr: AuthTestResponse): AuthData =
Expand Down
7 changes: 3 additions & 4 deletions src/main/scala/io/scalac/slack/api/Unmarshallers.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ import io.scalac.slack.models._
import org.joda.time.DateTime
import spray.json._

/**
* Created on 28.01.15 23:06
*/
object Unmarshallers extends DefaultJsonProtocol {

implicit object DateTimeJsonFormat extends JsonFormat[DateTime] {
Expand Down Expand Up @@ -50,6 +47,8 @@ object Unmarshallers extends DefaultJsonProtocol {
implicit val channelFormat = jsonFormat(Channel, "name", "creator", "is_member", "is_channel", "id", "is_general", "is_archived", "created", "purpose", "topic", "unread_count", "last_read", "members")
implicit val userFormat = jsonFormat(SlackUser, "id", "name", "deleted", "is_admin", "is_owner", "is_primary_owner", "is_restricted", "is_ultra_restricted", "has_files", "is_bot", "presence")
implicit val botInfoFormat = jsonFormat(BotInfo, "id", "name")
implicit val rtmStartResponseFormat = jsonFormat(RtmStartResponse, "ok", "url", "users", "channels", "self")
implicit val imFormat = jsonFormat(DirectChannel, "id", "user")
implicit val rtmStartResponseFormat = jsonFormat(RtmStartResponse, "ok", "url", "users", "channels", "self", "ims")
implicit val chatPostMessageResponse = jsonFormat(ChatPostMessageResponse, "ok", "channel", "error")

}
14 changes: 5 additions & 9 deletions src/main/scala/io/scalac/slack/bots/MessageListener.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,18 @@ package io.scalac.slack.bots

import akka.actor.{Actor, ActorLogging}
import io.scalac.slack.MessageEventBus
import io.scalac.slack.common.{Incoming, MessageEvent, Outgoing, RichOutboundMessage, _}
import io.scalac.slack.common.{Incoming, MessageEvent, Outgoing, _}

import scala.language.implicitConversions

/**
* Created on 08.02.15 23:52
*/
trait MessagePublisher {
// def bus = SlackBot.eventBus

def bus: MessageEventBus

def publish(event: MessageEvent) = {
bus.publish(event)
}
def publish(event: RichOutboundMessage) = {
implicit def publish(event: MessageEvent): Unit = {
bus.publish(event)
}

}

abstract class MessageListener extends Actor with ActorLogging with MessagePublisher
Expand Down
7 changes: 7 additions & 0 deletions src/main/scala/io/scalac/slack/models/DirectChannel.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.scalac.slack.models

/**
* Direct channel object between bot and user
* Object holds user's ID along with channel's ID
*/
case class DirectChannel(id: String, userId: String)
3 changes: 1 addition & 2 deletions src/main/scala/io/scalac/slack/websockets/WSActor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,14 @@ import spray.can.server.UHttp
import spray.can.websocket.WebSocketClientWorker
import spray.can.websocket.frame.{CloseFrame, StatusCode, TextFrame}
import spray.http.{HttpHeaders, HttpMethods, HttpRequest}
import spray.json._

/**
* Created on 28.01.15 19:45
*/
class WSActor(eventBus: MessageEventBus) extends Actor with WebSocketClientWorker {

override def receive = connect orElse handshaking orElse closeLogic

// implicit val eventBus = SlackBot.eventBus
val out = context.actorOf(Props(classOf[OutgoingMessageProcessor], self, eventBus))
val in = context.actorOf(Props(classOf[IncomingMessageProcessor], eventBus))

Expand Down
22 changes: 21 additions & 1 deletion src/test/scala/io/scalac/slack/UnmarshallerTest.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.scalac.slack

import io.scalac.slack.api.{ApiTestResponse, AuthTestResponse, RtmStartResponse}
import io.scalac.slack.models.{Away, Channel, ChannelInfo, SlackUser}
import io.scalac.slack.models._
import org.joda.time.DateTime
import org.scalatest.{FunSuite, Matchers}
import spray.json._
Expand Down Expand Up @@ -546,6 +546,7 @@ class UnmarshallerTest extends FunSuite with Matchers {
rtmResponse.channels.size should equal(2)
rtmResponse.self.id should equal("U03DQKG14")
rtmResponse.self.name should equal("secretary")
rtmResponse.ims.size should equal(5)
}

test("long channel unmarshall") {
Expand Down Expand Up @@ -699,4 +700,23 @@ class UnmarshallerTest extends FunSuite with Matchers {
user.hasFiles should equal(Some(false))
user.presence should equal(Away)
}

test("IM object") {
/*language=JSON*/
val imString = """{
| "last_read": "0000000000.000000",
| "is_open": true,
| "id": "D03DQKG1C",
| "unread_count": 0,
| "is_im": true,
| "latest": null,
| "user": "U03DN1GTQ",
| "created": 1421786647
| }""".stripMargin

val im = imString.parseJson.convertTo[DirectChannel]
im.id should equal("D03DQKG1C")
im.userId should equal("U03DN1GTQ")
}

}

0 comments on commit bc37cd6

Please sign in to comment.