Help us understand the problem. What is going on with this article?

SlackのRTMをClojureで利用する

More than 3 years have passed since last update.

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フレームワークが欲しいですね。あったら教えて下さい。作る???

参考

katsuyan
エンジニアしてます。RubyとかGoとかClojureとかが好きです。DigDagとかEmbulkとかも好きです。
http://zakiran.hatenablog.com/
zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
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