Spaces:
Runtime error
Runtime error
from pyrogram.types import Message | |
from Hellbot.core import ENV | |
from Hellbot.functions.driver import Climate | |
from Hellbot.functions.formatter import subscript, superscript | |
from Hellbot.functions.templates import airpollution_templates, climate_templates | |
from . import HelpMenu, db, hellbot, on_message | |
async def climate(_, message: Message): | |
if len(message.command) < 2: | |
city = "Delhi" | |
else: | |
city = await hellbot.input(message) | |
hell = await hellbot.edit(message, f"**Fetching climate data for `{city}`**") | |
apiKey = await db.get_env(ENV.climate_api) | |
if not apiKey: | |
return await hellbot.delete( | |
hell, f"**Climate API not found!** Setup `{ENV.climate_api}` first." | |
) | |
data = await Climate.fetchWeather(city, apiKey) | |
if not data: | |
return await hellbot.delete(hell, f"**Climate data not found for `{city}`**") | |
city_name = data["name"] | |
country = Climate.getCountry(data["sys"]["country"]) | |
weather = data["weather"][0]["main"] | |
timezone = Climate.getCountryTimezone(data["sys"]["country"]) | |
sunrise = await Climate.getTime(data["sys"]["sunrise"]) | |
sunset = await Climate.getTime(data["sys"]["sunset"]) | |
wind = Climate.getWindData(data["wind"]["speed"], data["wind"]["deg"]) | |
temperature = data["main"]["temp"] | |
feels_like = data["main"]["feels_like"] | |
temp_min = data["main"]["temp_min"] | |
temp_max = data["main"]["temp_max"] | |
pressure = data["main"]["pressure"] | |
humidity = data["main"]["humidity"] | |
visibility = data["visibility"] | |
clouds = data["clouds"]["all"] | |
await hell.edit( | |
await climate_templates( | |
city_name=city_name, | |
country=country, | |
weather=weather, | |
timezone=timezone, | |
sunrise=sunrise, | |
sunset=sunset, | |
wind=wind, | |
temperature=temperature, | |
feels_like=feels_like, | |
temp_min=temp_min, | |
temp_max=temp_max, | |
pressure=pressure, | |
humidity=humidity, | |
visibility=visibility, | |
clouds=clouds, | |
), | |
disable_web_page_preview=True, | |
) | |
async def airpollution(_, message: Message): | |
if len(message.command) < 2: | |
city = "Delhi" | |
else: | |
city = await hellbot.input(message) | |
hell = await hellbot.edit(message, f"**Fetching air pollution data for `{city}`**") | |
apiKey = await db.get_env(ENV.climate_api) | |
if not apiKey: | |
return await hellbot.delete( | |
hell, f"**Climate API not found!** Setup `{ENV.climate_api}` first." | |
) | |
data = await Climate.fetchAirPollution(city, apiKey) | |
if not data: | |
return await hellbot.delete( | |
hell, f"**Air pollution data not found for `{city}`**" | |
) | |
data = data["list"][0] | |
ugm3 = superscript("µg/m³") | |
sub2_5 = subscript("2.5") | |
sub10 = subscript("10") | |
city_name = city.upper() | |
aqi_index = data["main"]["aqi"] | |
aqi_cond = Climate.AQI_DICT[aqi_index] | |
aqi = f"{aqi_index} ({aqi_cond})" | |
co = f"{data['components']['co']} {ugm3}" | |
no = f"{data['components']['no']} {ugm3}" | |
no2 = f"{data['components']['no2']} {ugm3}" | |
o3 = f"{data['components']['o3']} {ugm3}" | |
so2 = f"{data['components']['so2']} {ugm3}" | |
nh3 = f"{data['components']['nh3']} {ugm3}" | |
pm2_5 = data["components"]["pm2_5"] | |
pm10 = data["components"]["pm10"] | |
await hell.edit( | |
await airpollution_templates( | |
city_name=city_name, | |
aqi=aqi, | |
co=co, | |
no=no, | |
no2=no2, | |
o3=o3, | |
so2=so2, | |
nh3=nh3, | |
pm2_5=pm2_5, | |
pm10=pm10, | |
sub2_5=sub2_5, | |
sub10=sub10, | |
), | |
disable_web_page_preview=True, | |
) | |
HelpMenu("climate").add( | |
"climate", | |
"<city name>", | |
"Get climate data of a city.", | |
"climate Delhi", | |
"City name is optional. Bydefault Delhi's climate data will be fetched.", | |
).add( | |
"airpollution", | |
"<city name>", | |
"Get air pollution data of a city.", | |
"airpollution Delhi", | |
"City name is optional. Bydefault Delhi's air pollution data will be fetched.", | |
).info( | |
"Get the API Key from [here](https://openweathermap.org/price)" | |
).done() | |