Задать вопрос
NickITDir
@NickITDir
Начинающий разработчик

Почему не переходит в обработчик фото?

Пишу бота на python с библиотекой aiogram 3.14
почему то после запроса фото не переходит в обработчик пересылки фото.
хотя в состояние waiting_for_photo переходит.
В чем может быть проблема?
@router.message(TaskStates.waiting_for_photo)
async def get_photo(message: Message, state: FSMContext):
    print("Обработчик получен для состояния ожидания фото")
    data = await state.get_data()
    task_id = data.get("task_id")
    if not task_id:
        await message.answer("Не удалось определить задачу. Попробуйте снова.")
        return

    # Логика обработки фото
    photos = message.photo
    if not photos:
        await message.answer("Пожалуйста, отправьте фото.")
        return

    print(f"Количество фото: {len(photos)}")
    admins = await sync_to_async(list)(CustomUser.objects.filter(status='admin'))
    
    for photo in photos:
        file_id = photo.file_id
        for admin in admins:
            await bot.send_photo(admin.telegram_id, file_id)

    await state.finish()
    await message.answer("Фото успешно отправлено администраторам.")



@dp.callback_query(lambda callback_query: callback_query.data.startswith("execute_task:"))
async def handle_execute_task(callback_query: CallbackQuery, state: FSMContext):
    task_id = int(callback_query.data.split(":")[1])

    try:
        task = await sync_to_async(Task.objects.get)(id=task_id)

        if task.status == 'resolved':
            await callback_query.answer("Эта задача уже отмечена как выполненная.", show_alert=True)
            return

        if task.requires_photo_confirmation:
            # Печать перед установкой состояния
            print(f"Текущее состояние: {await state.get_state()}")
            
            await state.update_data(task_id=task_id)
            await state.set_state(TaskStates.waiting_for_photo)

            await bot.send_message(callback_query.from_user.id, "Пожалуйста, отправьте фото отчет для выполнения задачи.")
            
            # Печать после установки состояния
            print(f"Текущее состояние после установки: {await state.get_state()}")
            return

        await callback_query.answer(f"Задача '{task.title}' передана администратору на проверку.", show_alert=True)
        await notify_admins_about_task(task)

    except Task.DoesNotExist:
        await callback_query.answer("Задача не найдена.", show_alert=True)
  • Вопрос задан
  • 42 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
NickITDir
@NickITDir Автор вопроса
Начинающий разработчик
Разобрался.
Надо было зарегистрироваться связь состояния и функции
router.message.register(get_photo, TaskStates.waiting_for_photo)


И подключить роутер к диспетчеру
dp.include_router(router)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Москва
от 60 000 до 120 000 ₽
Wanted. Санкт-Петербург
До 200 000 ₽
10 дек. 2024, в 11:56
20000 руб./за проект
10 дек. 2024, в 11:43
20000 руб./за проект
10 дек. 2024, в 11:36
120000 руб./за проект