Files
stroopwafel/General.py
T
mark 392e19f4b3
continuous-integration/drone/push Build is passing
Datetime support and updates for muzak endpoint
Now supports ISO date. Hardcoded at UTC+2.
2024-07-26 13:34:02 +02:00

152 lines
5.5 KiB
Python

import discord
import os
import praw
import random
import re
import json, requests
import warnings
from datetime import timedelta, datetime, timezone
from discord.ext import commands
class General(commands.Cog):
"""Overal toegestaan."""
def __init__(self, bot):
self.bot = bot
self.muzak_url = 'https://muzak.hoekveen.net'
self.r = praw.Reddit(
user_agent='StroopwafelBot',
client_secret=os.getenv("STROOP_REDDIT_SECRET"),
client_id=os.getenv("STROOP_REDDIT_ID")
)
self.r.read_only = True
warnings.simplefilter("ignore")
def get_emoji_embed(self, tag: str):
emoji = re.search(".*\<\:([A-z]*)\:(\d*)\>.*", tag)
embed = discord.Embed(title=emoji.group(1), type='photo')
hugemoji = 'https://cdn.discordapp.com/emojis/' + emoji.group(2) + '.png'
embed.set_image(url=hugemoji)
return embed
@commands.command()
async def huge(self, ctx, *, arg):
"""YUGE. Geeft een grote versie van de gegeven emoji terug. Werkt alleen voor custom emoji.
Bijvoorbeeld:
!huge :ancilla:
"""
em = self.get_emoji_embed(arg)
try:
await ctx.message.delete()
except:
print("No permission to delete message")
await ctx.channel.send(ctx.author.mention, embed=em)
def get_aww_post(self):
raww = self.r.subreddit('aww+catloaf+tuckedinkitties+babyelephantgifs+babybigcatgifs+blep+holdmynip+gingerkitty+cathighfive+catsstandingup+catsareassholes+eyebleach')
listing = list(raww.top(time_filter='month'))
return random.choice(listing)
@commands.command(pass_context=True)
async def aww(self, ctx):
""" iets schattigs... """
post = self.get_aww_post()
try:
await ctx.message.delete()
except:
print("No permission to delete message")
await ctx.channel.send(ctx.author.mention + ' ' + post.url)
def get_kopieerpasta(self):
rkopieerpasta = self.r.subreddit('kopieerpasta')
post = rkopieerpasta.random()
# Subreddits kunnen de random functie uitzetten, dus dit is de fallback:
if post == None:
listing = list(rkopieerpasta.top('month', limit=250))
post = random.choice(listing)
return post
@commands.command(pass_context=True)
async def kopieerpasta(self, ctx):
"""Een willekeurige shitpost"""
post = self.get_kopieerpasta()
print(post.url)
ATTEMPTS = 10
a = 0
while len(post.selftext + post.title) >= 1990 and a < ATTEMPTS:
post = self.get_kopieerpasta()
print(post.url)
a += 1
try:
await ctx.message.delete()
except:
print("No permission to delete message")
if len(post.selftext + post.title) < 1990:
await ctx.channel.send('**'+post.title+'**```'+post.selftext+'```')
else:
await ctx.channel.send("Geen kopieerpasta voor jou vandaag.")
def get_playlist_json(self):
return requests.get(self.muzak_url + '/stroopwafel')
@commands.command(pass_context=True)
async def muzak(self, ctx):
"""HD muzak playlist"""
data = json.loads(self.get_playlist_json().content)
msg = ""
open = datetime.fromisoformat(data['openDate'])
nom = datetime.fromisoformat(data['deadlineNominations'])
vote = datetime.fromisoformat(data['deadlineVoting'])
today = datetime.now(tz=timezone(timedelta(hours=2)))
if open > today:
msg += "Het stemmen is nog niet geopend voor dit jaar.\n"
days = (open-today).days
if days > 0:
msg += f"Nog {days} nachtjes slapen!\n"
msg += f"Vanaf {open}"
else:
msg += f"**Maar binnenkort is het zo ver:**\n"
msg += f"Vanaf {open.time()}"
msg += f" is de muzak open en kun je naar hartelust stemmen en nomineren op {self.muzak_url}.\n"
elif today > nom and today < vote:
msg += f"**Het nomineren is voorbij,** maar je kunt nog stemmen op alle genomineerde nummers tot {nom}.\n"
msg += f"Stemmen kan hier: {self.muzak_url}\n"
elif today > nom and today > vote and (today - vote) < timedelta(days=8):
msg += "Het nomineren en stemmen is alweer voorbij.\n"
msg += "Je zult nog even geduld moeten hebben tot de lijst klaar is.\n"
elif today > nom and today > vote:
msg += "De lijst is al helemaal klaar. Goed gedaan jongens. Applausje voor jezelf."
else:
if open.date() == today.date():
msg += "**Jawel mensen! Vanaf vandaag mag het stemmen beginnen!**\n"
msg += f"Stemmen en nomineren kan hier: {self.muzak_url}\n"
msg += f"*Er zijn al {data['stemCount']} nummers genomineerd!*\n"
msg += f"Nomineren kan tot {nom}, stemmen kan tot {vote}.\n"
msg += "\nIk hoop dat jullie allemaal je beste nummers insturen!"
await ctx.channel.send(msg)
@commands.command(pass_context=True)
async def pollen(self, ctx):
"Hoe veel last van pollen kun je verwachten?"
poll = 'https://app.everviz.com/embed/apyvera/' # Thanks hooikoortsradar
response = requests.get(poll)
if response:
# one-liner want eet stront
cijfer = float(re.findall(r";\d\.?\d?\n", json.loads([x for x in response.text.splitlines() if "var options =" in x][0].partition("=")[2].strip(";, "))["data"]["csv"])[-1].strip(";\n"))
msg = ""
if cijfer < 3:
msg = f"Nou, het lijkt goed te gaan. Recentelijk gaven mensen hun klachten maar een {cijfer}. Lekker!"
elif cijfer < 6:
msg = f"Het lijkt allemaal mee te vallen. Men gaf hun klachten een {cijfer} deze week. Moet te doen zijn."
elif cijfer < 7.5:
msg = f"Ai. Het gaat lekker met de pollen, maar het ergste moet nog komen of is al geweest. Klachtencijfer van {cijfer}; Sterkte alvast."
else:
msg = f"Balen dit. Klachtencijfer van {cijfer}, dus bekijk het maar. Joe."
await ctx.channel.send(ctx.author.mention + ' ' + msg)
else:
await ctx.channel.send(ctx.author.mention + ' Er lijkt even geen klachtencijfer beschikbaar te zijn. Probeer het later nog eens')