Была подобная проблема, пока пользуюсь таким кодом
async def filter_commands(message: Message, state: FSMContext):
text = message.text
if text.startswith('/'):
cmd = text.lstrip('/')
if cmd in COMMANDS:
handlers = dp.message_handlers.handlers
for h in handlers:
filters = [f.filter for f in h.filters if type(f.filter) == Command and cmd in f.filter.COMMANDS]
if len(filters) > 0:
await state.reset_state()
await h.handler(message)
return True
return False
Использование - в начало обработчика вставляю, например
async def get_age(self, message: types.Message, state: FSMContext):
if await filter_commands(message, state):
return