@nickie000

Как 2 одинаковые функции использовать в разных местах [aiogram]?

У меня есть 2 функции идентичные друг другу
ПЕРВАЯ
@dp.message_handler(Text(startswith=number))
	async def taxi_exp(message: types.Message, state: FSMContext):
		keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
		buttons = ["Конечно", "Еще нет"]
		keyboard.add(*buttons)
		async with state.proxy() as data:
			data['driveexp'] = message.text
		await message.answer(" У Вас есть опыт работы в такси?\nДля отмены нажмите (/cancel)", reply_markup=keyboard)
	@dp.message_handler(Text(startswith=letter))
	async def taxi_exp(message: types.Message, state: FSMContext):
		await message.answer('')
		await message.reply("Сказал же написать цифрами, попробуйте еще раз ")

И ВТОРАЯ
@dp.message_handler(Text(startswith=number))
	async def region_num_true(message: types.Message, state: FSMContext):
		keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
		buttons = ["Конечно", "Еще нет"]
		keyboard.add(*buttons)
		async with state.proxy() as data:
			data['region'] = message.text
		await message.answer("Напишите, пожалуйста, марку и модель Вашего автомобиля. Например: Toyota Supra...\nДля отмены нажмите (/cancel)", reply_markup=keyboard)
	@dp.message_handler(Text(startswith=letter))
	async def region_num_false(message: types.Message, state: FSMContext):
		await message.answer('')
		await message.reply("По-моему Номер региона я просил написать цифрами, попробуйте еще раз ")

первая стоит раньше второй, и когда нужно проверить регион в сообщении, то вызывается функция которая проверяет опыт (первая)
как их вызывать по отдельности?
Python 3.10.4
aiogram 2.20 вроде)
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
InternetMaster
@InternetMaster
Интернет
Ну во первых вложенные декораторы это не клёво, советую так не делать.

keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)

Здесь можно row_width не писать, ведь по умолчанию это 3, вам подходит.

первая стоит раньше второй, и когда нужно проверить регион в сообщении, то вызывается функция которая проверяет опыт (первая)
как их вызывать по отдельности?


Ну конечно вызывается та, которая стоит первая. Она вызывается даже если пользователь введёт число, независимо от того, нужно ли его сейчас вводить.

А решение простое - конечный автомат (он же машина состояний). State в aiogram
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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