diff --git a/Shitpost.py b/Shitpost.py index cb56efa..39c7cff 100644 --- a/Shitpost.py +++ b/Shitpost.py @@ -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,40 +482,83 @@ 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!" yield from ctx.channel.send(message) 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