379 lines
12 KiB
Python
379 lines
12 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
|
|
|
|
class Shitpost(object):
|
|
"""Schijtpaal commando's. Alleen bruikbaar in de daarvoor toegewezen schijtpaal kanalen."""
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
self.voice_states = {}
|
|
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, 3, 0, 1) #om 3 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"
|
|
else:
|
|
NachtjesSlapen = Distance.days + 1
|
|
if NachtjesSlapen == 1:
|
|
Message = "Nog " + str(NachtjesSlapen) + " nachtje slapen..."
|
|
else:
|
|
Message = "Nog " + str(NachtjesSlapen) + " nachtjes slapen..."
|
|
|
|
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:")
|
|
def setup(bot):
|
|
bot.add_cog(Shitpost(bot)) |