pythonを使ってリアクティブなWebアプリを作りたい【開発編6】Slack bolt アンインストール時対応

こちらの続きです
[pythonを使ってリアクティブなWebアプリを作りたい【開発編5】Slack boltの組み込み](https://qiita.com/geeorgey/items/ca2942ff054e30587c78)

今日は小ネタです。
前回から、Slack Botの組み込み方について書いてきましたが、今回はSlack Botがインストールされたり、TokenがRevokeされたりしたときの対応をどう組み込むかについてです。
検索しても出てこないので、あれやこれや悩んでしまいましたが、最終的に必要だったのは1行のコードの追加だけでした。Bolt for Python凄い便利！

## 詳しくはここを見る
https://github.com/slackapi/bolt-python/releases/tag/v1.5.0

書いてあるとおりなのですが大事なのはここです

```python:bolt.py
app = App(
  # Enabling installation_store required
)
app.enable_token_revocation_listeners()
```

該当箇所は
[backend/bolt.py](https://github.com/geeorgey/vue_flask_template/blob/8ded48898c7cda79bc8743f29984859f59e6a1c4/backend/bolt.py#L65)

```python:backend/bolt.py
bolt_app = App(
    logger=logger,
    signing_secret=os.environ.get("SIGNING_SECRET"),
    installation_store=installation_store,
    raise_error_for_unhandled_request=True,
    oauth_settings=OAuthSettings(
        client_id=client_id,
        client_secret=client_secret,
        state_store=oauth_state_store,
        scopes=os.environ.get("SLACK_SCOPES"),
        user_scopes=os.environ.get("SLACK_USER_SCOPES"),
    ),
)
bolt_app.enable_token_revocation_listeners()
```

ということで、最後の行を追加してあります。
これをするだけで、アンインストール時には該当する
slack_bots
slack_installations
の当該組織のデータを削除してくれます。めちゃめちゃ便利ですね。
アンインストール時の挙動については以上でOKです。

## エラーハンドリング
ついでに先程のリリースノートに書いてあるエラーハンドリングをしておきます。

```python
app = App(
    token=os.environ["SLACK_BOT_TOKEN"],
    signing_secret=os.environ["SLACK_SIGNING_SECRET"],
    # enable @app.error handler to catch the patterns
    raise_error_for_unhandled_request=True,
)

@app.error
def handle_errors(error):
    if isinstance(error, BoltUnhandledRequestError):
        # You may want to have debug/info logging here
        return BoltResponse(status=200, body="")
    else:
        # other error patterns
        return BoltResponse(status=500, body="Something wrong")
```

この部分。raise_error_for_unhandled_request=True,にすれば良い感じですね。

↑の方のコードブロックに既に書いてしまってあるのですが、[こちらに追加してあります](https://github.com/geeorgey/vue_flask_template/blob/8ded48898c7cda79bc8743f29984859f59e6a1c4/backend/bolt.py#L56)。

実際に[エラーハンドリングするブロックはここです](https://github.com/geeorgey/vue_flask_template/blob/8ded48898c7cda79bc8743f29984859f59e6a1c4/backend/bolt.py#L77)。

以上です。

## 関連リンク
- [pythonを使ってリアクティブなWebアプリをお手軽に1分で作りたい](https://qiita.com/geeorgey/items/ace37bd92841c9d1a378)
- [pythonを使ってリアクティブなWebアプリを作りたい【基礎編】](https://qiita.com/geeorgey/items/3f86b207cd412680b835)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編】](https://qiita.com/geeorgey/items/ea60afe0c44a5f9db483)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編2】](https://qiita.com/geeorgey/items/961c1d1092ec60bb06bd)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編3】](https://qiita.com/geeorgey/items/1f5544b12e7d26a1216c)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編3-2】](https://qiita.com/geeorgey/items/54b4fb22351a3e941cf6)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編4】パスワードの暗号化](https://qiita.com/geeorgey/items/85905a4772903b180fad)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編5】Herokuの開発環境と本番環境](https://qiita.com/geeorgey/items/b080617f5332ab7255c4)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編5】Slack boltの組み込み](https://qiita.com/geeorgey/items/ca2942ff054e30587c78)
- [pythonを使ってリアクティブなWebアプリを作りたい【開発編6】Slack bolt アンインストール時対応
](https://qiita.com/geeorgey/items/0614ea9f64072a33c985)←イマココ
- [Slackアプリ内で問い合わせの送受信ができる仕組みを作って公開した話](https://qiita.com/geeorgey/items/5091e94943337e4e1781)