Slackでbotを作ってみたいけどどうしたら良いのか色々調べたところ Bolt for Python がよさそうだったのでチュートリアルを実行してみました。
今回はメッセージをリッスンして応答するというところをやりたいと思います。
簡単にいうと、Slack アプリの開発を迅速かつ簡単にするフレームワークです。
Python以外にもJavaScript(TypeScript)やJavaもあります。
オープンソースで開発されており、Bolt for PythonのGithubはこちらです。
難易度
Pythonの環境構築さえできていればチュートリアルを実行していくだけなので簡単です!
日本語のチュートリアルがあるのでこちらを参照してください。
1. アプリを作る
Create New App からアプリを作ります。
App Name には任意の名前を入力してください。
Pick a workspace to develop your app in にはどのワークスペースに入れるのか選んでください。
「Create App」をクリックします。

2. Slackアプリの設定
続いて設定をしていきます。
OAuth & Permissionsを表示します。

下にスクロールして、Scopesの設定をします。
まずは 「chat:write」を追加。


ページの一番上までスクロールし、「Install App to Workspace」をクリックします。するとBot User OAuth Tokenが表示されます。

続いて、Basic Infomationのページに戻ります。
下にスクロールし、 「Generate Token and Scopes」 をクリックしましょう。
任意のToken NameとScopeは「connections:write」を設定します。

設定したらToken Nameをクリックすると、Tokenが表示されます。

次にサイドメニューのSocke Modeを表示させます。
「Enable Socket Mode」を有効にします。

次にサイドメニューからEvent Subscriptions を表示させます。
「Add Bot User Event」をクリックします。

今回はアプリが参加しているパブリックチャンネルのメッセージをリッスンしたいので「message.channels」を選択します。

追加したら「Save Changes」をクリックしましょう。

3. 仮想環境、環境変数の設定
ターミナルから仮想環境を作りましょう。
python -m venv .venv
source .venv/bin/activate
仮想環境にslack boltのパッケージをインストールします。
pip install slack_bolt
また、事前作業として環境変数にトークンを設定しておきましょう。
export SLACK_BOT_TOKEN=xoxb-<ボットトークン>
export SLACK_APP_TOKEN=xapp-<アプリレベルトークン>
環境変数を確認したいときはこちらのコマンドを実行してください。
export -p
4. 動かしてみよう
同じディレクトリ内にコードを追加します。チュートリアルと同様に「app.py」で保存。
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# ボットトークンとソケットモードハンドラーを使ってアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
# 'hello' を含むメッセージをリッスンします
# 指定可能なリスナーのメソッド引数の一覧は以下のモジュールドキュメントを参考にしてください:
# https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
@app.message("hello")
def message_hello(message, say):
# イベントがトリガーされたチャンネルへ say() でメッセージを送信します
say(f"Hey there <@{message['user']}>!")
# アプリを起動します
if __name__ == "__main__":
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
実行!
python3 app.py

Slackで「hello」と入力すると

ちゃんと応答しました!
これで特定のキーワードに反応するbotはできそうですね!
ぜひチャレンジしてみてください。

