diff --git a/CHANGES/1242.bugfix.rst b/CHANGES/1242.bugfix.rst new file mode 100644 index 00000000..eb981383 --- /dev/null +++ b/CHANGES/1242.bugfix.rst @@ -0,0 +1 @@ +Fixed polling startup when "bot" key is passed manually into dispatcher workflow data diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index eb2d55f2..f85c91d4 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -516,6 +516,9 @@ class Dispatcher(Router): **self.workflow_data, **kwargs, } + if "bot" in workflow_data: + workflow_data.pop("bot") + await self.emit_startup(bot=bots[-1], **workflow_data) loggers.dispatcher.info("Start polling") try: diff --git a/tests/test_dispatcher/test_dispatcher.py b/tests/test_dispatcher/test_dispatcher.py index 69aece69..b0cc5b79 100644 --- a/tests/test_dispatcher/test_dispatcher.py +++ b/tests/test_dispatcher/test_dispatcher.py @@ -675,6 +675,7 @@ class TestDispatcher: async def test_start_polling(self, bot: MockedBot): dispatcher = Dispatcher() + dispatcher.workflow_data["bot"] = 42 with pytest.raises( ValueError, match="At least one bot instance is required to start polling" ): @@ -708,6 +709,8 @@ class TestDispatcher: mocked_emit_startup.assert_awaited() mocked_process_update.assert_awaited() mocked_emit_shutdown.assert_awaited() + assert dispatcher.workflow_data["bot"] == 42 + assert mocked_emit_shutdown.call_args.kwargs["bot"] == bot async def test_stop_polling(self): dispatcher = Dispatcher()