Files
stroopwafel/Shitpost.py
T
2020-08-11 20:11:14 +02:00

797 lines
29 KiB
Python

import asyncio
import discord
from discord.ext import commands
from urllib import request
import requests
import json, requests
import math
from datetime import datetime
import sys
import os
import random
class Shitpost(commands.Cog):
"""Schijtpaal commando's. Alleen bruikbaar in de daarvoor toegewezen schijtpaal kanalen."""
def __init__(self, bot):
self.bot = bot
self.voice_states = {}
self.hdConImpatientEvents = []
self.zwarte_lijst = [line.rstrip('\n') for line in open('black.txt')]
self.witte_lijst = [line.rstrip('\n') for line in open('white.txt')] # nihao
self.insult = ['koekenbakker','stumperd','knurft','oelewapper','klungel','stoethaspel',
'onnozelaar','beunhaas','uilskuiken','bamibal','zwakzinnige','oenemeloen',
'klaphark','rompeknonker','bal gehakt','ongewassen vlerk','droeftoeter','omgedraaid pak hagelslag',
'prutser','domkop','non-valeur','ontzettende debiel','paljas','simpeltje',
'knoeier','sufferd','slaapkop','onbenul','enorme nerf herder','geinponem',
'clownsfiguur','krotenkoker','hansworst','grappenmaker','flapdrol','oen',
'achterlijk gebakje','demente dibbes','geitenbreier','koekwous','sufkop']
def __check(self, ctx): #Todo: Is dit het shitpost kanaal?
return True
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def ishetalhdcon(self, ctx):
"""Hoe lang nog tot Hoestende Dranken Con 2019?
Gebruik: !ishetalhdcon
"""
#year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Now = datetime.now()
HdConDate = datetime(2019, 9, 20, 4, 0, 1) #om 4 uur lig je toch wel al op bed?
Distance = HdConDate - Now
Message = Message = "HD Con 2019 is al voorbij. HD Con 2020 zal in 2020 plaatsvinden." #init
if Distance.days < 0:
if Now.month == 9:
if Now.day == 20:
Message = "HD Con 2019 begint vandaag! OMG!"
elif Now.day == 21 or Now.day == 22:
Message = "HD Con 2019 is nu bezig!!"
elif Now.day == 23:
Message = "HD Con 2019 is vandaag alweer afgelopen... F"
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message))
return
else:
NachtjesSlapen = Distance.days + 1
if NachtjesSlapen == 1:
Message = "Nog " + str(NachtjesSlapen) + " nachtje slapen..."
else:
Message = "Nog " + str(NachtjesSlapen) + " nachtjes slapen..."
#Hou bij hoe vaak dit wordt gevraagd:
eventsMinutesAgo = 0;
eventsMinutesAgoSameAuthor = 0;
eventsLastDays = 0;
for evt in self.hdConImpatientEvents:
eventDistance = Now - evt[1]
if eventDistance.days < 1 and eventDistance.seconds < 600:
eventsMinutesAgo += 1
if evt[0] == ctx.author.id:
eventsMinutesAgoSameAuthor +=1
if eventDistance.days < 2:
eventsLastDays += 1
if not "DMChannel" in type(ctx.channel).__name__: #ignore personal chats
self.hdConImpatientEvents.append([ctx.author.id, Now])
#Als dezelfde persoon het blijft vragen pikken we het niet:
if eventsMinutesAgoSameAuthor > 3:
return #fuck it.
if eventsMinutesAgoSameAuthor > 0:
if eventsMinutesAgoSameAuthor > 2:
yield from ctx.channel.send("...")
return
yield from ctx.channel.send("Dat vroeg je net ook al, " + ctx.author.mention + "!")
return
#Hoe vaker er wordt gevraagd, hoe ongeduldiger de antwoorden:
if not "DMChannel" in type(ctx.channel).__name__: #ignore personal chats
impatientFactor = 10 + eventsMinutesAgo*25 + eventsLastDays*10;
impatientFactor *= random.random()
if impatientFactor > 100:
yield from ctx.channel.send("Nee!")
return
elif impatientFactor > 15 and eventsMinutesAgo > 0:
Message = "Dat hebben jullie net gevraagd."
elif impatientFactor > 9:
Message = "Nee."
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def zalgo(self, ctx, *, arg):
"""z̴̬̘͇̗͇̦̤̩̜͜ą̷̟̯̪̩̣̭̭͇̹l̴̗͓̟̠̤̳̗͉̠ͅg̵̜͎̪̞̫͎͈͉͉͍o̵̧̧͇̱̱̜̮͉͉̳ ̴̨̡͖̘̪̭̖͖̘̝h̸̭̰̫̲̺̹̻̜͕ͅe̴̢̘̪̱̱̩̠̣̘̱ ̴̡̢̲̞̙̝̮̻̻͇c̶̡̢̺͙̮̗̲̹̱̱o̷̢̡̺̘͈͎̫̬͔̤m̷͕͍͍̥͖̻̲̞̝ͅe̷̱̟͕̥͕̞̜̫̳̙s̷̨͍̼̝̙̩̥̰̠ͅ
̵͓̥̼͉̹̫̦͉̰͉h̷̦̰̣̗̭͕̩͓͈̠i̶̗̰̹̤̖͙̰̹͙̹j̸̧̜̬̬̜̹͔̰̫͜ ̶̧͉͔̠̻͈̜̳̥̭k̸̯̳̠̼̙̗̘̳͜ͅǫ̵̝̱̩͎̫͈̣̪̦m̶̺̙̟̫͔͈̭̖̱ͅt̶̜̠̟͙̞̠̗̗̥ͅ ̸̢̹̜͉͙̩̬̖ͅͅh̷̯̮̘̭͈̜̺͎̳̯i̴̩̯̼̱͇̟̫̻̘̖j̵̪̤̦͖̮̜̦̼̺̮ ̶̧͇̭̞̮̩̼͚̮ͅḵ̴̢̨̢͉͉͖̹̬̺o̵̢̪̥̻͙͕̫̥̗͜m̶̧̡͔̠̺͖̝̳̪ͅt̷̢̮̭̜̥̠̼̫͍̯
d̷̢̪͍͓̭̣̼̠͎̠e̴̡̢̩̱͙̻̥̯͎͜ ̵̲̪͖̖͖͍͈͎̮̼ļ̴̯̗̝̦͍͍͖̰͜i̶̡̘̟̳̖͙͕͔̺͜ȩ̸̤͎̣͖͔̭͔̫̯v̷͔̺͖̖̞̙̘̖̠͓e̶̲͍̮̳͎̗̳̞̹͔ ̸̡̬̫͎͎̝͍̤̯ͅg̴̨̞̻͙̠̰͖͖̝ͅǫ̴̘̥͇̙̖͈͍̹̥e̵̥͇̫̱̬̝̥̲̞̜d̷͈͙̝͍͔̘͕̼̜̦e̴̡̯̦͉͙̪̭͕̻̝
S̴̼͂ ̴̤͘I̴̯͌ ̸̹͛N̵̙͂ ̴̥̅T̶̡̀ ̵̼́E̷̞͌ ̵͚͗R̸͔͑ ̶̢͝K̴̭͂ ̷̨͋L̴̖͂ ̶̪͝A̵̹͗ ̸͓̑Ȁ̶̘ ̸̟́S̵̯̆
Gebruik: !zalgo [text]
Bijv: !zalgo "Je moeder"
"""
factor = 4
message = ''
#from https://github.com/Aethylia/zalgo-cli:
for letter in arg:
for i in range(factor):
letter += random.randint(0x300, 0x36f).to_bytes(2, byteorder='big').decode('utf-16be')
message += letter
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention + ' ' + str(message))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def corona(self, ctx):
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
params = (
('minimal/', 'true'),
('format/', 'json')
)
response = requests.get('https://corona-stats.online/NL/?format=json&source=2')
answer = json.loads(response.content.decode('utf-8'))
answer = answer["data"]
message = "Er zijn in Nederland " + str(answer[0]["cases"]) + " bevestigde gevallen 😷"
message += " dat is 🔺" + str(answer[0]["todayCases"]) + "🔺 meer dan gisteren! "
message += "Er zijn ondertussen " + str(answer[0]["deaths"]) + " mensen dood 💀"
message += " waarvan " + str(answer[0]["todayDeaths"]) + " ☠️ in de afgelopen 24 uur. "
message += "Ook liggen er " + str(answer[0]["critical"]) + " mensen op de IC 🏥"
yield from ctx.channel.send(ctx.author.mention + ' ' + str(message))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def viertwintig(self, ctx):
"""Hoe lang nog tot 420?
Gebruik: !viertwintig
"""
#year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Now = datetime.now()
Next420 = datetime(Now.year, 4, 20, 16, 20, 00)
Distance = Next420 - Now
print("Time till 420: " + str(Distance.days) + ", " + str(Distance.seconds))
Message = ""
if Distance.days < 0:
if Distance.days == -1 and Now.day == 20: #is it still 420 today?
Message += ":leaf: **BLAZE IT** :leaf: "
else:
Message += "420 is al geweest dit jaar. Blaze het volgend jaar nog eens."
else:
days = Distance.days #bv 4
secondsLeft = (Distance.seconds)
print(secondsLeft)
hours = math.floor(secondsLeft / 3600)
print(hours)
secondsLeft = secondsLeft - hours*3600
minutes = math.floor(secondsLeft / 60)
seconds = secondsLeft - minutes * 60
Message += "Nog " + str(days) + " dagen, " + str(hours) + " uur, " + str(minutes) + " minuten en " + str(seconds) + " seconden tot 420!!"
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def iselderscrolls6aluit(self, ctx):
"""Hoe lang nog tot Elder Scrolls 6? 11-11-11? 20-20-20?
Gebruik: !iselderscrolls6aluit
"""
Now = datetime.now()
if Now.month == 4 and Now.day == 1:
Message = "JA! :hushed: " #1 april, motherfucker.
else:
Message = "Nee. :frowning2: Nog even geduld..."
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def giethetaloan(self, ctx):
"""Giet het al oan?
Ja of Nee.. kom op nou.
"""
#We halen dit op van de twitter account @gietitaloan die vertrouwen wij als de ultieme waarheid
consumer = oauth.Consumer(key=self.bot.tokens["twitterKey"], secret=self.bot.tokens["twitterSecret"])
client = oauth.Client(consumer)
resp, content = client.request("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=gietitaloan&count=1", "GET")
#TODO kijken of resp iets zinnigs teruggeeft.. of iets doen met een try of catch ofzow
content_str = content.decode('utf-8') #converteren naar str voor welke stomme reden dan ook
answer = json.loads(content_str)[0]["text"] #inhoud van de tweet
answer = answer.lower()
reactie = ""
if 'ja' in answer:
if 'nee' in answer:
reactie += 'Het is onduidelijk..'
else:
reactie += 'Het giet oan!'
else:
if 'nee' in answer:
reactie += 'Nee helaas..'
yield from ctx.channel.send(ctx.author.mention + ' ' + reactie)
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def inspire(self, ctx):
"""Laat je inspireren
Bijvoorbeeld:
!inspire
"""
r = requests.get(url='http://inspirobot.me/api?generate=true')
if r.status_code is 200:
url = r.text
em = discord.Embed(title='Uw wijze woorden:', type='photo')
em.set_image(url=url)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em)
else:
yield from ctx.channel.send(ctx.author.mention + ' helaas, geen quote gevonden.')
@commands.command(pass_context=True, hidden=True)
@asyncio.coroutine
def mark(self, ctx, boven: str, onder: str):
"""Maakt een mark meem.
Bijvoorbeeld:
!mark \"je moeder\" \"is een hoer\"
"""
params = dict(
template_id = '112898841', #de marku
username = 'Stroopwafel',
password = self.bot.passwords["imgflip"],
text0 = boven,
text1 = onder
)
#self.bot.say("deed ik het ding?")
resp = requests.get(url='https://api.imgflip.com/caption_image', params=params)
#todo check for success
photourl = resp.json()['data']['url']
em = discord.Embed(title='De Mark heeft gesproken.', type='photo')
em.set_image(url=photourl)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True)
@asyncio.coroutine
def eriku(self, ctx, boven: str, onder: str):
"""Maakt een erik meem.
Bijvoorbeeld:
!eriku \"je moeder\" \"is een hoer\"
"""
params = dict(
template_id = '93296473', #de eriku
username = 'Stroopwafel',
password = self.bot.passwords["imgflip"],
text0 = boven,
text1 = onder
)
#self.bot.say("deed ik het ding?")
resp = requests.get(url='https://api.imgflip.com/caption_image', params=params)
#todo check for success
photourl = resp.json()['data']['url']
em = discord.Embed(title='De Eriku heeft gesproken. Prijs hem!', type='photo')
em.set_image(url=photourl)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True)
@asyncio.coroutine
def tegeltje(self, ctx, tekst: str, auteur: str=" "):
"""Maak een mooi tegeltje met volkswijsheid
Bijvoorbeeld:
!tegeltje \"Oost west, 420 best\" \"Lourens\"
"""
params = {
'template_id': '121572521', #delfts blauw
'username': 'Stroopwafel',
'password': self.bot.passwords["imgflip"],
'text0': 'dummy0',
'text1': 'dummy1',
'font': 'arial',
'max_font_size': 27,
'boxes[0][text]': tekst,
'boxes[0][x]': 40,
'boxes[0][y]': 85,
'boxes[0][width]': 220,
'boxes[0][height]': 150,
'boxes[0][color]': '#0044cc',
'boxes[0][outline_color]': '#ffffff',
'boxes[1][text]': auteur,
'boxes[1][x]': 80,
'boxes[1][y]': 245,
'boxes[1][width]': 140,
'boxes[1][height]': 12,
'boxes[1][color]': '#0044cc',
'boxes[1][outline_color]': '#ffffff'
}
resp = requests.get(url='https://api.imgflip.com/caption_image', params=params)
#todo check for success
photourl = resp.json()['data']['url']
em = discord.Embed(title='Tegeltjeswijsheid:', type='photo')
em.set_image(url=photourl)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True)
@asyncio.coroutine
def relevantxkcd(self, ctx, query: str):
"""There is always a relevant XKCD
Bijvoorbeeld:
!relevantxkcd python
"""
#self.bot.say("deed ik het ding?")
response = requests.get("https://relevantxkcd.appspot.com/process?action=xkcd&query=" + query)
splitResponse = response.text.split(" ")
if (float(splitResponse[0]) == 0.0):
yield from ctx.channel.send('Ik kan helaas geen XKCD vinden met als onderwerp "' + query + '".')
return
photoUrl = "http://www.explainxkcd.com" + splitResponse[3]
print(photoUrl)
em = discord.Embed(title='', type='photo')
em.set_image(url=photoUrl)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention +
' een XKCD over "' + query + '"', embed=em)
@commands.command(pass_context=True, hidden=True)
@asyncio.coroutine
def zout(self, ctx, boven: str, onder: str):
"""Maakt een martijn-zout meem.
Bijvoorbeeld:
!zout \"je moeder\" \"is een hoer\"
"""
params = dict(
template_id = '116231806', #de martijn
username = 'Stroopwafel',
password = self.bot.passwords["imgflip"],
text0 = boven,
text1 = onder
)
#self.bot.say("deed ik het ding?")
resp = requests.get(url='https://api.imgflip.com/caption_image', params=params)
#todo check for success
photourl = resp.json()['data']['url']
em = discord.Embed(title='De Martijn heeft gesproken.', type='photo')
em.set_image(url=photourl)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True)
@asyncio.coroutine
def nihao(self,ctx):
#yield from self.bot.say("Kankerlauw")
yield from ctx.channel.send("kankerlauw")
@commands.command(pass_context=True)
@asyncio.coroutine
def tijd(self, ctx, *args):
"""Vertelt je hoe laat het is..
Misschien geeft het ook wel een leuke meem terug.
Wie weet.
Probeer het eens op verschillende tijdstippen.
"""
time=datetime.now().strftime('%H%M')
for argument in args:
time = argument
filepath = ''
#filejpg = './tijd/' + time + '.jpg'
#filepng = './tijd/' + time + '.png'
filejpg = os.path.join('tijd', time) + '.jpg'
filepng = os.path.join('tijd', time) + '.png'
if os.path.isfile(filejpg):
filepath = filejpg
elif os.path.isfile(filepng):
filepath = filepng
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
if filepath is not '':
#file = open(filepath, 'rb')
#yield from self.bot.upload(file, filename = filepath)
yield from ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M'), file=discord.File(filepath, 'tijd.png'))
else:
yield from ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M'))
@commands.command(pass_context=True)
@asyncio.coroutine
def roll(self, ctx, dice="1d20", modifier1="", modifier2=""):
"""Roll een dobbelsteen. Of een paar. Bijvoorbeeld:
!roll 4d20
!roll 1d6 + 5
"""
diceSplit = dice.lower().split('d')
if len(diceSplit) != 2:
return
modifier1 = modifier1.replace("+", "") #this is both possible: "1d20 + 1" and "1d20 +1"
modifier2 = modifier2.replace("+", "")
if modifier1 == "-":
modifier1 = ""; #this is also possible: "1d20 - 1"
modifier2 = "-" + modifier2
try: #check if they are numbers:
nrOfDice = 1 if (diceSplit[0]=="") else int(diceSplit[0]) #allow input like: "!roll d20"
dieType = int(diceSplit[1])
mod1 = 0 if (modifier1=="") else int(modifier1)
mod2 = 0 if (modifier2=="") else int(modifier2)
except ValueError:
return
#validate values:
if nrOfDice < 1 or nrOfDice > 99 or dieType < 2 or dieType > 100:
return
if mod1 < -999 or mod1 > 999 or mod2 < -999 or mod2 > 999:
return
#roll:
random.seed(datetime.now())
total = 0
returnText = "Rolling " + str(nrOfDice) + "d" + str(dieType) + "...\n"
for x in range(0, nrOfDice):
if x != 0:
returnText += "+ "
roll = random.randint(1, dieType)
total += roll
if dieType >= 10 and (roll == 1 or roll == dieType):
returnText += "[**" + str(roll) + "**] " #make significant numbers bold
else:
returnText += "[" + str(roll) + "] "
total += mod1 + mod2
if mod1 != 0:
if mod1 > 0:
returnText += "+"
returnText += str(mod1) + " "
if mod2 != 0:
if mod2 > 0:
returnText += "+"
returnText += str(mod2) + " "
if nrOfDice > 1 or mod1 != 0 or mod2 != 0: #only show calculation if it makes sense:
returnText += " = __**" + str(total) + "**__"
yield from ctx.channel.send(returnText)
@commands.command(pass_context=True)
@asyncio.coroutine
def weer(self, ctx, location="Leiden", verbose="False"):
"""Vertelt je het weer.
Omdat je te lui bent om naar buiten te kijken.
Oant Moarn!
"""
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)
#Oant Moarn
if (response.ok):
wData = json.loads(response.content.decode('utf-8'))
message = ""
# 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 += self.getWeatherIconTranslation( 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"]
if (v):
# Only print tomorrow, the day after and the BBQ grade if verbose is on:
message += "\n\nMorgen: " + self.getWeatherIconTranslation( 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: "+ self.getWeatherIconTranslation( 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 a nice weather icon. Sometimes the API uses non-documented icons, so we return something else
def getWeatherIconTranslation(self, iconKey):
WEATHER_ICONS = {
"zonnig" : ":sun_with_face:",
"bliksem" : ":cloud_lightning:",
"regen" : ":cloud_rain:",
"buien" : ":umbrella:",
"hagel" : ":cloud_snow:",
"mist" : ":white_large_square:",
"sneeuw" : ":cloud_snow:",
"bewolkt" : ":white_sun_cloud:",
"halfbewolkt" : ":partly_sunny:",
"halfbewolkt_regen" : ":white_sun_rain_cloud:",
"zwaarbewolkt" : ":cloud:",
"nachtmist" : ":ghost:",
"helderenacht" : ":first_quarter_moon_with_face:",
"wolkennacht" : ":cloud:"
}
try:
return WEATHER_ICONS[iconKey]
except KeyError:
print("WARN Unknown iconKey:", str(iconKey))
return ":park:"
#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:505886070668263426> " + 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:
#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, float(weatherObj["gtemp"])*float(weatherObj["d0tmax"])/100)
#remove up to 5.0 points for rain/snow:
grade -= float(weatherObj["d0neerslag"]) / 20
#but since d0neerslag is very unreliable:
if float(weatherObj["d0neerslag"]) < 10:
if weatherObj["image"] in ["regen", "buien", "bliksem", "hagel", "sneeuw", "halfbewolkt_regen"]:
grade -= 2.0
#remove points for very hot weather: (above 30)
grade -= max(0, (float(weatherObj["d0tmax"]) - 30.0)/10 )
except:
return -1.0
return max(1.0, min(10.0, grade))
@commands.command(pass_context=True)
@asyncio.coroutine
def ktdm(self, ctx, *args):
'''Speel Kaarten Tegen De Mensheid! Genereer een kaart of geef zelf opties.
Bijvoorbeeld: !ktdm <"1"><"2"><"3"> (aanbevolen 1 of 2, max 3)'''
random.shuffle(self.witte_lijst) # schudden voor gebruik
zwarte_kaart = random.choice(self.zwarte_lijst).replace("___", "**{}**") # kies en maak het juiste format
aantal_wit = zwarte_kaart.count("{}") # tel hoeveel witte kaarten er nodig zijn
if aantal_wit == 0: # Soms staat er geen ___ in de kaart
zwarte_kaart = zwarte_kaart + " **{}**"
aantal_wit = 1
arg_count = len(args)
if arg_count > 3:
yield from ctx.channel.send(ctx.author.mention + ", " + random.choice(insult) + ", 3 is het maximum.")
elif arg_count > 0:
for elem in args:
self.witte_lijst.append(elem)
if arg_count != 0: # Indien extra args gegeven
while arg_count != aantal_wit: # Match het aantal args aan het aantal dat nodig is
zwarte_kaart = random.choice(self.zwarte_lijst).replace("___", "**{}**")
aantal_wit = zwarte_kaart.count("{}")
wit={} # maak dynamisch dict aan met de witte kaarten die ingevuld worden
for x in range(aantal_wit, 0, -1):
key = "wit" + str(x)
wit[key] = self.witte_lijst.pop()
# Dit gedeelte print de zwarte kaart mooi af
if aantal_wit == 1:
print(zwarte_kaart.format(wit['wit1']))
yield from ctx.channel.send(ctx.author.mention + "\n" + zwarte_kaart.format(wit['wit1']))
elif aantal_wit == 2:
print(zwarte_kaart.format(wit['wit1'],wit['wit2']))
yield from ctx.channel.send(ctx.author.mention + "\n" + zwarte_kaart.format(wit['wit1'],wit['wit2']))
elif aantal_wit == 3:
print(zwarte_kaart.format(wit['wit1'],wit['wit2'],wit['wit3']))
yield from ctx.channel.send(ctx.author.mention + "\n" + zwarte_kaart.format(wit['wit1'],wit['wit2'],wit['wit3']))
else:
print("Dit is een vreemd aantal witte kaarten: " + str(aantal_wit) + "\nDe boosdoener: " + zwarte_kaart)
yield from ctx.channel.send("Arme " + random.choice(insult) + ", er is iets foutgegaan!")
yield from ctx.message.delete()
@commands.command(pass_context=True)
@asyncio.coroutine
def beledig(self, ctx, member:discord.User):
'''Je vindt iemand stom maar je hebt geen inspiratie? Beledig al je vriendjes met deze handige beledig-i-fier!
Bijvoorbeeld: !beledig @jemoeder'''
yield from ctx.channel.send(member.mention+ ", " + ctx.author.mention + " vindt jou een " + random.choice(self.insult) + "! :angry:")
yield from ctx.message.delete()
@commands.command(pass_context=True)
@asyncio.coroutine
def watspelenwe(self, ctx):
"""Stroop weet wat we spelen op vrijdag.
Geeft elke week een pseudo-random antwoord.
Geseed op weeknummer + jaar.
"""
SPELLEN = [
"DND", "Ars Magica",
"5e", "4e",
"Pathfinder", "Pathfinder 2",
"CoC", "Delta Green",
"een one-shot", "Kaarten tegen de Mensheid",
"Midfloat", "Isle of Arden",
"dat ene systeem voor een one-shot waarna we stellen dat het voor herhaling vatbaar is maar volgende keer doen we toch weer een ander systeem",
"Cyberpunk 2020"
]
PLAATSEN = [
"bij Mark thuis", "bij Freek thuis",
"bij JP thuis", "bij Erik thuis",
"bij Lourens thuis", "in de Vrouwensteeg",
"bij Martijn thuis", "bij je moeder thuis",
"op ROLL20", "bij de Privé2000"
]
AANVANG = [
"17:00.", "17:30.",
"18:00.", "als Martijn aanbelt.",
"nadat de big in de bakfiets is langsgeweest.", "na Lourens' t-break.",
"als iedereen heeft gekookt.", "als Mark zijn frikadelbroodjes heeft.",
"ongeveer een uur voordat JP's trein gaat.", "wanneer Lourens vrijgelaten wordt door de burgemeester."
]
PERSONEN = [
"Mark", "Lourens", "JP",
"Freek", "Martijn", "Erik"
]
VIDYA = [
"Monster Hunter.", "Grim Dawn.",
"Diablo.", "PoE.",
"Dota 2.", "Minecraft",
"Factorio",
"dat ene spel dat net uit is gekomen in de Humble Bundle waar we na 2 dagen klaar mee zijn precies wanneer Martijn wel tijd heeft mee te spelen."
]
Now = datetime.now()
week = Now.isocalendar()[1]
lekkerzaad = week + Now.year
if (Now.weekday() == 5) or (Now.weekday() == 6):
lekkerzaad += 1
random.seed(lekkerzaad)
if Now.weekday() == 4:
DAG = "vandaag "
else:
DAG = "vrijdag "
message = ""
KEUZEMOGELIJKHEDEN = random.randint(0, 10)
if KEUZEMOGELIJKHEDEN == 10:
message = "We gaan " + DAG + "poppetjes verven " + random.choice(PLAATSEN) + ", aanvang " + random.choice(AANVANG)
elif KEUZEMOGELIJKHEDEN == 9:
message = random.choice(PERSONEN) + " is ziek, we spelen " + random.choice(VIDYA)
elif KEUZEMOGELIJKHEDEN == 8:
message = "We spelen " + DAG + random.choice(SPELLEN) + " " + random.choice(PLAATSEN) + ", aanvang " + random.choice(AANVANG) + " Zelfs Guus doet mee."
elif KEUZEMOGELIJKHEDEN == 7:
message = "We spelen " + DAG + random.choice(SPELLEN) + " " + random.choice(PLAATSEN) + ", aanvang " + random.choice(AANVANG) + " Erik komt zelfs uit Apeldoorn."
elif KEUZEMOGELIJKHEDEN == 6:
message = random.choice(PERSONEN) + " moet overwerken want ze hebben het weer verneukt. Iets met IT. De rest speelt " + random.choice(VIDYA)
else:
message = "We spelen " + DAG + random.choice(SPELLEN) + " " + random.choice(PLAATSEN) + ", aanvang " + random.choice(AANVANG)
try:
yield from ctx.message.delete()
except:
print("No permission to delete message")
yield from ctx.channel.send(message)
@commands.command(pass_context=True)
@asyncio.coroutine
def review(self, ctx, *args):
"""Stroop heeft (bijna) overal een mening over. Vraag het hem!
"""
topic = " ".join(args)
if topic == "":
random.seed(datetime.now())
else:
random.seed(topic.lower().replace(" ", ""))
message = ""
if topic == "":
REVIEW_START = [
"Ik vond 'm", "Ik vind 'm", "Ik vond het", "Ik vind het", "Als je het mij vraagt was ie", "Mijn mening:",
"Als je het mij vraagt was hij", "Ik ben geen expert, maar ik vond 'm", "Hij was"
]
else:
REVIEW_START = [
"Ik vond "+topic, "Ik vind "+topic, "Als je het mij vraagt was "+topic, "Als je het mij vraagt is "+topic,
"Ik ben geen expert, maar ik vond "+topic, topic+" was", topic+" is", topic+" is gewoon", "Mijn mening over "+topic+ ":",
"Mijn review van "+topic+ ":"
]
SHORT_REVIEW = [
"goed.", "goed!", "echt goed!", "prima.", "top.", "helemaal toppie!", "ruk.", "middelmatig.",
"goed te doen.", "belabberd.", "uitstekend!", "uitmuntend.", "een beetje saai.", "supersick, yo.",
"wel OK.", "ronduit kut.", "indrukwekkend.", "\"bijzonder\".", "raar.", "slecht.", "heel slecht."
]
#todo: long review
EMOJI = [
":watermelon:", ":middle_finger:", ":poop:", ":banana:", ":eggplant:", ":red_car:", ":gem:",
":heart:", ":flag_nl: ", ":cow:", ":dolphin:", ":four_leaf_clover:", ":basketball: ", ":thumbsup:"
]
message = random.choice(REVIEW_START) + " "
message += random.choice(SHORT_REVIEW) + " "
pickerScore = random.randint(1, 10)
if pickerScore < 7:
rating = random.randint(1, 5)
message += str(rating) + " ster" + ("" if (rating==1) else "ren") + ". " + ":star:"*rating
elif pickerScore < 8:
rating = random.randint(0, 5)
message += str(rating) + " reet" + ("" if (rating==1) else "en") + ". " + ":peach:"*rating
else:
maxRating = random.randint(3, 12)
rating = random.randint(1, maxRating)
emoj = random.choice(EMOJI)
message += str(rating) + " " + emoj*rating + " out of " + str(maxRating) + "."
yield from ctx.channel.send(message)
def setup(bot):
bot.add_cog(Shitpost(bot))