В вашем коде вы столкнулись с ошибкой при попытке отправить пользователю температуру с помощью `await message.answer(weather.temperature)`. Это происходит, потому что `weather.temperature` — это не просто число, а объект, содержащий температурную информацию. Вам нужно получить конкретное значение температуры и отправить его пользователю в формате строки.
Давайте исправим ваш код. Также важно добавить обработку команд и более корректно обрабатывать ошибки, чтобы избежать проблем в случае неверного ввода.
Вот исправленный вариант вашего кода:
```python
import asyncio
import logging
import python_weather
from config import TOKEN2
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
# Установка уровня логирования
logging.basicConfig(level=logging.INFO)
bot = Bot(TOKEN2)
dp = Dispatcher()
@dp.message(CommandStart())
async def start_command(message: Message):
await message.answer("Привет! Напишите название города, чтобы получить текущую температуру.")
@dp.message()
async def get_weather(message: Message):
async with python_weather.Client(unit=python_weather.METRIC) as client:
try:
# Получаем прогноз погоды для указанного города
weather = await client.get(message.text)
# Если погода получена, выводим температуру
if weather.current:
temperature = weather.current.temperature
await message.answer(f"Температура в {message.text}: {temperature}°C")
else:
await message.answer("Не удалось получить данные о погоде. Пожалуйста, проверьте название города.")
except Exception as e:
logging.error(f"Ошибка при получении погоды: {e}")
await message.answer("Произошла ошибка. Пожалуйста, попробуйте еще раз.")
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
```
### Объяснение внесённых изменений:
1. **Обработка стартовой команды:** Добавлен обработчик для команды `/start`, который приветствует пользователя и объясняет, как получить погоду.
2. **Проверка на наличие данных о погоде:** Используется условие `if weather.current`, чтобы убедиться, что мы получили актуальные данные о погоде. Если данных нет, бот отправит соответствующее сообщение.
3. **Форматирование текста сообщения:** Теперь сообщение отправляется в более удобочитаемом формате, включая название города и значение температуры.
4. **Логирование ошибок:** Добавлено логирование ошибок для лучшей диагностики проблем, которые могут возникнуть при получении данных.
Этот код должен исправно работать и корректно отправлять пользователю текущую температуру по запросу.