Skip to content

Latest commit

 

History

History
136 lines (99 loc) · 5.36 KB

File metadata and controls

136 lines (99 loc) · 5.36 KB

Monitor Bot v0.0.2

PythonスクリプトとSlackをつなげます. 長時間かかる処理をSlackで監視することができるようになります.

機械学習の学習進捗確認や, サーバの状態確認に使用できそう.

できること

1. Pythonスクリプトから, あなたのSlackチャンネルへメッセージを送れます.

2. メッセージ以外にも, Matplotlibで作成したグラフ画像や, PillowのImageも送れます.

3. 逆にSlackから, 実行中のPythonスクリプト内に定義された関数を実行するよう指示することができます.

使い方

最初にSlack Botのアカウントを作成する必要があります.
以下のwebサイトを参考に, Botアカウントの作成とAPIトークンの取得を行ってください.

APIトークンを取得できたら, 環境変数にAPIトークンを設定してください.
環境変数名は BOT_KEY としてください.

Linux, MAC:
export BOT_KEY=set_your_api_tokenxxxxxxxxxxxxxxxxxxxxxxxxxx

Windows:
http://www.k-cube.co.jp/wakaba/server/environ.html

MonitorBotモジュールのインストール方法

  1. githubから, このレポジトリをダウンロード
    git clone https://github.com/swy5/MonitorBot.git
  2. レポジトリ内へ移動
    cd MonitorBot
  3. インストール
    pip install -e .

モジュールのロード&インスタンス化

環境変数BOT_KEYが適切に設定されていれば, 以下のコードで Botを使用する準備ができます.

コード例:
from monitor_bot.bot import MonitorBot
bot = MonitorBot()

1. PythonスクリプトからSlackチャンネルにメッセージを送る.

メッセージを送るには以下の関数を使います.

MonitorBot.send_message(channel, message, attachments=None)

  • channel(string): メッセージを送る先となるchannelです.
  • message(string): メッセージ.
  • attachments(json): メッセージの色を変えるなど, 付加情報をつけられます. データ構造などの詳しい情報はSlackClientのWebページを参考にしてください.
コード例:
from monitor_bot.bot import MonitorBot
bot = MonitorBot()
bot.send_message(`@someone`, 'Hello')

2. PythonスクリプトからSlackチャンネルに画像を送る.

画像を送る関数は2種類あります.

以下の関数はMatplotlibで作成したグラフをSlackに送り, 表示します.
MonitorBot.upload_pyplot(channel, pyplot_obj)

  • channel(string): メッセージを送る先となるchannelです.
  • pyplot_obj(matplot module): upload_pyplot関数内でpyplot_obj.savefig()を呼んでいるので, savefig関数を持つmatplotlibのオブジェクトを渡してください.
コード例:
import matplotlib.pyplot as plt
from monitor_bot.bot import MonitorBot
bot = MonitorBot()
plt.plot([1, 3, 2])
bot.upload_pyplot("@someone", plt)

以下の関数はPillowモジュールのImageオブジェクトをSlackに送り, 表示します.
MonitorBot.upload_pillow(channel, pillow_img_obj)

  • channel(string): メッセージを送る先となるchannelです.
  • pillow_img_obj(pillow image bject): Pillowモジューつが提供しているImageオブジェクト.
コード例:
from PIL import Image
from monitor_bot.bot import MonitorBot
bot = MonitorBot()
img = Image.fromarray(np.random.randint(0, 255, size=(128, 128, 3)).astype(np.uint8))
bot.upload_pillow("@someone", img)

3. Slackから送られてきたメッセージに対応して関数を実行する.

SlackからBot宛に送られたメッセージに対する処理を定義するデコレータを使うことができます. デコレートされた関数は, メインスレッドとは非同期に実行されます. そのため, メインの処理を 妨げることなく, メッセージに対する処理を実行できます.

MonitorBot.response_to(pattern)

  • pattern(string): どのようなメッセージに対して反応するかを定義する文字列. 正規表現が使用可能.

以下のコード例では, Botに対してHelloという文字を含むメッセージが送られた時に, 関数funcを呼び出すよう定義しています. 関数funcではsend_message関数を使って, Holaという メッセージを送り返しています.

コード例:
from monitor_bot.bot import MonitorBot
bot = MonitorBot()
@bot.response_to("Hello")
def func(message):
    # Checking from which channel the message came.
    ch = message['channel']
    bot.send_message(ch, "Hola")

注意

MonitorBotを短い時間に何度もインスタンス化すると, Slackへのリクエストが拒否されることがあります.