Files
stroopwafel/Shitpost.py
T
2018-04-13 16:49:17 +02:00

330 lines
11 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 viertwintig(self, ctx):
"""Hoe lang nog tot 420?
Gebruik: !420
"""
#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
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) - (86400 * days)
hours = math.floor(secondsLeft / 3600)
secondsLeft = secondsLeft - hours*3600
minutes = math.floor(secondsLeft / 60)
seconds = secondsLeft - minutes * 60
Message += "Nog " + str(days) + " dagen, " + 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 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))