Skip to content

Commit 1b4eefc

Browse files
authored
Fix #372 by adding listener matcher docs (#402)
1 parent fa4988f commit 1b4eefc

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

docs/_advanced/ja_listener_middleware.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ order: 5
77

88
<div class="section-content">
99
リスナーミドルウェアは、それを渡したリスナーでのみ実行されるミドルウェアです。リスナーには、`middleware` パラメーターを使ってミドルウェア関数をいくつでも渡すことができます。このパラメーターには、1 つまたは複数のミドルウェア関数からなるリストを指定します。
10+
11+
非常にシンプルなリスナーミドルウェアの場合であれば、`next()` メソッドを呼び出す代わりに `bool` 値(処理を継続したい場合は `True`)を返すだけで済む「リスナーマッチャー」を使うとよいでしょう。
1012
</div>
1113

1214
<div>
1315
<span class="annotation">指定可能な引数の一覧は<a href="https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html" target="_blank">モジュールドキュメント</a>を参考にしてください。</span>
16+
1417
```python
1518
# "bot_message" サブタイプのメッセージを抽出するリスナーミドルウェア
1619
def no_bot_messages(message, next):
@@ -21,7 +24,18 @@ def no_bot_messages(message, next):
2124
# このリスナーは人間によって送信されたメッセージのみを受け取ります
2225
@app.event(event="message", middleware=[no_bot_messages])
2326
def log_message(logger, event):
24-
logger.info(f"(MSG) User: {event['user']}
25-
Message: {event['text']}")
27+
logger.info(f"(MSG) User: {event['user']}\nMessage: {event['text']}")
28+
29+
# リスナーマッチャー: 簡略化されたバージョンのリスナーミドルウェア
30+
def no_bot_messages(message) -> bool:
31+
return message.get("subtype") != "bot_message"
32+
33+
@app.event(
34+
event="message",
35+
matchers=[no_bot_messages]
36+
# or matchers=[lambda message: message.get("subtype") != "bot_message"]
37+
)
38+
def log_message(logger, event):
39+
logger.info(f"(MSG) User: {event['user']}\nMessage: {event['text']}")
2640
```
2741
</div>

docs/_advanced/listener_middleware.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ order: 5
77

88
<div class="section-content">
99
Listener middleware is only run for the listener in which it's passed. You can pass any number of middleware functions to the listener using the `middleware` parameter, which must be a list that contains one to many middleware functions.
10+
11+
If your listener middleware is a quite simple one, you can use a listener matcher, which returns `bool` value (`True` for proceeding) instead of requiring `next()` method call.
1012
</div>
1113

1214
<div>
1315
<span class="annotation">Refer to <a href="https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html" target="_blank">the module document</a> to learn the available listener arguments.</span>
16+
1417
```python
1518
# Listener middleware which filters out messages with "bot_message" subtype
1619
def no_bot_messages(message, next):
@@ -20,6 +23,18 @@ def no_bot_messages(message, next):
2023

2124
# This listener only receives messages from humans
2225
@app.event(event="message", middleware=[no_bot_messages])
26+
def log_message(logger, event):
27+
logger.info(f"(MSG) User: {event['user']}\nMessage: {event['text']}")
28+
29+
# Listener matchers: simplified version of listener middleware
30+
def no_bot_messages(message) -> bool:
31+
return message.get("subtype") != "bot_message"
32+
33+
@app.event(
34+
event="message",
35+
matchers=[no_bot_messages]
36+
# or matchers=[lambda message: message.get("subtype") != "bot_message"]
37+
)
2338
def log_message(logger, event):
2439
logger.info(f"(MSG) User: {event['user']}\nMessage: {event['text']}")
2540
```

0 commit comments

Comments
 (0)