Weer: BBQ cijfer en (non)verbose

This commit is contained in:
JP
2019-07-27 14:00:57 +02:00
parent 1a28e0da79
commit d7c967f028
+51 -4
View File
@@ -447,7 +447,7 @@ class Shitpost(object):
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine @asyncio.coroutine
def weer(self, ctx, location="Leiden"): def weer(self, ctx, location="Leiden", verbose="False"):
"""Vertelt je het weer. """Vertelt je het weer.
Omdat je te lui bent om naar buiten te kijken. Omdat je te lui bent om naar buiten te kijken.
Oant Moarn! Oant Moarn!
@@ -469,6 +469,10 @@ class Shitpost(object):
} }
if(location == ""): if(location == ""):
location = "Leiden" location = "Leiden"
if(str(verbose).lower() == "false"):
v = False
else:
v = True
url = "http://weerlive.nl/api/json-10min.php?locatie=" + location url = "http://weerlive.nl/api/json-10min.php?locatie=" + location
response = requests.get(url) response = requests.get(url)
@@ -478,15 +482,24 @@ class Shitpost(object):
wData = json.loads(response.content.decode('utf-8')) wData = json.loads(response.content.decode('utf-8'))
message = "" message = ""
if (wData["liveweer"][0]["alarm"] == "1"): # Weather alert:
message += "\n\n" + "HOLY SHIT :scream: ER IS EEN WEERALARM!!!1!: " alertCode, alertMessage = self.getWeerAlarm(wData["liveweer"][0])
message += wData["liveweer"][0]["alarmtxt"] + ". Hide yo kids, hide yo wife! \n\n" 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 += weatherIconTranslation[ wData["liveweer"][0]["image"] ]
message += " Het is " + wData["liveweer"][0]["temp"] + " graden " message += " Het is " + wData["liveweer"][0]["temp"] + " graden "
message += "en het weer is: " + wData["liveweer"][0]["samenv"] + ". " message += "en het weer is: " + wData["liveweer"][0]["samenv"] + ". "
message += "De verwachting: " + wData["liveweer"][0]["verw"] message += "De verwachting: " + wData["liveweer"][0]["verw"]
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 += "\n\nMorgen: " + weatherIconTranslation[ wData["liveweer"][0]["d1weer"] ]
message += " " + wData["liveweer"][0]["d1tmin"] + " tot " message += " " + wData["liveweer"][0]["d1tmin"] + " tot "
message += wData["liveweer"][0]["d1tmax"] + " graden. " message += wData["liveweer"][0]["d1tmax"] + " graden. "
@@ -507,12 +520,46 @@ class Shitpost(object):
if (int(wData["liveweer"][0]["d2windk"]) > 5): if (int(wData["liveweer"][0]["d2windk"]) > 5):
message += "Windkracht " + wData["liveweer"][0]["d2windk"] + ". " 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!" message += "\n\nOant Moarn!"
yield from ctx.channel.send(message) yield from ctx.channel.send(message)
else: else:
print("API ERROR. :robot:") 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) @commands.command(pass_context=True)
@asyncio.coroutine @asyncio.coroutine
def watspelenwe(self, ctx): def watspelenwe(self, ctx):