SlackBotを作ろう

Slackとは

ビジネス用のコミュニケーションツールです。

SlackBotとは

Slack用のBotです。
応用すれば以下のように使えます。

環境構築

ワークスペース

Slack Botを作るためには、Slackのチームが必要です。
詳しくはこちらを見て下さい

Bots

ワークスペースにBotsを導入する必要があります。
こちらからインストールして下さい。
またそのAPI Tokenは扱いに注意して、メモをして下さい。

slack-clients

pipを使ってインストールしましょう。

pip install slackclient

Let’s Hack

基本的に詳しくはこちらということでお願いします。

メッセージの送信

from slackclient import SlackClient

slack_token = 'BotsのAPIキーをここに貼る'
sc = SlackClient(slack_token)

sc.api_call(
    "chat.postMessage",
    channel="#チャンネル名",
    text="メッセージ"
)

メッセージの受け取り

とりあえず受け取る

import time, sys
from slackclient import SlackClient

slack_token = 'BotsのAPIキーをここに貼る'
sc = SlackClient(slack_token)

if not sc.rtm_connect():
    # コネクションに失敗したら
    # エラーを吐いて終了
    print("Connection Failed")
    sys.exit()

while sc.server.connected is True:
    # ここで読み込んでる
    print(sc.rtm_read())
    time.sleep(1)

辞書型の空のメッセージとか、長ったらしいメッセージが流れてくる。

メッセージだけを抽出する

import time, sys
from slackclient import SlackClient

slack_token = 'BotsのAPIキーをここに貼る'
sc = SlackClient(slack_token)

if not sc.rtm_connect():
    # コネクションに失敗したら
    # エラーを吐いて終了
    print("Connection Failed")
    sys.exit()

while sc.server.connected is True:
    # メッセージを取得
    message_list = sc.rtm_read()
    time.sleep(1)

    if not message_list:
        # 取得したメッセージが
        # 空だったら無視
        continue

    for message in message_list:
        if message["type"] != 'message':
            # メッセージのタイプが
            # messageでなかったら無視
            continue

        print(message["text"])

メッセージのテキストだけ表示されるようになった。

pythonってきたら、「いいぞぉ〜」って返す

import time, sys
from slackclient import SlackClient

slack_token = 'BotsのAPIキーをここに貼る'
sc = SlackClient(slack_token)

if not sc.rtm_connect():
    # コネクションに失敗したら
    # エラーを吐いて終了
    print("Connection Failed")
    sys.exit()

while sc.server.connected is True:
    # メッセージを取得
    message_list = sc.rtm_read()
    time.sleep(1)

    if not message_list:
        # 取得したメッセージが
        # 空だったら無視
        continue

    for message in message_list:
        if message["type"] != 'message':
            # メッセージのタイプが
            # messageでなかったら無視
            continue

        if message["text"] != "python":
            # メッセージの内容が
            # pythonでなかったら無視
            continue

        # 送信
        sc.api_call(
            "chat.postMessage",
            channel=message['channel'],
            text="いいぞぉ〜( ^ω^)"
        )

        print("Send !")

Pythonはいいぞぉ〜( ^ω^)