Заставить правильно работать message_handler
Есть два куска кода в разных ботах, в первом он проверяет вводимую дату и при ошибке в формате даты предлагает ввести дату снова. Работает это через try-except
@dp.message_handler(state=FSMParam.checkin) # Вводим дату начала чартера
async def load_checkin(message: types.Message, state: FSMContext):
try:
datetime.date.fromisoformat(message.text)
async with state.proxy() as data:
data['checkin'] = message.text
await FSMParam.next()
await message.reply("дата окончания чартера 'ГГГГ-ММ-ДД'")
except ValueError:
await message.reply(f'Вы ввели не правильную дату, попробуйте еще раз! \n')
Во втором боте проверяется валидность номера телефона, вводить заново номер он не предлагает. Делается через if-else
@dp.message_handler(state=FSMAdmin.phone_number)
async def load_phone(message: types.Message, state: FSMContext):
if validate_phone_number(message.text):
async with state.proxy() as data:
data['phone_number'] = message.text
try:
""" Проверка клиента на присутствие в базе данных """
base_connect, cur = base_init()
name, id_client = check_phone_number(data['phone_number'])
base_close(base_connect)
await message.answer(f'{name}, Вы вошли, запишитесь на консультацию.', reply_markup=kb_order)
except:
await message.answer(f"Вы не зарегистрированы в базе данных. Пройдите регистрацию.")
else:
await message.reply(
f"Номер телефона невереного формата.\nПовторите ввод фамилии и номер телефона в формате +79876543210\nЖмите кнопку 'Вход'")
Функция проверки телефона:
def validate_phone_number(phone_number):
# Паттерн для проверки номера телефона в формате +7XXXXXXXXXX
pattern = r'^\+7\d{10}$'
if re.match(pattern, phone_number):
return True
else:
return False
Как сделать так, чтобы в рамках второй функции бот запрашивал заново номер телефона?
Источник: Stack Overflow на русском