@acinaki

Aiogram, как сделать чтобы сообщение от бота не дублировалось в цикле, а ждало введенных данных?

@disp.message_handler()
async def cartaker(message: types.Message):
    if message.text == '080':
        car = '080'
    elif message.text == 507 or message.text == '507':
        car = '507'
    elif message.text == 197 or message.text == '197':
        car = '197'
    await bot.send_message(chat_id = message.from_user.id, text = 'Сколько раз вы заправлялись: ')
    await UserState.toplivocount.set()




@disp.message_handler(state=UserState.toplivocount)
async def get_toplivoraz(message: types.Message, state: FSMContext):
    await state.update_data(toplivoraz=message.text)
    data = await state.get_data()
    #await message.answer(f"Вы заправились: {data['toplivoraz']}")
    await state.finish()
    for i in range(int(data['toplivoraz'])):
        await bot.send_message(chat_id = message.from_user.id, text = 'Введите сумму заправки: ')
        await UserState.sumtoplivo.set()



@disp.message_handler(state=UserState.sumtoplivo)
async def get_toplivosumma(message: types.Message, state: FSMContext):
    await state.update_data(toplivosumma=message.text)
    data = await state.get_data()
    await state.finish()


Создал вопрос "Сколько раз вы заправлялись: " Дальше хочу создать цикл, чтобы по введеному кол-ву, бот запрашивал сумму каждого раза, когда машина заправлялась:

for i in range(int(data['toplivoraz'])):
    await bot.send_message(chat_id = message.from_user.id, text = 'Введите сумму заправки: ')
    await UserState.sumtoplivo.set()


async def get_toplivosumma(message: types.Message, state: FSMContext):
    await state.update_data(toplivosumma=message.text)
    data = await state.get_data()
    await state.finish()


Но когда ввожу сколько раз машина заправилась, например 2, выдает сразу 2 раза: Введите сумму заправки.
63e5553bc4d6c661032578.png

Помогите пожалуйста разобраться.. Строго не судите я новичок
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@shadrin_ss
Junior
Начнем с того что подход не верный, вы запрашиваете информацию но даже ее не сохраняете
Вам нужно изменить логику, лучше всего будет суммы хранить в списке и ориентироваться на кол-во заправок, и потом выводить sum(toplivosumma)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы