Ваш код для обработки состояний в `aiogram` выглядит правильно на первый взгляд, и переменные, которые вы сохраняете в состоянии (например, `name`, `number`, `strigka`), должны быть доступны между обработчиками. Однако, давайте проверим несколько потенциальных проблем, чтобы убедиться, что все работает должным образом:
1. **Использование состояния**: Убедитесь, что вы используете одно и то же состояние FSM (Finite State Machine) в каждом обработчике. Если состояние не устанавливается должным образом, переменные могут не сохраняться. В вашем коде это соблюдено.
2. **Завершение и передача данных**: После того, как пользователь введет данные в одном обработчике (например, в `reg_name`), обработчик должен корректно передать управление следующему обработчику. Например, вызывайте `await state.set_state(Reg.number)` после сохранения данных.
3. **Сохранение данных**: Убедитесь, что данные действительно сохраняются. Например, после каждого вызова `update_data`, вы можете добавить отладочный вывод, чтобы проверить сохраненные данные:
```python
@router.message(Reg.name)
async def reg_name(message: types.Message, state: FSMContext):
await state.update_data(name=message.text)
data = await state.get_data()
print("Saved data:", data) # Добавлено отладочное сообщение
await state.set_state(Reg.number)
await message.answer('Напишите Ваш номер телефона')
```
4. **Обработка состояния**: Убедитесь, что пользователи действительно следуют по порядку состояний. Если пользователь может отправить не по порядку сообщения, это может вызвать проблемы с состоянием. Необходимо добавить обработку ошибок или дополнительные фильтры, чтобы предотвратить это.
5. **Проверка на наличие состояния**: Если вы хотите проверить, доступны ли ранее сохраненные переменные в других обработчиках, вы можете получать данные с помощью `await state.get_data()`, как упомянуто выше. Это позволит увидеть, были ли они сохранены.
Пример, как вы можете получить все сохраненные данные в следующем обработчике:
```python
@router.message(Reg.number)
async def reg_number(message: types.Message, state: FSMContext):
await state.update_data(number=message.text)
data = await state.get_data() # Получаем все сохраненные данные
print("Current data:", data) # Отладочное сообщение
await state.set_state(Reg.strigka)
await message.answer('Напишите стрижку')
```
6. **Ошибки в коде**: Убедитесь, что в вашем коде нет синтаксических ошибок или пропущенных частей. Например, в вашем последнем фрагменте кода обработчик `reg_time` не завершен.
Если вы проверите эти моменты и всё настроено правильно, передача переменных между обработчиками должна работать без проблем.