Обработка команд бота , который находится в состоянии
У бота есть функция - отправить отзыв на эл.почту.
При нажатии на команду , бот просит представиться и переходит в следующее состояние.
Можно ли сделать так, что бы когда бот заходил в состояние ожидания ввода пользователя, если пользователь вместо отзыва нажмет на любую другую команду этого бота - она выполнялась?
Сейчас если так сделать бот начнет дальше прыгать по состояниям
Фрагмент кода:
async def client_review_name(message: types.Message,state: FSMContext):
"""
Обработчик состояния ожидания ввода имени пользователя
:param message
:return:
"""
await bot.send_sticker(message.from_id,
sticker=f'CAACAgIAAxkBAAEHojNj4xivQ73UweVOot3yCtFqrnrpwAAC4CcAAiI40Erk1IekTR7UnS4E')
await bot.send_message(message.from_id,text=' Как я могу к вам обращаться?')
await Reviews.first()
@dp.message_handler(state=Reviews.name_for_thanks)
async def name_for_thanks(message: types.Message, state: FSMContext):
"""
Обработчик состояния ожидания ввода текста благодарности
:param message
:return:
"""
await state.update_data(username=message.text)
data = await state.get_data()
await message.answer(f"Приятно познакомиться, {data['username']} , напишите ваш отзыв, пожалуйста")
await Reviews.next()
@dp.message_handler(state=Reviews.waiting_for_thanks)
async def waiting_state_for_client_thanks(message:types.Message,state: FSMContext):
"""
Обработчик состояния отправки благодарности на эл.почту больницы
:param message
:return:
"""
await state.update_data(thanks=message.text)
msg = MIMEMultipart()
data = await state.get_data()
msg['From'] = client_kb.email_login
msg['To'] = client_kb.email_login
msg['subject'] = 'Благодарность'
msg.attach(MIMEText(f"Благодарность от:{data['username']}\n"
f"Текст сообщения:\n{data['thanks']}", 'plain'))
server = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
server.ehlo(client_kb.email_login)
server.login(client_kb.email_login, client_kb.email_password)
server.auth_plain()
send_res = server.send_message(msg)
server.quit()
if message.text != ' ':
await state.finish()
await message.answer("Спасибо , ваш отзыв отправлен !")
await bot.send_sticker(message.from_id,sticker='CAACAgIAAxkBAAEHojNj4xivQ73UweVOot3yCtFqrnrpwAAC4CcAAiI40Erk1IekTR7UnS4E')
else:
await message.answer('Не похоже на отзыв')
await state.finish()