@Shocoman

Почему не работает telegram бот?

Подскажите, пожалуйста, почему бот не идет дальше выделенной строки?

Код бота
import logging
from aiogram import Bot, Dispatcher, executor, types
import markups as nav

TOKEN = 'TOKEN'

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)



@dp.message_handler(commands=['start'])
async def command_start(message: types.Message):
    await bot.send_message(message.from_user.id, 'Привет, {0.first_name}! Что будем считать?'.format(message.from_user), reply_markup=nav.mainMenu)

@dp.message_handler()
async def bot_message(message: types.Message):
    # await bot.send_message(message.from_user.id, message.text)
    if message.text == 'Погрешность счетчика':
       <i> <b>await message.reply("Какой класс точности счетчика? Пока я умею считать только счетчики с классом точности 0.5 и 1.")</i></b>
# Список для хранения значений
values = []
@dp.message_handler(lambda message: len(values) < 5)
async def process_input(message: types.Message):
    try:
        value = float(message.text)
        values.append(value)
        if len(values) == 1:
            await message.reply("Какое фактическое напряжение? (В).")
        elif len(values) == 2:
            await message.reply("Какая средняя сила тока? (А)")
        elif len(values) == 3:
            await message.reply("Какой коэффициент мощности? (cos)")
        elif len(values) == 4:
            await message.reply("Какая температура воздуха?")
        elif len(values) == 5:
            clas = values[0]
            voltage = values[1]
            amperage = values[2]
            cos = values[3]
            temp = values[4]

            # Вычисляем погрешность
            m = voltage * amperage * cos / 230 / 5
            if m < 0.2:
                otnospogresh = clas * (0.9 + 0.02 / m)
                tempogresh = 0.05 * otnospogresh * (temp - 20)
                pogresh = 1.1 * (otnospogresh ** 2 + tempogresh ** 2) ** 0.5
                await message.reply(f"Вы ввели:\n Класс точности: {clas} \nНапряжение: {voltage} В\nСила тока: {amperage} А\nКоэффициент мощности: {cos}\nТемпература: {temp} \n\nДопустимая погрешность счетчика: +-{pogresh} ")
            else:
                otnospogresh = clas
                tempogresh = 0.05 * otnospogresh * (temp - 20)
                pogresh = round((1.1 * (otnospogresh ** 2 + tempogresh ** 2) ** 0.5), 3)
                await message.reply(f"Вы ввели:\n Класс точности: {clas} \nНапряжение: {voltage} В\nСила тока: {amperage} А\nКоэффициент мощности: {cos}\nТемпература: {temp} \n\nДопустимая погрешность счетчика: +-{pogresh} ")

                # Очищаем список для следующего ввода
                values.clear()
    except ValueError:
        await message.reply("Пожалуйста, введите корректное число.")
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
@dp.message_handler()
async def bot_message(message: types.Message):
    ...

# Список для хранения значений
values = []

@dp.message_handler(lambda message: len(values) < 5)
async def process_input(message: types.Message):
    ...


У тебя первый же обработчик заявляет, что готов обрабатывать ВСЕ входящие сообщения. Соответственно, бот дальше и не ищет ничего. Зачем, если первый же обработчик на всё согласен?
Освой нормальный конечный автомат (finite state machine, FSM), что ли? Есть же официальная документация, официальные примеры, только найди и прочитай...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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