yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。
20211210_bolt-for-python_23_cropped

いつの間にslackbotモジュールやHubotは使えなくなったらしい(絶対できるBolt for Python入門)

2021-12-11
  1. slackbotモジュール使えないってどういうこと?
  2. Bolt for Python入門〜Slack Appの作成〜
  3. Bolt for Python入門〜Boltのインストールと起動〜
  4. Bolt for Python入門〜SlackへApp追加と動作確認〜

slackbotモジュール使えないってどういうこと?

SlackのAPIにはいくつか種類があって、Python使いの皆さんにはおそらくお馴染みだった、slackbotモジュールは、RTM APIを使った仕組み

参考:必要な Slack API はどれ? – Slack アプリの作成のためのヒント

しかし、今後SlackではRTM APIをサポートしなくなるようで、すなわちslackbotモジュールが使えなくなるとのことです
(もうすでに新しく作成するアプリでは使えず、どうしても使いたければ、classic appを作成せよとのこと)

RTM APIのページには、今後はEvents APIを使えとアナウンスされています
Real Time Messaging API

ちなみに、HubotもRTM APIを使っているので、Hubotも使えなくなります

Github上でもIssueとしてあげられていますね
https://github.com/scrapinghub/slackbot/issues/217
https://github.com/slackapi/hubot-slack/issues/630

では今後どうすれば良いのかというと、Slack公式のフレームワークであるBoltを使うのがおすすめのようです(公式のフレームワークあったんかい)

Bolt

Boltは3言語サポートしており、JavaScript、Python、Javaがあり、
slackbotモジュールはBolt for Python、HubotはBolt for Javascriptへ移行するのが良さそうです

ということで、今回は、Bolt for Pythonに入門してみます

Bolt for Python入門〜Slack Appの作成〜

こちらの手順に沿って進めていきます
Bolt for Python

まずは以下リンクからSlackアプリを作成

20211210_bolt-for-python_1
20211210_bolt-for-python_2

※ 上部に出てくる「A new way to configure your app is coming. We’ve built an easier way to make all your changes from one place.Try it out now」はクリックしないでください
「OAuth&Permissions」タブをクリック
20211210_bolt-for-python_3

下にスクロールして「Add an OAuth Scope」をクリック
「chat:write」をスコープに指定する
20211210_bolt-for-python_4
20211210_bolt-for-python_5

上にスクロールして「Install to Workspace」をクリック
20211210_bolt-for-python_6

「Allow」をクリック
20211210_bolt-for-python_7

すると「xoxb-」から始まるBot Tokenが発行されるのでメモっておく
20211210_bolt-for-python_8

「Basic Information」タブをクリック
20211210_bolt-for-python_9

下にスクロールして「Generate Token and Scopes」をクリック
20211210_bolt-for-python_10

適当な名前をつけて「connections:write」のScopeを追加し「Generate」をクリック

app_level_tokenが発行されるのでこれもメモっておく
20211210_bolt-for-python_12

次に「Socket Mode」タブをクリックし、「Enable Socket Mode」から有効化しておく
20211210_bolt-for-python_13
20211210_bolt-for-python_14

次は「Event Subscriptions」タブをクリックし「Enable Events」をオンにする
20211210_bolt-for-python_15
20211210_bolt-for-python_16

下にスクロールして「Subscribe to events」のアコーディオンが閉じていれば広げて
「Add Bot User Event」をクリック

20211210_bolt-for-python_17

「message.channels」「message.groups」「message.im」「message.mpim」
の4つのイベントを追加したら「Save Changes」をクリック

20211210_bolt-for-python_18

すると、上部に黄色いバーが出てくるので「reinstall your app」をクリックする
20211210_bolt-for-python_19

「Allow」をクリック
20211210_bolt-for-python_7


Bolt for Python入門〜Boltのインストールと起動〜

Terminalを開き、任意のフォルダでslack_botをインストール

%  pip install slack_bolt

先程メモしたBot TokenとApp Level Tokenを環境変数(SLACK_BOT_TOKENとSLACK_APP_TOKEN)に入れておく

%  export SLACK_BOT_TOKEN=【xoxb-xxxxxx】
%  export SLACK_APP_TOKEN=【xapp-xxxxxx】

app.pyを作成する
(手順のコードそのままです)

 
%  vim app.py
%  cat 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()

Boltを起動する

 
%  python app.py
⚡️ Bolt app is running!

Bolt for Python入門〜SlackへApp追加と動作確認〜

Slackアプリを開き、任意のチェンネルへ
上部のチャンネル名の横の矢印をクリック
20211210_bolt-for-python_20

「Integrations」タブから「Add apps」をクリック
20211210_bolt-for-python_21

先程作成したアプリを名前で検索して「Add」をクリック
20211210_bolt-for-python_22

Slackチャンネルで「hello」と呟くと反応してくれる
20211210_bolt-for-python_23

まだしっかり触っていないけど、slackbotモジュールと同じような感じでカスタマイズできそう
以上。