import aiogram
import aiogram.filters
import aiogram.types
import aiogram.fsm.context
import aiogram.fsm.state
from aiogram.fsm.storage.redis import RedisStorage
import redis.asyncio as redis
with open("Telegram/Configs.json", "r") as File:
TelegramConfigs: dict[str, typing.Any] = json.load(File)
import Telegram.Utilities as Utilities
Dispatcher=Utilities.aiogram.Dispatcher(
storage=Utilities.RedisStorage(
Utilities.redis.Redis(
host="127.0.0.1",
port=6379,
)
)
)
Router=Utilities.aiogram.Router(name = "Main")
@Router.message(Utilities.aiogram.filters.CommandStart())
@Router.callback_query(Utilities.aiogram.F.data == "start")
async def start(MessageOrCallback: Utilities.aiogram.types.Message | Utilities.aiogram.types.CallbackQuery, State: Utilities.aiogram.fsm.context.FSMContext):
print("/Started")
Dispatcher.include_router(Router)
This code is just a minimal example
Looking at the docs (https://docs.aiogram.dev/en/dev-3.x/dispatcher/finite_state_machine/index.html) they casually have the FSM context as a second parameter in their start function but as soon as I run the start command I get this error:
Cause exception while process update id=511380950 by bot id=7945450430
TypeError: start() missing 1 required positional argument: 'State'
Traceback (most recent call last):
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<7 lines>...
)
^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/middlewares/error.py", line 25, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/middlewares/user_context.py", line 56, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/fsm/middleware.py", line 42, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 146, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 141, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
observer=observer, update_type=update_type, event=telegram_event, **data
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 174, in _propagate_event
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 146, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 141, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
observer=observer, update_type=update_type, event=telegram_event, **data
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/router.py", line 166, in _propagate_event
response = await observer.trigger(event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/event/telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/zein/Desktop/Usolabot/venv/lib/python3.13/site-packages/aiogram/dispatcher/event/handler.py", line 43, in call
return await wrapped()
~~~~~~~^^
TypeError: start() missing 1 required positional argument: 'State'
I've looked as hard as I can to try see what i'm not doing that they're doing but I just don't see it.
Apparently you can't name the second parameter whatever you want. The name of the second parameter must be state
. Not knowing this information, I was using a capitalised S
. Putting it to lowercase solved the problem.