It is useful to know if clouds are urinating near you.

This commit is contained in:
zgrep 2020-11-03 00:15:44 +00:00
parent e12e67f405
commit 4372dac2c0
1 changed files with 54 additions and 0 deletions

54
happybot/weather.sh Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env ash
. /home/zgrep/offtopiabday/happybot/common.sh
APIKEY="haha nope"
irc | while read -r n m; do
if hreg '^happybot[:,] (?:weather|temp|temperature) (.*)$' "$m"; then
place="$(m 1)"
elif hreg '^#(?:temp|temperature|weather) (.*)$' "$m"; then
place="$(m 1)"
else
continue;
fi
plason="$(curl -s -g -G --data-urlencode "q=$place" --data-urlencode 'format=json' 'https://nominatim.openstreetmap.org/search')"
if [ "x$plason" == "x[]" ]; then
answer="Could not find location: $place"
else
lat="$(var "$plason" | jq -r '.[0].lat')"
lon="$(var "$plason" | jq -r '.[0].lon')"
data="$(curl -s -g -G --data-urlencode "appid=$APIKEY" --data-urlencode "lat=$lat" --data-urlencode "lon=$lon" --data-urlencode "units=metric" 'https://api.openweathermap.org/data/2.5/weather')"
if [ "x$data" == "x" ]; then
answer="Error: Something is broken. Maybe it's me."
else
if [ "$(var "$data" | jq -r '.cod == 200')" == "true" ]; then
where="$(curl -s -g -G --data-urlencode "lat=$(var "$data" | jq -r '.coord.lat')" --data-urlencode "lon=$(var "$data" | jq -r '.coord.lon')" --data-urlencode "format=json" --data-urlencode "zoom=10" 'https://nominatim.openstreetmap.org/reverse' | jq -r '.display_name')"
answer="$where: $(var "$data" | jq -r '(.main.temp|tostring) + "°C (feels like " + (.main.feels_like|tostring) + "°C), " + (.weather|map(.description)|join(", ")) + ". " + (.main.humidity|tostring) + "% humidity."')"
if [ "$(var "$data" | jq -r '.wind != null')" == "true" ]; then
gusts=""
if [ "$(var "$data" | jq -r '.wind.gust != null')" == "true" ]; then
gusts=" ($(var "$data" | jq -r '.wind.gust')m/s gusts)"
fi
dir="$(var "r=(($(var "$data" | jq -r '.wind.deg')+11.25)%360)/22.5"';if(r==0)"N"else if(r==1)"NNE"else if(r==2)"NE"else if(r==3)"ENE"else if(r==4)"E"else if(r==5)"ESE"else if(r==6)"SE"else if(r==7)"SSE"else if(r==8)"S"else if(r==9)"SSW"else if(r==10)"SW"else if(r==11)"WSW"else if(r==12)"W"else if(r==13)"WNW"else if(r==14)"NW"else if(r==15)"NW"else"x"' | bc)"
if [ "$dir" == "x" ]; then
dir="wind"
else
arr="$(var "r=(($(var "$data" | jq -r '.wind.deg')+22.5+180)%360)/45"';if(r==0)"↑"else if(r==1)"↗"else if(r==2)"→"else if(r==3)"↘"else if(r==4)"↓"else if(r==5)"↙"else if(r==6)"←"else if(r==7)"↖"else"x"' | bc)"
dir="$dir wind $arr"
fi
answer="$answer $(var "$data" | jq -r '.wind.speed')m/s${gusts} ${dir}."
fi
if [ "$(var "$data" | jq -r '.rain != null')" == "true" ]; then
answer="$answer $(var "$data" | jq -r '.rain["1h"]')mm rain."
fi
if [ "$(var "$data" | jq -r '.snow != null')" == "true" ]; then
answer="$answer $(var "$data" | jq -r '.snow["1h"]')mm snow."
fi
else
answer="Error: $(var "$data" | jq -r '.message')."
fi
fi
fi
var "$answer" | zwsp | say;
done;