LoginSignup
10
1

More than 5 years have passed since last update.

SlackのRTMをClojureで利用する

Posted at

ClojureではRTMを利用した便利なSlackBotフレームワークがありません(あったら教えてください)。そこで、ClojureでRTMを利用するためにclj-slack-clientを利用しました。本家サイトには使い方がのっていないので、ちょっと動かしてみたので紹介します。

SlackのRTMとは

RTMとはReal Time Messaging APIのことで、SlackのWebSocketベースAPIです。RTMを使うことでSlackのイベントを監視し、メッセージの受信や送信をリアルタイムで行うことができます。

ClojureでRTMを利用

準備

Slack側

ここを参考に以下のリンクからslackBotを作成し、トークンそ取得します。
https://my.slack.com/services/new/bot

Clojure側

まず、プロジェクトを作ります。

lein new project_name

次に、project.cljを変更します。

project.clj
:dependencies [[org.clojure/clojure "1.8.0"]
               [aleph "0.4.1"]
               [clj-slack-client "0.1.6-SNAPSHOT"]]
:main project_name.core

:dependenciesalephclj-slack-clientを追加します。alephclj-slack-clientの中で利用されていますが、clj-slack-clientでのバージョンにバグがあるので、追加しています。
また、エントリーポイントを設定するために:mainを追加します。

RTMの利用

以下のコードでRTMを試すことができます。

src/project/core.clj
(ns project_name.core
  (:require
    [clj-slack-client.core :as slack]))

(defn handle-slack-event
  [event]
    (println "event:" event))

(defn -main
  [& args]
  (slack/connect "API Token" handle-slack-event)
  (println "bot running...")
  (loop []
    (println "...")
    (Thread/sleep 5000)
    (recur)))

(slack/connect "API Token" handle-slack-event)とすことでslackでイベントが起きたときhandle-slack-eventを呼び出すようになります。また、引数にはslackでのイベント内容が入力されます。

実行

$ lein run

で実行します。
botがいるチャンネルに'test'と入力すると以下のよう':text test'が含まれた出力がされます。

bot running...
...
{:type user_typing, :channel xxxxxx, :user xxxxxx}
event: {:type user_typing, :channel xxxxxx, :user xxxxxx}
{:type message, :channel xxxxxx, :user xxxxxx, :text test, :ts 1498385185.596441, :source_team xxxxxx, :team xxxxxx}
event: {:type message, :channel xxxxxx, :user xxxxxx, :text test, :ts 1498385185.596441, :source_team xxxxxx, :team xxxxxx}

まとめ

clj-slack-clientを利用することでRTMが簡単に利用できました。今回は動かすことが目的なのでトークンをハードコーディングしていますが、ちゃんと作るときはちゃんと隠蔽してください。
便利なRTMが使えるClojureの便利なSlackBotフレームワークが欲しいですね。あったら教えて下さい。作る???

参考

10
1
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
10
1