チラシの裏

PythonでSlack botを作ってみる

2015.10.17

自宅の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の実装をすることがなく感謝するばかりです。

comments powered by Disqus