[Scala] 只有 25 行的噗浪機器人

花了一點時間把機器人的功能加到之前寫的,給 Scala 用的 Plurk API 2.0 的函式庫 SOPlurk 裡了。

雖然說一直都有 Scala 比起如 Java 等語言太過於複雜這樣的批評,但 Scala 真的提供了很多方便的工具給寫函式庫的人,讓設計出來的 API 變得非常容易使用,而且表達性非常強。

最讓人驚豔的,是雖然 Scala 和 Java 還有 C# 一樣是靜態型別的語言,但常常寫起來卻和 Ruby / Python 的簡潔有得拼--而且還是靜態型別,可以直接讓編譯器幫你抓一些顯而易見的錯誤等。

舉個例子而言,下面是透過 SOPlurk 的機器人介面寫出來的噗浪機器人,基本上功能是這個 Python 的版本的翻版,會接受所有的好友請求,然後當河道上新的噗文出現 hello 的時候,回應他 world

雖然說 Python 版的裡面有很多在處理瑣碎的事情,不像 SOPlurk 把撈資料的部份都包好了,所以顯得比較冗長一點。但其實在寫這個範例之前,我沒有想到設計完後的 API 使用起來盡然可以短到這樣不像話。XD

import org.bone.soplurk.api._
import org.bone.soplurk.bot._
import org.bone.soplurk.constant._
import org.bone.soplurk.model._

val (appKey, appSecret) = ("APP_KEY", "APP_SECRET")
val (tokenKey, tokenSecret) = ("TOKEN_KEY", "TOKEN_SECRET")

val plurkBot = PlurkBot.withAccessToken(appKey, appSecret, tokenKey, tokenSecret) {
  plurkAPI: PlurkAPI => {
    case Alert(alertType, user, posted) => plurkAPI.Alerts.addAllAsFriends()
    case RealtimeResponse(user, plurk, response) => // Ignore any response
    case plurk: Plurk =>

      if (plurk.content.toLowerCase contains "hello") {
        plurkAPI.Responses.responseAdd(plurk.plurkID, "world", Qualifier.Says)
      }
  }
}

回響