Задать вопрос
@nickie000

Не могу проверить отправленное сообщение на тип введенных данных [aiogram]?

Суть проблемы:
Я хочу проверить человек отправил числа или что-то другое
#  Стаж вождения
@dp.message_handler(Text(equals=["Да ✅"]))
async def drive_exp(message: types.Message, state: FSMContext):
	async with state.proxy() as data:
		data['drlicense'] = message.text
	await message.answer("Сколько лет стажа Вашего вождения? Укажите цифрами...", reply_markup=types.ReplyKeyboardRemove())

# Проверка на правильность написания стажа
@dp.message_handler(lambda message: not message.text.isdigit(), state = Qnnaire.driveexp)
async def drive_exp_invalid(message: types.Message):
	return await message.reply("Сказал же написать цифрами, попробуйте еще раз ")

# Стаж написан правильно
# Опыт в такси 
@dp.message_handler(lambda message: message.text.isdigit(), state = Qnnaire.driveexp)
async def taxi_exp(message: types.Message, state: FSMContext):
	async with state.proxy() as data:
		data['driveexp'] = message.text
	keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
	buttons = ["Конечно", "Еще нет"]
	keyboard.add(*buttons)
	await message.answer(" У Вас есть опыт работы в такси?", reply_markup=keyboard)


Finite state machine example из доков aiogram не помог
если добавляю в самом начале await Qnnaire.citizen.set() и с каждой новой функцией await Qnnaire.next(), то функции не работают, только если бота перезапустить и то, пройдет одну функцию и останавливается.
Но даже так все-равно не работает фильтр
Python 3.10.4
aiogram 2.20 вроде)
  • Вопрос задан
  • 1327 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
WhiteMarlin
@WhiteMarlin
Как вариант, для проверки можно использовать регулярное выражение.
if re.match(r"^[0-9]+$", message.text):
    # True
else:
    # False
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
InternetMaster
@InternetMaster
Интернет
Ну во-первых это часть кода, нету даже самого Qnnaire.
Нету, ошибки которая выдается (раз ты говоришь что не работает, только перезапустить)

Но даже так все-равно не работает фильтр

Какой фильтр?

Кстати убери лямбду в декораторе над функцией taxi_exp, это ненужное отнимание ресурсов вычислительной техники, ведь если введено не число, его отловит функция выше
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы