Как я понял, когда бот начинает работать, он обрабатывает зарегистрированные в нем хэндлеры, и ваш хэндлер lake перехватывает всё, кроме явно start и help, поэтому дальше него и не проходит. Я глубоко не вникал, возможно этот момент я неправильно понял.
Но, в принципе, можно обойтись и этим одним хндлером, просто правильно обрабатывать то, что в него приходит. А приходить в него должно либо выбор кнопки, либо число.
При выборе кнопки фиксируем номер кнопки и ждем число. Если пришло число - вычисляем, возвращаем, сбрасываем номер кнопки и всё сначала.
lake_number = 0
@dp.message_handler()
async def lake(message: types.Message):
global lake_number
if message.text == 'Бассейн №1':
await bot.send_message(message.from_user.id, 'Введи расстояние до воды №1.')
lake_number = 1
if message.text == 'Бассейн №2':
await bot.send_message(message.from_user.id, 'Введи расстояние до воды №2.')
lake_number = 2
if bool(lake_number) and message.text.isdigit():
b = int(message.text)
if lake_number == 1:
h = 8 - b
v = (h / 3)
level = v / 16000 * 100 # тут в формуле где-то ошибка, поэтому я ее просто убрал
await bot.send_message(message.from_user.id,
str("Количество:" + str(v) + "м3. Глубина:" + str(h) + "м. Наполнение: " + str(
level) + "%"))
if lake_number == 2:
h2 = 5 - ((b - 1) * float(0.7))
s2 = (90 - (b * 0.52)) * (100 - (b * 0.52)) / 2
n = sqrt(2500 * s2)
s1 = 1
g = s1 + n + s2
v2 = (h2 / 3) * g
level2 = v2 / 17000 * 100
await bot.send_message(message.from_user.id,
str("Количество:" + str(v2) + "м3. Глубина:" + str(h2) +
"м. Наполнение: " + str(level2) + "%"))
lake_number = 0
await bot.send_message(message.from_user.id, "Попробуй еще...")