From 31ceb6f9bb97bc04edbb7690f6fc21a99c0d7400 Mon Sep 17 00:00:00 2001 From: quicksilversel Date: Mon, 23 Mar 2026 10:32:45 +0900 Subject: [PATCH 1/2] fix: add missing lazy parameter to listener method type hints Adds the `lazy` parameter to the type signatures of all 18 listener registration methods in both `App` and `AsyncApp`. The parameter was already handled at runtime via **kwargs but was missing from the method signatures, causing mypy errors when users passed lazy=[...]. No runtime behavior changes. Fixes #1412 --- slack_bolt/app/app.py | 18 ++++++++++++++++++ slack_bolt/app/async_app.py | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/slack_bolt/app/app.py b/slack_bolt/app/app.py index 566eb82d7..de3f80be9 100644 --- a/slack_bolt/app/app.py +++ b/slack_bolt/app/app.py @@ -813,6 +813,7 @@ def event( ], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new event listener. This method can be used as either a decorator or a method. @@ -855,6 +856,7 @@ def message( keyword: Union[str, Pattern] = "", matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new message event listener. This method can be used as either a decorator or a method. Check the `App#event` method's docstring for details. @@ -917,6 +919,7 @@ def function( middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, auto_acknowledge: bool = True, ack_timeout: int = 3, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new Function listener. This method can be used as either a decorator or a method. @@ -967,6 +970,7 @@ def command( command: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new slash command listener. This method can be used as either a decorator or a method. @@ -1008,6 +1012,7 @@ def shortcut( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new shortcut listener. This method can be used as either a decorator or a method. @@ -1052,6 +1057,7 @@ def global_shortcut( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new global shortcut listener.""" @@ -1067,6 +1073,7 @@ def message_shortcut( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new message shortcut listener.""" @@ -1085,6 +1092,7 @@ def action( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new action listener. This method can be used as either a decorator or a method. @@ -1122,6 +1130,7 @@ def block_action( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `block_actions` action listener. Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload/ for details. @@ -1139,6 +1148,7 @@ def attachment_action( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `interactive_message` action listener. Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons/ for details.""" @@ -1155,6 +1165,7 @@ def dialog_submission( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `dialog_submission` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" @@ -1171,6 +1182,7 @@ def dialog_cancellation( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `dialog_cancellation` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" @@ -1190,6 +1202,7 @@ def view( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `view_submission`/`view_closed` event listener. This method can be used as either a decorator or a method. @@ -1238,6 +1251,7 @@ def view_submission( constraints: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `view_submission` listener. Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission for @@ -1256,6 +1270,7 @@ def view_closed( constraints: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `view_closed` listener. Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_closed for details.""" @@ -1275,6 +1290,7 @@ def options( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new options listener. This method can be used as either a decorator or a method. @@ -1323,6 +1339,7 @@ def block_suggestion( action_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `block_suggestion` listener.""" @@ -1338,6 +1355,7 @@ def dialog_suggestion( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., bool]]] = None, middleware: Optional[Sequence[Union[Callable, Middleware]]] = None, + lazy: Optional[Sequence[Callable[..., Optional[BoltResponse]]]] = None, ) -> Callable[..., Optional[Callable[..., Optional[BoltResponse]]]]: """Registers a new `dialog_suggestion` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" diff --git a/slack_bolt/app/async_app.py b/slack_bolt/app/async_app.py index 9cd8c911f..9475dc99d 100644 --- a/slack_bolt/app/async_app.py +++ b/slack_bolt/app/async_app.py @@ -841,6 +841,7 @@ def event( ], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new event listener. This method can be used as either a decorator or a method. @@ -883,6 +884,7 @@ def message( keyword: Union[str, Pattern] = "", matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new message event listener. This method can be used as either a decorator or a method. Check the `App#event` method's docstring for details. @@ -948,6 +950,7 @@ def function( middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, auto_acknowledge: bool = True, ack_timeout: int = 3, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[BoltResponse]]]]: """Registers a new Function listener. This method can be used as either a decorator or a method. @@ -999,6 +1002,7 @@ def command( command: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new slash command listener. This method can be used as either a decorator or a method. @@ -1040,6 +1044,7 @@ def shortcut( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new shortcut listener. This method can be used as either a decorator or a method. @@ -1084,6 +1089,7 @@ def global_shortcut( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new global shortcut listener.""" @@ -1099,6 +1105,7 @@ def message_shortcut( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new message shortcut listener.""" @@ -1117,6 +1124,7 @@ def action( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new action listener. This method can be used as either a decorator or a method. @@ -1154,6 +1162,7 @@ def block_action( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `block_actions` action listener. Refer to https://docs.slack.dev/reference/interaction-payloads/block_actions-payload/ for details. @@ -1171,6 +1180,7 @@ def attachment_action( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `interactive_message` action listener. Refer to https://docs.slack.dev/legacy/legacy-messaging/legacy-message-buttons/ for details.""" @@ -1187,6 +1197,7 @@ def dialog_submission( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `dialog_submission` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" @@ -1203,6 +1214,7 @@ def dialog_cancellation( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `dialog_submission` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" @@ -1222,6 +1234,7 @@ def view( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `view_submission`/`view_closed` event listener. This method can be used as either a decorator or a method. @@ -1270,6 +1283,7 @@ def view_submission( constraints: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `view_submission` listener. Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_submission for @@ -1288,6 +1302,7 @@ def view_closed( constraints: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `view_closed` listener. Refer to https://docs.slack.dev/reference/interaction-payloads/view-interactions-payload/#view_closed for details.""" @@ -1307,6 +1322,7 @@ def options( constraints: Union[str, Pattern, Dict[str, Union[str, Pattern]]], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new options listener. This method can be used as either a decorator or a method. @@ -1355,6 +1371,7 @@ def block_suggestion( action_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `block_suggestion` listener.""" @@ -1370,6 +1387,7 @@ def dialog_suggestion( callback_id: Union[str, Pattern], matchers: Optional[Sequence[Callable[..., Awaitable[bool]]]] = None, middleware: Optional[Sequence[Union[Callable, AsyncMiddleware]]] = None, + lazy: Optional[Sequence[Callable[..., Awaitable[Optional[BoltResponse]]]]] = None, ) -> Callable[..., Optional[Callable[..., Awaitable[Optional[BoltResponse]]]]]: """Registers a new `dialog_suggestion` listener. Refer to https://docs.slack.dev/legacy/legacy-dialogs/ for details.""" From ff766a3d4d7838b780c6ffbdb7ba6d0801ad1428 Mon Sep 17 00:00:00 2001 From: quicksilversel Date: Mon, 23 Mar 2026 10:37:04 +0900 Subject: [PATCH 2/2] chore: retrigger CLA check