import pyowm from pyowm import timeutils, exceptions from telegram import Message, Chat, Update, Bot from telegram.ext import run_async from tg_bot import dispatcher, updater, BAN_STICKER, API_WEATHER from tg_bot.modules.disable import DisableAbleCommandHandler @run_async def weather(bot, update, args): if len(args) == 0: update.effective_message.reply_text("Напишите место, чтобы узнать погоду. \nПример: /weather Чикаго") return location = " ".join(args) if location.lower() == bot.first_name.lower(): update.effective_message.reply_text("Буду следить и за счастливыми, и за печальными моментами!") bot.send_sticker(update.effective_chat.id, BAN_STICKER) return try: owm = pyowm.OWM(API_WEATHER, language='ru') observation = owm.weather_at_place(location) getloc = observation.get_location() thelocation = getloc.get_name() if thelocation == None: thelocation = "Неизвестно" theweather = observation.get_weather() temperature = theweather.get_temperature(unit='celsius').get('temp') mini = theweather.get_temperature(unit='celsius').get('temp_min') maxi = theweather.get_temperature(unit='celsius').get('temp_max') wind = theweather.get_wind().get('speed') humidity = theweather.get_humidity() if temperature == None: temperature = "Неизвестно" if mini == None: mini = "Неизвестно" if maxi == None: maxi = "Неизвестно" if humidity == None: humidity = "Неизвестно" if wind == None: wind = "Неизвестно" status = theweather._detailed_status icon = theweather.get_weather_code() if icon < 232: icon = "⛈️ " elif icon < 321: icon = "?️ " elif icon < 504: icon = "?️ " elif icon < 531: icon = "⛈️ " elif icon < 622: icon = "?️ " elif icon < 781: icon = "?️ " elif icon < 800: icon = "?️ " elif icon < 801: icon = "⛅️ " elif icon < 805: icon = "☁️ " update.message.reply_text("? Погода в городе {}, \n{}Сейчас {},\n? Около: {} °C, \n\ ? Минимальная: {} °C, \n? Максимальная: {} °C,\n\ ? Скорость ветра: {} м/с, \n? Влажность: {}%".format(thelocation, icon, status, temperature, mini, maxi, wind, humidity)) except pyowm.exceptions.api_response_error.NotFoundError: update.effective_message.reply_text("Извините, местоположение " + str(location) + " не найдено.") __help__ = """ - /weather <город>: Получить информацию о погоде в определенном месте """ __mod_name__ = "Погода" WEATHER_HANDLER = DisableAbleCommandHandler("weather", weather, pass_args=True) dispatcher.add_handler(WEATHER_HANDLER)