Как заставить следующий handler выполняться сразу, после того, как выполнился другой, AIOgram?
Хочу зациклить выполнения определённого хэндлера до того момента, пока бы пользователь, посредством нажатия кнопки, сам бы не вышел из этого цикла.
Вот код первого хэндлера:
@dp.message_handler(state=Testing.easy_difficult_selected)
@dp.message_handler(lambda msg: msg == 'легкий')
async def testing_easy_difficult(message: types.Message, state: FSMContext):
import random
data = await state.get_data()
i = 0
answers = {}
kbAnswersChoose = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True, row_width=2)
category = data.get("category")
words = await db.async_testing_easy_difficult()
for word in words:
answers[i] = word[0][1]
i += 1
for button_name, word in answers.items():
button_name = KeyboardButton(word)
kbAnswersChoose.insert(button_name)
btnGoBack = KeyboardButton("Вернуться в главное меню")
kbAnswersChoose.insert(btnGoBack)
word_and_translate = random.choice(words[random.randint(0, 4)])
word_originally = word_and_translate[0]
word_translate = word_and_translate[1]
await state.update_data(word_translate=word_translate)
await message.answer(f"Дано слово: {word_originally}\n\n Каков его перевод?", reply_markup=kbAnswersChoose)
await Testing.waiting_for_choose_right_answer.set()
Вот код хэндлера, к которому переходит управление, после того, как пользователь отправил слово:
@dp.message_handler(state=Testing.waiting_for_choose_right_answer)
async def testing_answer(message: types.Message, state: FSMContext):
await state.update_data(answer=message.text)
data = await state.get_data()
if data.get('answer') == data.get('word_translate'):
await message.answer(f"Верно! Это слово переводится, как {data.get('answer')}!")
else:
await message.answer(f"К сожалению, ты ошибься. Это слово переводится, как {data.get('word_translate')}. Будь внимательнее в следующий раз!")
await Testing.easy_difficult_selected.set()
Вот мне нужно, чтобы выполнения последнего хэндлера сразу же начал выполняться предыдущий; без отправки сообщения пользователем. Сейчас он начинает работать только в том случае, если пользователь ввёл любое сообщение.
Ответы (1 шт):
Автор решения: Max Skuybida
→ Ссылка
@dp.message_handler()
async def first_handler(message: types.Message, state: FSMContext):
# do something
@dp.message_handler()
async def second_handler(message: types.Message, state: FSMContext):
# do something
await first_handler(message, state)
Вы можете вызывать хандлер, как обычную функцию