@Doplis01

Не пересылает сообщения что делать?

Вот мой кусок кода, и он не работает после надписи "Напишите отзыв и отправьте скриншот с результатами"

@dp.message_handler(text="Оставить отзыв✨", state=feedback.request)
async def review(message: types.Message, state: FSMContext):
    back = ["К меню"]
    await message.answer("Напишите отзыв и отправьте скриншот с результатами", reply_markup=kb.GoBack)

    if message.text == back:
        await state.finish()
    else:
        await feedback.next()

@dp.message_handler(state=feedback.forward)
async def review_forward(message: types.Message, state: FSMContext):
    username = message.from_user.username
    firstname = message.from_user.first_name
    lastname = message.from_user.last_name
    id = message.from_user.id
    if message.chat.type == 'private':
        user_id = message.from_user.id
        if user_id != adm:
            info = f"Новое сообщение от {firstname} {lastname}, @{username}, [{id}]"
            if message.content_type == types.ContentType.PHOTO:
                await bot.forward_message(adm, message.chat.id, message.message_id)
                await bot.send_message(adm, info)
            else:
                await message.answer("Простите, вы отправили не то что мы просим")
    await state.finish()
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
SoreMix
@SoreMix
yellow
1. Вы сравниваете строку и список message.text == back
2. Функция review будет вызвана только если текст сообщения равен Оставить отзыв✨, поэтому проверка на текст К меню никогда не будет True

Ну и не хватает приложенного класса с описанием стейтов. И как не работает, управление вообще не переходит в другую функцию?

Если хотите обрабатывать кнопку назад, которая есть в нескольких функциях, можно воспользоваться куском из доки по aiogram:

# You can use state '*' if you need to handle all states
@dp.message_handler(Text(equals='К меню', ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
    """
    Allow user to cancel any action
    """
    current_state = await state.get_state()
    if current_state is None:
        return

    # Cancel state and inform user about it
    await state.finish()
    # And remove keyboard (just in case)
    await message.reply('Cancelled.', reply_markup=types.ReplyKeyboardRemove())


По итогу он будет отлавливать любой стейт, в котором есть текст к меню. Ну и там уже делаете финиш или что потребуется.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы