PagerMaid_Plugins_Pyro/weather/main.py
2023-07-01 20:18:58 +08:00

94 lines
3.0 KiB
Python

import datetime
from pyrogram import Client
from pagermaid.listener import listener
from pagermaid.utils import Message, client
icons = {
"01d": "🌞",
"01n": "🌚",
"02d": "⛅️",
"02n": "⛅️",
"03d": "☁️",
"03n": "☁️",
"04d": "☁️",
"04n": "☁️",
"09d": "🌧",
"09n": "🌧",
"10d": "🌦",
"10n": "🌦",
"11d": "🌩",
"11n": "🌩",
"13d": "🌨",
"13n": "🌨",
"50d": "🌫",
"50n": "🌫",
}
def timestamp_to_time(timestamp, timeZoneShift):
timeArray = datetime.datetime.utcfromtimestamp(timestamp) + datetime.timedelta(
seconds=timeZoneShift
)
return timeArray.strftime("%H:%M")
def calcWindDirection(windDirection):
dirs = [
"N",
"NNE",
"NE",
"ENE",
"E",
"ESE",
"SE",
"SSE",
"S",
"SSW",
"SW",
"WSW",
"W",
"WNW",
"NW",
"NNW",
]
ix = round(windDirection / (360.0 / len(dirs)))
return dirs[ix % len(dirs)]
@listener(command="weather", description="查询天气", parameters="[城市]")
async def weather(_: Client, message: Message):
if not message.arguments:
return await message.edit("出错了呜呜呜 ~ 无效的参数。")
try:
req = await client.get(
"http://api.openweathermap.org/data/2.5/weather?appid=973e8a21e358ee9d30b47528b43a8746&units=metric&lang"
"=zh_cn&q=" + message.arguments
)
if req.status_code == 200:
data = req.json()
cityName = f'{data["name"]}, {data["sys"]["country"]}'
timeZoneShift = data["timezone"]
temp_Max = round(data["main"]["temp_max"], 2)
temp_Min = round(data["main"]["temp_min"], 2)
pressure = data["main"]["pressure"]
humidity = data["main"]["humidity"]
windSpeed = data["wind"]["speed"]
windDirection = calcWindDirection(data["wind"]["deg"])
sunriseTimeunix = data["sys"]["sunrise"]
sunriseTime = timestamp_to_time(sunriseTimeunix, timeZoneShift)
sunsetTimeunix = data["sys"]["sunset"]
sunsetTime = timestamp_to_time(sunsetTimeunix, timeZoneShift)
fellsTemp = data["main"]["feels_like"]
tempInC = round(data["main"]["temp"], 2)
tempInF = round((1.8 * tempInC) + 32, 2)
icon = data["weather"][0]["icon"]
desc = data["weather"][0]["description"]
res = f"{cityName} {icons[icon]}{desc} 💨{windDirection} {windSpeed}m/s\n大气🌡 {tempInC}℃ ({tempInF}℉) 💦 {humidity}% \n体感🌡 {fellsTemp}\n气压 {pressure}hpa\n🌅{sunriseTime} 🌇{sunsetTime} "
await message.edit(res)
if req.status_code == 404:
await message.edit("出错了呜呜呜 ~ 无效的城市名,请使用拼音输入 ~ ")
return
except Exception:
await message.edit("出错了呜呜呜 ~ 无法访问到 openweathermap.org 。")