На первый взгляд, ошибка может быть связана с состоянием FSM (Finite State Machine). Когда пользователь взаимодействует с ботом, его состояние изменяется, и некоторые обработчики сообщений вступают в силу только в определенных состояниях.
В вашем коде вы использовали `@dp.message_handler(state=UserState.choice)`, что указывает, что этот обработчик сообщений будет активирован только в состоянии `UserState.choice`. Если пользователь находится в другом состоянии, этот обработчик не будет вызван, и команда `/start` или другие команды не будут обрабатываться.
Чтобы решить эту проблему, вам нужно установить правильное начальное состояние для пользователя. В приведенном фрагменте кода не видно этой части, но вы можете установить состояние пользователя при запуске бота или при первом взаимодействии с пользователем.
Например, вы можете добавить следующую команду:
```python
@dp.message_handler(commands=['start'])
async def start(message: types.Message, state:FSMContext):
await state.finish() # сбросить состояние пользователя
await state.update_data(started=True) # установить флаг, что пользователь уже запустил бота
await message.reply('Бот успешно запущен!')
```
Затем вы можете изменить ваш обработчик `go` следующим образом:
```python
@dp.message_handler(state=UserState.choice)
async def go(message: types.Message, state:FSMContext):
data = await state.get_data()
started = data.get('started')
if started:
await state.update_data(choice=message.text)
user_id = message.from_user.id
if message.text=='Да!':
pass
else:
await bot.send_message(message.from_user.id, 'Вам необходимо перезапустить бота, нажмите на /start')
else:
await bot.send_message(message.from_user.id, 'Вы должны запустить бота сначала, нажмите на /start')
```
Теперь бот будет обрабатывать команду `/start` и сбрасывать состояние пользователя. Если пользователь уже запустил бота, он сможет взаимодействовать с командой `/go`, но если пользователь не запустил бота, он получит сообщение с инструкцией о запуске бота с помощью `/start`.