Здравствуйте, только обучаюсь в python, хочу написать бота в telegram

Рейтинг: -1Ответов: 1Опубликовано: 15.04.2023

Хочу написать погодного бота в telegram, чтоб можно было написать город, а он в нем показал температуру, мучаюсь уже всю ночь, и не могу понять что я не так делаю, может может кто нибудь помочь в написании данного кода) Суть в том что я запускаю код, а по итогу ничего не происходит, пробовал как то переписывать по другому, но все равно как то не получается.

from aiogram import Bot, types, Dispatcher, executor
import python_weather



bot = Bot(token="*token*")
dp = Dispatcher(bot)


@dp.message_handler(commands=["start"])
async def process_start_command(message):
    async with python_weather.Client(format=python_weather.IMPERIAL) as client:
        weather = await client.get(message.text)
    celsius = (weather.current.temperature - 32) * 5 / 9

    resp_msg = weather.location_name + "\n"
    resp_msg += f"Текущая температура: {celsius}\n"



    await message.answer(resp_msg)


if __name__ == '__main__':
   executor.start_polling(dp)

Ответы

▲ 0

Есть несколько проблем с данным кодом:

  1. Первая и, наверное, основная - у вас нет логирования. Чтобы понимать что идет не так, включите логирование, как в примере на aiogram.
  2. У вас только один обработчик сообщений process_start_command, который обрабатывает комманду /start. Больше он ни за чем не следит. Вам нужно создать второй обработчик, который будет следить за сообщениями пользователей и уже их обрабатывать.
  3. У объекта weather нет свойства location_name (если бы вы подключили логгер, увидели бы это в логе ошибок). Если нужны данные о городе и/или стране, можно использовать nearest_area. В нем есть информация о ближайшем к прогнозу городе и его стране.
  4. Вам не обязательно заморачиваться с конвертацией в цельсии. Можно клиенту указать, что вы хотите данные получать в метрической системе: format=python_weather.METRIC

Вот как-то, приблизительно так (большая часть кода - пример quick start из доки aiogram):

import logging
import python_weather

from aiogram import Bot, Dispatcher, executor, types

API_TOKEN = 'TOKEN'

# Configure logging
logging.basicConfig(level=logging.INFO)

# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
    await message.reply(f"Напиши город и узнаешь погоду!")


@dp.message_handler()
async def echo(message: types.Message):
    async with python_weather.Client(format=python_weather.METRIC) as client:
        weather = await client.get(message.text)

    # Инфа о стране и городе
    resp_msg = f"{weather.nearest_area.country} {weather.nearest_area.name} \n"
    # Температура
    resp_msg += f"Текущая температура: {weather.current.temperature}\n"

    await message.answer(resp_msg)


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

введите сюда описание изображения