Pythonを使ってSlackのBOTを作ってみます。
特定のキーワードに反応したりする自動応答スクリプトみたいなものです。
使用するライブラリのインストール
1 |
sudo pip install slackbot |
ディレクトリ構造
ディレクトリ構造がちょっと複雑なので、先にディレクトリ構造をのせておきます。
pluginフォルダ → BOTのリアクションはプラグインという形で実装していきます。そのフォルダ。
__init__.py → お約束。
reaction.py → リアクションを記述したスクリプトの実体。
rpi_bot.py → BOTスクリプトの実体。
slackbot_settings.py → BOTの設定ファイル。ファイル名は固定。
rpi_bot.pyの中身
1 2 3 4 5 6 |
# -*- coding: utf-8 -*- from slackbot.bot import Bot # Bot起動 bot = Bot() bot.run() |
みたまんまです。
Botクラスのインスタンスを生成してrun()しています。
slackbot_settings.pyの中身
1 2 3 4 5 6 7 8 9 10 11 12 |
# -*- coding: utf-8 -*- # API TOKEN API_TOKEN = 'xxxx-0123456789-0123456ghj789456asdf456456' # デフォルトの反応(該当する返事がないとき) DEFAULT_REPLY = '??' # プラグイン読み込み PLUGINS = [ 'plugin', ] |
BOTの設定を記入していきます。
前回控えておいたAPI_TOKENを記入します。上のは例です。
DEFAULT_REPLYはメンションを受けたとき、該当するリアクションがない場合の返事になります。
reaction.pyの中身
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# -*- coding: utf-8 -*- from slackbot.bot import listen_to from slackbot.bot import respond_to # 参加チャンネルの特定のワードに反応 @listen_to('hello') def reaction1(message): message.send('world!') # メンションに返事 @respond_to(u'水曜') def reaction2(message): message.reply('どうでしょう') |
ようやくリアクションの中身に入っていきます。
reaction1メソッドは参加しているチャンネルの発言に特定のキーワードが含まれていたときのリアクション。
トリガとなるキーワードは @listen_to 属性で指定しています。
reaction2メソッドはメンションに対するリアクション。
トリガとなるキーワードは @respond_to 属性で指定しています。
実行してみる
1 |
python ./rpi_bot.py |
↓チャンネルに対するリアクション
↓メンションに対するリアクション
できた。
あーつかれた(ヽ´ω`)
文字コードの指定漏れなんかで大変苦労しました。
pythonはunicodeの扱いが厄介です。
これがなければ日本でもっと広まってたかもしれませんね。