Ваш Telegram-бот имеет некоторые проблемы с синтаксисом и логикой, которые могут приводить к тому, что он не обрабатывает сообщения как ожидается. Я укажу на них и предложу исправления.
1. **Некорректный синтаксис**: Ваша строка `<i> <b>await message.reply(...)</i></b>` содержит HTML-коды вместо правильного синтаксиса Python. Правильный вариант должен выглядеть так:
```python
await message.reply("Какой класс точности счетчика? Пока я умею считать только счетчики с классом точности 0.5 и 1.")
```
2. **Проблема с обработчиками**: У вас есть два обработчика сообщений:
- Один не имеет условий и будет вызываться на все текстовые сообщения.
- Второй использует ограничение по количеству значений, хранящихся в списке `values`. Если `values` меньше 5, обработчик будет работать. Возможно, вам нужно оптимизировать структуру или добавить более строгие условия для обработки сообщений, чтобы избежать конфликтов.
3. **Глобальная переменная**: Убедитесь, что `values` объявлена на глобальном уровне, если вы хотите использовать ее в разных функциях.
Чтобы ваш бот работал, вот предложенная структурированная версия вашего кода с исправлениями:
```python
import logging
from aiogram import Bot, Dispatcher, executor, types
import markups as nav
TOKEN = '7045632215:AAEpLBAa8uKfпWuJkTITq3CNlltErHRsXloE'
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
# Список для хранения значений
values = []
@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(lambda message: message.text == 'Погрешность счетчика')
async def request_accuracy_class(message: types.Message):
await message.reply("Какой класс точности счетчика? Пока я умею считать только счетчики с классом точности 0.5 и 1.")
@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]
# Здесь должна быть логика для вычисления погрешности
# пример: precision = ...
await message.reply("Результаты расчета: ...")
except ValueError:
await message.reply("Пожалуйста, введите числовое значение.")
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
executor.start_polling(dp, skip_updates=True)
```
### Общие рекомендации:
- Убедитесь, что вы обрабатываете все возможные исключения (например, если пользователь введет некорректное значение).
- Логируйте ошибки, чтобы легче было отследить проблемы в работе бота.
- Следите за тем, чтобы настройки вашего `markups` были правильно импортированы и настроены.