Weer: BBQ cijfer en (non)verbose

This commit is contained in:
JP
2019-07-27 14:00:57 +02:00
parent 1a28e0da79
commit d7c967f028
+69 -22
View File
@@ -447,7 +447,7 @@ class Shitpost(object):
@commands.command(pass_context=True)
@asyncio.coroutine
def weer(self, ctx, location="Leiden"):
def weer(self, ctx, location="Leiden", verbose="False"):
"""Vertelt je het weer.
Omdat je te lui bent om naar buiten te kijken.
Oant Moarn!
@@ -469,6 +469,10 @@ class Shitpost(object):
}
if(location == ""):
location = "Leiden"
if(str(verbose).lower() == "false"):
v = False
else:
v = True
url = "http://weerlive.nl/api/json-10min.php?locatie=" + location
response = requests.get(url)
@@ -478,34 +482,46 @@ class Shitpost(object):
wData = json.loads(response.content.decode('utf-8'))
message = ""
if (wData["liveweer"][0]["alarm"] == "1"):
message += "\n\n" + "HOLY SHIT :scream: ER IS EEN WEERALARM!!!1!: "
message += wData["liveweer"][0]["alarmtxt"] + ". Hide yo kids, hide yo wife! \n\n"
# Weather alert:
alertCode, alertMessage = self.getWeerAlarm(wData["liveweer"][0])
if (v and alertCode != None):
message += alertMessage + "\n\n"
elif (not v and alertCode != None):
if (alertCode == "rood"):
message += alertMessage + "\n\n"
else:
message += ":warning: Er is een weeralarm van kracht. Code " + alertCode + ".\n\n"
# Today:
message += weatherIconTranslation[ wData["liveweer"][0]["image"] ]
message += " Het is " + wData["liveweer"][0]["temp"] + " graden "
message += "en het weer is: " + wData["liveweer"][0]["samenv"] + ". "
message += "De verwachting: " + wData["liveweer"][0]["verw"]
message += "\n\nMorgen: " + weatherIconTranslation[ wData["liveweer"][0]["d1weer"] ]
message += " " + wData["liveweer"][0]["d1tmin"] + " tot "
message += wData["liveweer"][0]["d1tmax"] + " graden. "
if (wData["liveweer"][0]["d1neerslag"] == "0"):
message += "Geen neerslag. "
else:
message += "Kans op neerslag: " + wData["liveweer"][0]["d1neerslag"] + "%. "
if (int(wData["liveweer"][0]["d1windk"]) > 5):
message += "Windkracht " + wData["liveweer"][0]["d1windk"] + ". Blow it."
if (v):
# Only print tomorrow, the day after and the BBQ grade if verbose is on:
message += "\n\nMorgen: " + weatherIconTranslation[ wData["liveweer"][0]["d1weer"] ]
message += " " + wData["liveweer"][0]["d1tmin"] + " tot "
message += wData["liveweer"][0]["d1tmax"] + " graden. "
if (wData["liveweer"][0]["d1neerslag"] == "0"):
message += "Geen neerslag. "
else:
message += "Kans op neerslag: " + wData["liveweer"][0]["d1neerslag"] + "%. "
if (int(wData["liveweer"][0]["d1windk"]) > 5):
message += "Windkracht " + wData["liveweer"][0]["d1windk"] + ". Blow it."
message += "\n\nOvermorgen: "+ weatherIconTranslation[ wData["liveweer"][0]["d2weer"] ]
message += " " + wData["liveweer"][0]["d2tmin"] + " tot "
message += wData["liveweer"][0]["d2tmax"] + " graden. "
if (wData["liveweer"][0]["d2neerslag"] == "0"):
message += "Geen neerslag. "
else:
message += "Kans op neerslag: " + wData["liveweer"][0]["d2neerslag"] + "%. "
if (int(wData["liveweer"][0]["d2windk"]) > 5):
message += "Windkracht " + wData["liveweer"][0]["d2windk"] + ". "
message += "\n\nOvermorgen: "+ weatherIconTranslation[ wData["liveweer"][0]["d2weer"] ]
message += " " + wData["liveweer"][0]["d2tmin"] + " tot "
message += wData["liveweer"][0]["d2tmax"] + " graden. "
if (wData["liveweer"][0]["d2neerslag"] == "0"):
message += "Geen neerslag. "
else:
message += "Kans op neerslag: " + wData["liveweer"][0]["d2neerslag"] + "%. "
if (int(wData["liveweer"][0]["d2windk"]) > 5):
message += "Windkracht " + wData["liveweer"][0]["d2windk"] + ". "
bbqGrade = self.getBbqGrade(wData["liveweer"][0])
message += "\n\nHet BBQ cijfer voor vandaag is: " + '{0:g}'.format(round(bbqGrade, 1))
message += "\n\nOant Moarn!"
@@ -513,6 +529,37 @@ class Shitpost(object):
else:
print("API ERROR. :robot:")
#returns which the current weatheralert code and returns a message
def getWeerAlarm(self, weatherObj):
if (weatherObj["alarm"] != "1"):
return None, ""
if ("code rood" in weatherObj["alarmtxt"].lower()):
return "rood", "HOLY SHIT :scream: HET IS :red_circle:CODE ROOD:red_circle:!! " + weatherObj["alarmtxt"] + ". Hide yo kids, hide yo wife!"
if ("code oranje" in weatherObj["alarmtxt"].lower()):
return "oranje", "PAS OP! :large_orange_diamond: Code Oranje :large_orange_diamond: is van kracht! :willy: " + weatherObj["alarmtxt"]
return "geel", ":warning: Kennelijk is er een weeralarm: " + weatherObj["alarmtxt"]
#determines a BBQ grade based on the current weather
def getBbqGrade(self, weatherObj):
grade = 1.0
try:
averageTemp = (float(weatherObj["d0tmin"]) + float(weatherObj["d0tmax"])) / 2
#add up to 4.0 points for sun:
grade += float(weatherObj["d0zon"]) / 25
#add up to 5.0 points for temperature:
grade += min(5.0, averageTemp*averageTemp/125)
#remove up to 5.0 points for rain/snow:
grade -= float(weatherObj["d0neerslag"]) / 20
#remove points for very hot weather: (above 30)
grade -= max(0, (float(weatherObj["d0tmax"]) - 30.0)/3 )
except:
return -1.0
return max(1.0, min(10.0, grade))
@commands.command(pass_context=True)
@asyncio.coroutine
def watspelenwe(self, ctx):