diff --git a/happybot/weather.sh b/happybot/weather.sh new file mode 100644 index 0000000..7fc40f5 --- /dev/null +++ b/happybot/weather.sh @@ -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; \ No newline at end of file