It is useful to know if clouds are urinating near you.
This commit is contained in:
parent
e12e67f405
commit
4372dac2c0
1 changed files with 54 additions and 0 deletions
54
happybot/weather.sh
Normal file
54
happybot/weather.sh
Normal 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;
|
Loading…
Reference in a new issue