Slack Bolt for Python で bot開発 メンション編

Slackでbotを作ってみたいというところでBolt for Pythonを使って色々試みてます。

前回の続きで、今度はメンションされたらsay(応答)する仕組みにしたいと思います。

前回の記事はこちら ↓

Slack Bolt for Python で bot開発 チュートリアル編
Bolt for Pythonとは

簡単にいうと、Slack アプリの開発を迅速かつ簡単にするフレームワークです。

Python以外にもJavaScript(TypeScript)やJavaもあります。

オープンソースで開発されており、Bolt for PythonのGithubはこちらです。

難易度

チュートリアルまで実行できていればすぐにできます!

日本語のチュートリアルがあるのでこちらを参照してください。

Bolt for Python のチュートリアル

1. アプリの設定

サイドメニューのEvent Subscriptionsをクリックします。

Subscribe to bot eventsを開き、「Add Bot User Event」をクリック。

「app_mention」を追加しましょう。右下にある「Save Changes」をクリックします。

「reinstall your app」という表示が出た場合はクリックしてアプリを再インストールします。

1. 動かしてみよう

チュートリアルと同じディレクトリ内に新規ファイルでコードを追加します。今回は「mention.py」で保存。

Python
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# ボットトークンとソケットモードハンドラーを使ってアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))

# メンションされたらsay
@app.event("app_mention")
def message_mention(say):
    say("メンションしてくれてありがとう")

# アプリを起動します
if __name__ == "__main__":
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
    

実行!

python3 mention.py

Slackでbotにメンションすると

ちゃんと応答しました!

しかし、mention.pyを動かしているとコンソールにsuggestのメッセージが!?

Unhandled request ({'type': 'event_callback', 'event': {'type': 'message'}})
---
[Suggestion] You can handle this type of event with the following listener function:

@app.event("message")
def handle_message_events(body, logger):
    logger.info(body)

とりあえずこちらを追加してみます。

Python
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# ボットトークンとソケットモードハンドラーを使ってアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))

# メンションされたらsay
@app.event("app_mention")
def message_mention(say):
    say("メンションしてくれてありがとう")

@app.event("message")
def handle_message_events(body, logger):
    logger.info(body)


# アプリを起動します
if __name__ == "__main__":
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
    

実行すると先ほどのコンソールのメッセージが消えました!

他のイベント実行も試していきたいと思います!

参考