77 lines
2.0 KiB
Lua
77 lines
2.0 KiB
Lua
|
do
|
||
|
|
||
|
local BASE_URL = "http://api.openweathermap.org/data/2.5/weather"
|
||
|
|
||
|
local function get_weather(location)
|
||
|
print("Finde Wetter in ", location)
|
||
|
local location = string.gsub(location," ","+")
|
||
|
local url = BASE_URL
|
||
|
local apikey = cred_data.owm_apikey
|
||
|
local url = url..'?q='..location
|
||
|
local url = url..'&lang=de&units=metric&APPID='..apikey
|
||
|
|
||
|
local b, c, h = http.request(url)
|
||
|
if c ~= 200 then return nil end
|
||
|
|
||
|
local weather = json:decode(b)
|
||
|
local city = weather.name
|
||
|
if weather.sys.country == 'none' then
|
||
|
country = ''
|
||
|
else
|
||
|
country = ' ('..weather.sys.country..')'
|
||
|
end
|
||
|
local temperature = round(weather.main.temp, 1)
|
||
|
local temp = 'Wetter in '..city..country..':\n'..temperature..'°C'
|
||
|
local conditions = ' | '..weather.weather[1].description
|
||
|
if weather.weather[1].main == 'Clear' then
|
||
|
conditions = conditions..' ☀'
|
||
|
elseif weather.weather[1].main == 'Clouds' then
|
||
|
conditions = conditions..' ☁☁'
|
||
|
elseif weather.weather[1].main == 'Rain' then
|
||
|
conditions = conditions..' ☔'
|
||
|
elseif weather.weather[1].main == 'Thunderstorm' then
|
||
|
conditions = conditions..' ☔☔☔☔'
|
||
|
elseif weather.weather[1].main == 'Snow' then
|
||
|
conditions = conditions..' ❄️'
|
||
|
elseif weather.weather[1].main == 'Fog' then
|
||
|
conditions = conditions..' 🌫'
|
||
|
else
|
||
|
conditions = conditions..''
|
||
|
end
|
||
|
return temp..conditions
|
||
|
end
|
||
|
|
||
|
local function run(msg, matches)
|
||
|
local user_id = msg.from.id
|
||
|
|
||
|
if matches[1] ~= '/wetter' then
|
||
|
city = matches[1]
|
||
|
else
|
||
|
local set_location = get_location(user_id)
|
||
|
if not set_location then
|
||
|
city = 'Berlin'
|
||
|
else
|
||
|
city = set_location
|
||
|
end
|
||
|
end
|
||
|
local text = get_weather(city)
|
||
|
if not text then
|
||
|
text = 'Konnte das Wetter von dieser Stadt nicht bekommen.'
|
||
|
end
|
||
|
return text
|
||
|
end
|
||
|
|
||
|
return {
|
||
|
description = "Wetter für deinen oder einen gewählten Ort",
|
||
|
usage = {
|
||
|
"/wetter: Wetter für deinen Wohnort (!location set [Ort])",
|
||
|
"/wetter (Stadt): Wetter für diese Stadt"
|
||
|
},
|
||
|
patterns = {
|
||
|
"^/wetter$",
|
||
|
"^/wetter (.*)$"
|
||
|
},
|
||
|
run = run
|
||
|
}
|
||
|
|
||
|
end
|