Есть телеграмм бот , использую aiogram и FSM, задача бота скачать n количество присылаемых пользователем фото и перейти на следующий state.
На данный момент стоит счетчик и при достижении числа n, данные со state и фото сохраняются и осуществляется переход на новый state, НО если число отправленных пользователем фото больше n, то на следующий state прилетают и остальные фото ( которые не нужны). Как с этим бороться?
HardX, ну тогда как вариант полагаться на значение mediagroup в message. Это если пользователь отправляет фотографии разом и вместо n отправил n+m фотографий.
Либо после каждого шага с приемом фотографий добавлять inline кнопку и ожидать сначала только ее нажатие.
- пришлите 5 фотографий чего-то
- присылает 5 фотографий
- Далее вам необходимо будет прислать 3 фотографии чего-то еще, кнопка ОК.
Если пользователь жмет ОК, значит он точно понял что от него хотят и шлет фотографии. Если он шлет фотографии не нажав на кнопку, просто удаляйте их. Спорное решение, но вроде рабочее
Михаил Кростелев, с кнопкой не вариант, замедлит работу пользователя, фото шлются разом, перед отправкой пользователю и так бот пишет сколько шт. отправить, но человеческий фактор...
Попробовал при переходе на следующий state, счётчик не обнулять , а n-m (где m число реально отправленных фото), вроде работает корректно, но теперь нужно думать как подчищать state.data
В state.data ничего писать нет желания, т.к в базу должен улетать state.data конкретного вида, и при изменении в нем, записи не произойдет. Много переписывать придется
В итоге использовал state.curent как переменную, и если state сменился,
Только тогда счётчик фото обнуляю. Так все работает, и загружается именно первые n фотографий, и в state data добавляются photo file_id первых n фотографий
В итоге использовал state.curent как переменную, и если state сменился,
Только тогда счётчик фото обнуляю. Так все работает, и загружается именно первые n фотографий, и в state data добавляются photo file_id первых n фотографий