Проверка сообщения FSMContext
столкнулся с проблемой и не знаю как ее осуществить от слова совсем
Проблема вот какая получаю от пользователя сообщение и нужно сделать проверку на количество знаков (что бы было не меньше 12)
может кто сталкивался
aiogram 2.15
python 3.9
async def service_choice(message: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
data['service_choice'] = message.data
print(message.data)
await FSMRegistration.next()
await bot.send_message(message.from_user.id, '? Пожалуйста, введите БИН компании: (12 цифр)')
async def bin_number(message: types.CallbackQuery, stare: FSMContext):
async with state.proxy() as data:
print(len(message.data))
while True:
if len(message.data) < 12:
bot.send_message(message.from_user.id, 'Неверно введён БИН!')
else:
data['bin_number'] = message.data
break
await bot.send_message(message.from_user.id, 'Выберите вид услуги:', reply_markup=service_selection)
Ответы (2 шт):
Автор решения: Ben Puls
→ Ссылка
Для получения сообщения пользователя в Message
существует атрибут text
. Подробнее о FSM в aiogram 2.
async def service_choice(message: types.CallbackQuery, state: FSMContext):
async with state.proxy() as data:
data['service_choice'] = message.text
print(message.text)
await FSMRegistration.next()
await bot.send_message(message.from_user.id, '? Пожалуйста, введите БИН компании: (12 цифр)')
async def bin_number(message: types.CallbackQuery, stare: FSMContext):
async with state.proxy() as data:
print(len(message.text))
while True:
if len(message.text) < 12:
bot.send_message(message.from_user.id, 'Неверно введён БИН!')
else:
data['bin_number'] = message.text
break
await bot.send_message(message.from_user.id, 'Выберите вид услуги:', reply_markup=service_selection)
Автор решения: Святослав Ребров
→ Ссылка
Проблема в том, что сообщение уже падает в FSM, и как бы на этом затыкается, и уже какие-либо проверки бесполезны.
Решил таким способом:
async def bin_number(message: types.CallbackQuery, state: FSMContext):
if not message.text.isdigit() or not (0 < int(message.text) < 12):
await bot.send_message(message.from_user.id, 'Неверно введён БИН!')
return
await state.update_data(bin_number=(message.text))
await FSMRegistration.next()
await bot.send_message(message.from_user.id, 'прошли')
может, кому пригодится в будущем.