ユーザーがSlack上でpostした内容に関するSlackアプリを作る場合にはいくつか考慮すべき事が発生するのでそのまとめ。
アプリ自身がpostした瞬間のみに作用する一過性のものであるなら関係ない話なのだが、これをDBに何らかの形で保存している場合には使えるTIPSだと思います。
メッセージイベントに何が入ってくるのか
@bolt_app.event("message")
def handle_message_events(client, event, body, logger, view, payload, context):
print('---------------------------')
print('event message--------------')
print('---------------------------')
メッセージに関するイベントはこのような形で受けるのですが、そこには
- postされたメッセージ
- 編集されたメッセージ
- 削除されたメッセージ
が入ってきます。
編集及び削除については以下のようにsubtypeで判定できます。
if event.get('subtype') == 'message_changed':#編集の場合
#編集時の処理
if event.get('subtype') == 'message_deleted':#削除の場合
#削除時の処理
アプリの開発したては編集時の事を考慮せずに書き始めると思いますが、最終的にはこういった分岐が必要になってきます。
気ままに書いていたら、重複処理が増えすぎてリファクタで死にました。
以下については @seratch さんのコメント前に書いていたことなので無視して下さい
編集及び削除については
if event.get('previous_message') is not None:#編集の場合
このように、previous_messageが存在するか否かで判定します。
更に、削除された場合はこのようにdeleted_tsの有無で判定できます。
if event.get('deleted_ts') is not None:#メッセージが削除された場合
~~