From 383d76e7deb05391bec7000085bc092e8237ac8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D0=B4=D0=B8=D0=BC=20=D0=A5=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Mon, 14 Apr 2025 22:44:22 +0300 Subject: [PATCH] Try hot fix for bug. Bug: https://t.me/aiogram/48109/85374 --- aiogram/fsm/scene.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/aiogram/fsm/scene.py b/aiogram/fsm/scene.py index 1344b4d0..43e851ad 100644 --- a/aiogram/fsm/scene.py +++ b/aiogram/fsm/scene.py @@ -551,10 +551,12 @@ class SceneWizard: await self.manager.enter(scene, _check_active=False, **kwargs) async def _on_action(self, action: SceneAction, **kwargs: Any) -> bool: + from aiogram.dispatcher.router import Router + if not self.scene: raise SceneException("Scene is not initialized") - loggers.scene.debug("Call action %r in scene %r", action.name, self.scene_config.state) + loggers.scene.debug("Call action %r in scene %r (middleware aware)", action.name, self.scene_config.state) action_config = self.scene_config.actions.get(action, {}) if not action_config: loggers.scene.debug( @@ -572,7 +574,24 @@ class SceneWizard: ) return False - await action_config[event_type].call(self.scene, self.event, **{**self.data, **kwargs}) + router: Router = getattr(self.manager.registry, "router", None) + if router is None: + await action_config[event_type].call(self.scene, self.event, **{**self.data, **kwargs}) + return True + + observer = router.observers.get(event_type) + if observer is None: + await action_config[event_type].call(self.scene, self.event, **{**self.data, **kwargs}) + return True + + async def _actual_handler(event, data): + return await action_config[event_type].call(self.scene, event, **data) + + await observer.wrap_outer_middleware( + _actual_handler, + event=self.event, + data={**self.data, **kwargs} + ) return True async def set_data(self, data: Dict[str, Any]) -> None: