Перезапуск функции при неправильном значении
Есть вот такой код бота aiogram, с машиной состояний. Который сохраняет в БД Имя и Фамилию пользователя. Но, если нечаянно нажать кнопку во время приема имени, то в БД сохраниться значение кнопки. Как перезапустить функцию сначала если во время приема имени в чат прилетит /Да или Главное меню
class FSMAdmin(StatesGroup):
name = State()
idname = State()
@dp.message_handler(commands="Да", state=None)
async def fsm_message(message: types.Message):
await FSMAdmin.name.set()
await message.reply('Введите Имя и Фамилию')
# Ловим имя и id
@dp.message_handler(state=FSMAdmin.name)
async def load_name(message: types.Message, state: FSMContext):
name=message.text
print(name)
get_name = (f'Ваше имя : {name},'' (Вы можете повторно нажать кнопку /Да и изменить имя).? ,'
'➡️ Далее необходимо нажимать на кнопки вопросов. ,'
'➡️ После этого жмем на кнопку для записи видеответа. ,')
get_name_split = get_name.split(',')
get_name_lines = '\n \n'.join(get_name_split)
async with state.proxy() as data:
data['name'] = message.text
data['idname'] = message.from_id
await message.reply(get_name_lines, reply_markup=nav.qwestionMenu)
await sql_add_command(state) # выводил в базу
await state.finish()
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Просто уберите кнопки после требования ввода
from aiogram.types import ReplyKeyboardRemove
# state=None писать смысла нет
@dp.message_handler(commands="Да")
async def fsm_message(message: types.Message):
await message.reply('Введите Имя и Фамилию', reply_markup=ReplyKeyboardRemove())
await FSMAdmin.name.set()