Files
stroopwafel/Shitpost.py
T
2018-08-15 00:43:50 +02:00

482 lines
16 KiB
Python

import asyncio
import discord
from discord.ext import commands
from urllib import request
import requests
import oauth2 as oauth
import json, requests
import math
from datetime import datetime
import sys
import os
import random
class Shitpost(object):
"""Schijtpaal commando's. Alleen bruikbaar in de daarvoor toegewezen schijtpaal kanalen."""
def __init__(self, bot):
self.bot = bot
self.voice_states = {}
self.hdConImpatientEvents = []
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 2018?
Gebruik: !ishetalhdcon
"""
#year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Now = datetime.now()
HdConDate = datetime(2018, 9, 14, 4, 0, 1) #om 4 uur lig je toch wel al op bed?
Distance = HdConDate - Now
Message = Message = "HD Con 2018 is al voorbij. HD Con 2019 zal in 2019 plaatsvinden." #init
if Distance.days < 0:
if Now.month == 9:
if Now.day == 14:
Message = "HD Con 2018 begint vandaag! OMG!"
elif Now.day == 15 or Now.day == 16:
Message = "HD Con 2018 is nu bezig!!"
elif Now.day == 17:
Message = "HD Con 2018 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 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:
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
#hahaha geheime tokens in de code hahahaha TODO
consumer = oauth.Consumer(key="eUotijxUEcTVpegNCIzEqz0be", secret="Opj95FAhRkpgVpo61PEJcConvYHgAk7TlouETk2NaSh6dvhCLu")
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=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 = 'ruyter118',
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 = 'ruyter118',
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': 'ruyter118',
'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 = 'ruyter118',
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'))
#Used by function weer()
@commands.command(pass_context=True)
@asyncio.coroutine
def weer(self, ctx, location="Leiden"):
"""Vertelt je het weer.
Omdat je te lui bent om naar buiten te kijken.
Oant Moarn!
"""
weatherIconTranslation = {
"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:",
"zwaarbewolkt" : ":cloud:",
"nachtmist" : ":ghost:",
"helderenacht" : ":first_quarter_moon_with_face:",
"wolkennacht" : ":cloud:"
}
if(location == ""):
location = "Leiden"
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 = ""
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"
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."
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\nOant Moarn!"
yield from ctx.channel.send(message)
else:
print("API ERROR. :robot:")
@commands.command(pass_context=True)
@asyncio.coroutine
def watspelenwe(self, ctx):
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"
]
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"
]
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."
]
PERSONEN = [
"Mark", "Lourens", "JP",
"Freek", "Martijn", "Erik"
]
VIDYA = [
"Monster Hunter.", "Grim Dawn.",
"Diablo.", "PoE.",
"Dota 2.", "Minecraft",
"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
random.seed(lekkerzaad)
if Now.day == 5:
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."
else:
message = "We spelen " + DAG + random.choice(SPELLEN) + " " + random.choice(PLAATSEN) + ", aanvang " + random.choice(AANVANG)
yield from ctx.channel.send(message)
def setup(bot):
bot.add_cog(Shitpost(bot))