自宅のRaspberry PiでHubotでSlackbotを作って動かしてますが、Hubotの場合CoffeeScriptで作るためCoffee力の低い自分には辛いものでした。
しかし、メルカリのエンジニアブログでReal Time Messaging APIを使ってWebSocket通信ができるというのがわかってPythonで実装しました。
とは言っても、既にPython用のライブラリ(python-rtmbot)があったのをそれを使っただけです。
以下python-rtmbotの使い方
インストール
$ git clone [email protected]:slackhq/python-rtmbot.git
cd python-rtmbot
$ pip install -r requirements.txt
プラグインを登録
Hubotでいうscripts
ディレクトリがplugin
ディレクトリになります
ここにプラグインを入れていきます。
$ mkdir plugins/repeat
$ cp doc/example-plugins/repeat.py plugins/repeat
Slack上にbotを登録
Integrationsでbotを登録します
今はbot用にBots
というIntegrationsがあるんですね。
ボット名を登録したら完了です。
設定
SLACK_TOKEN
に上の画面でみたAPI Tokenを設定します
cp doc/example-config/rtmbot.conf .
vi rtmbot.conf
SLACK_TOKEN: "xoxb-11111111111-222222222222222"
実行
Python3.5ではエラーになったので、2.7.10で実行しました。
$ ./rtmbot.py
botにダイレクトメッセージを送ると以下のようになります。
プラグインを作成する
基本的にはplugin
ディレクトリにファイルを置くだけ
メッセージ受信
def process_message(data):
print data
process_message
を定義すると引数に↓のような情報が入った辞書が渡ってくる
{u'text': u'What\u2019s your name',
u'ts': u'1445087609.000007',
u'user': u'U02LJFLE8',
u'team': u'T02LJFLE6',
u'type': u'message',
u'channel': u'D0CLD7F5M'}
ユーザやチームは名前で入っているけど、IDから変換するのはどうやるんだろう?
メッセージ送信
outputs = []
outputs.append(["C12345667", "hello world"])
outputs
という名のリストを作ってそこにリストを追加する
リストの1番目はチャンネル名で、2番目はメッセージ
READMEではチャンネルはIDになっているけど、名前でも送信できました。
チャンネルに向けて送信する場合は、botをチャンネルに招待するのを忘れずに
まとめ
Real Time Messaging API
を使うことによって言語を選ばずに、さらにはサーバを公開しないでもbotが作れるようになりました。
また、python-rtmbot
のおかげで自前でWebSocketの実装をすることがなく感謝するばかりです。