42 Commits

Author SHA1 Message Date
mark c919386fcb muzak
continuous-integration/drone/push Build is failing
2025-08-12 09:56:23 +02:00
mark 9d00b319aa update drone config to 3.13
continuous-integration/drone/push Build is passing
2025-07-13 15:25:09 +02:00
mark 3b9ac14719 fixt hopelijk build issues
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is failing
maar garanties heb je alleen in de hemel. ofzo.
2025-07-13 15:22:42 +02:00
jp d6bc6327a2 iets minder sass in ishetalhdcon
continuous-integration/drone Build is failing
2025-07-13 14:10:43 +02:00
mark 916a45715b adds audioop requirement 2025-04-10 11:03:50 +02:00
mark 3f5fc17833 adds useragent to zaagmans request 2025-04-10 11:03:18 +02:00
mark 29da1d218b fixes muzak date nachtjes slapen
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
hopelijk. wie weet. lmao @ testen
2024-08-02 23:45:10 +02:00
mark 07d22768fe hdcon date fix
continuous-integration/drone/push Build is passing
2024-07-27 10:30:00 +02:00
mark 392e19f4b3 Datetime support and updates for muzak endpoint
continuous-integration/drone/push Build is passing
Now supports ISO date. Hardcoded at UTC+2.
2024-07-26 13:34:02 +02:00
mark 9852f21ef7 Merge branch 'master' of git.hoekveen.net:mark/stroopwafel 2024-02-29 12:27:55 +01:00
mark 41c2dc17d1 Fixes pollen
Welke klapmongool heeft dat parsen in een one-liner gedaan? Man man man.
2024-02-29 12:26:35 +01:00
mark d1a699ee46 vijf minuten NOS timer
continuous-integration/drone/push Build is passing
2023-12-08 20:43:13 +01:00
mark acbe8c6110 adds feedparser to requirements
continuous-integration/drone Build is passing
2023-12-07 09:27:37 +01:00
mark a53598b2c3 Voorkomt nos reposts. fixes #28 2023-12-06 21:51:59 +01:00
mark be6380d6b8 nos 2023-12-03 12:45:08 +01:00
mark 527164a040 nachtjes slapen en url
continuous-integration/drone/push Build is passing
2023-08-16 16:56:40 +02:00
mark f76f7a48c9 Merge pull request 'Nieuw muzak eindpunt.' (#27) from muzak into master
continuous-integration/drone/push Build is passing
Reviewed-on: #27
2023-08-16 16:08:13 +02:00
mark a2319f0fac oeps 2023-08-16 14:54:35 +02:00
mark a4ca645e3e nieuw muzak eindpunt 2023-08-16 14:53:10 +02:00
mark acb9df8616 hdcon2023 bitchesss 2023-08-02 14:25:40 +02:00
mark 1f848861e3 stroop scheldt je niet meer uit als je hem pingt.
want het was eigenlijk al een aardige tijd niet echt heel grappig meer.
2023-07-26 20:02:10 +02:00
jp ecc3ae8853 Merge pull request 'updates crypto module with newer async code' (#25) from crypto-update into master
continuous-integration/drone/push Build is passing
Reviewed-on: #25
2023-06-25 21:24:51 +02:00
mark e904451037 updates crypto module with newer async code
continuous-integration/drone/push Build is passing
2023-06-23 21:56:52 +02:00
mark cde205aad7 pollen klachtencijfer
continuous-integration/drone Build is passing
continuous-integration/drone/push Build is passing
2023-06-13 21:05:22 +02:00
mark 2e91781fad robustness of gpt calls
continuous-integration/drone/push Build is passing
2023-03-19 13:57:51 +01:00
jp 58ce3a8565 Merge pull request '10% kans op nieuwe GPT' (#24) from gpt into master
continuous-integration/drone/push Build is passing
Reviewed-on: #24
2023-03-18 23:42:06 +01:00
mark cf89809c30 fallback to local on error
continuous-integration/drone/push Build is passing
2023-03-18 23:37:42 +01:00
jp 301314bec8 fixes regression for mentions
continuous-integration/drone/push Build is passing
2023-03-18 23:25:17 +01:00
mark a142b299f4 haal channels uit dotenv
continuous-integration/drone/push Build is passing
2023-03-18 23:01:11 +01:00
mark a80ac831f0 fixes regression for reageer
continuous-integration/drone/push Build is passing
2023-03-18 22:48:36 +01:00
mark 4f55dd9dd6 10% kans op nieuwe GPT
continuous-integration/drone/push Build is passing
2023-03-18 17:48:36 +01:00
mark 2baa32055d Merge pull request 'zaagmans' (#23) from zaagmans into master
continuous-integration/drone/push Build is passing
Reviewed-on: #23
2023-03-02 11:56:33 +01:00
mark 08f99b856a whatever gewoon de message van de site overnemen ofzo
continuous-integration/drone/push Build is passing
2023-03-02 11:54:13 +01:00
mark 23e4a30e14 test zaagmans
continuous-integration/drone/push Build is failing
2023-02-16 00:10:51 +01:00
mark 9e2389b9b0 zaagmans functie 2023-02-16 00:10:42 +01:00
mark 2d58948e78 Merge pull request 'Update code om Python 3.11 te ondersteunen' (#22) from python311 into master
continuous-integration/drone/push Build is passing
Reviewed-on: #22
2022-12-28 17:57:24 +01:00
mark 1adc2096a0 fix voor verkeerde url
continuous-integration/drone/push Build is passing
2022-12-27 22:10:17 +01:00
mark 904f1c48ea Fixes untested bug in tegeltje
continuous-integration/drone/push Build is passing
2022-12-18 02:04:58 +01:00
mark f8db215b31 Replaces asyncio coroutines with native async
Replaces @asyncio.coroutine decorator with async
Replaces yield from with await
2022-12-18 02:03:46 +01:00
mark ad2324d53c Fixes random seed required value 2022-12-18 02:03:09 +01:00
mark 1c3318c24c Setup testing environments for python 3.11 2022-12-18 01:59:01 +01:00
jp 9effd126dd Merge pull request 'Testing/CI' (#21) from testing into master
continuous-integration/drone/push Build is passing
Reviewed-on: #21
2022-12-11 16:27:21 +01:00
11 changed files with 362 additions and 247 deletions
+28 -28
View File
@@ -2,34 +2,34 @@ kind: pipeline
name: default name: default
steps: steps:
- name: test - name: test
image: python:3.10 image: python:3.13
environment: environment:
STROOP_DISCORD_TOKEN: STROOP_DISCORD_TOKEN:
from_secret: STROOP_DISCORD_TOKEN from_secret: STROOP_DISCORD_TOKEN
STROOP_TWITTER_KEY: STROOP_TWITTER_KEY:
from_secret: STROOP_TWITTER_KEY from_secret: STROOP_TWITTER_KEY
STROOP_TWITTER_SECRET: STROOP_TWITTER_SECRET:
from_secret: STROOP_TWITTER_SECRET from_secret: STROOP_TWITTER_SECRET
STROOP_REDDIT_ID: STROOP_REDDIT_ID:
from_secret: STROOP_REDDIT_ID from_secret: STROOP_REDDIT_ID
STROOP_REDDIT_SECRET: STROOP_REDDIT_SECRET:
from_secret: STROOP_REDDIT_SECRET from_secret: STROOP_REDDIT_SECRET
STROOP_WEERLIVE: STROOP_WEERLIVE:
from_secret: STROOP_WEERLIVE from_secret: STROOP_WEERLIVE
STROOP_CALDAV_HOST: STROOP_CALDAV_HOST:
from_secret: STROOP_CALDAV_HOST from_secret: STROOP_CALDAV_HOST
STROOP_CALDAV_CAL: STROOP_CALDAV_CAL:
from_secret: STROOP_CALDAV_CAL from_secret: STROOP_CALDAV_CAL
STROOP_IMGFLIP_PASSWORD: STROOP_IMGFLIP_PASSWORD:
from_secret: STROOP_IMGFLIP_PASSWORD from_secret: STROOP_IMGFLIP_PASSWORD
STROOP_RESET_PASSWORD: STROOP_RESET_PASSWORD:
from_secret: STROOP_RESET_PASSWORD from_secret: STROOP_RESET_PASSWORD
STROOP_CHANNEL_SHITPOST: STROOP_CHANNEL_SHITPOST:
from_secret: STROOP_CHANNEL_SHITPOST from_secret: STROOP_CHANNEL_SHITPOST
commands: commands:
- pip install -r requirements.txt - pip install -r requirements.txt
- python -m unittest tests - python -m unittest tests
trigger: trigger:
event: event:
exclude: exclude:
+120 -46
View File
@@ -1,8 +1,12 @@
import asyncio
import discord import discord
from discord.ext import commands from discord.ext import commands
import numpy as np import numpy as np
import random import random
import requests
import asyncio
import os
import feedparser
import json
from datetime import datetime from datetime import datetime
import re import re
@@ -16,6 +20,8 @@ class Chatbot(commands.Cog):
self.START_OF_MESSAGE = "<SOM>" self.START_OF_MESSAGE = "<SOM>"
self.pmLast = datetime(2018, 1, 1, 1, 1, 1) self.pmLast = datetime(2018, 1, 1, 1, 1, 1)
self.pmCount = 0 self.pmCount = 0
self.nosLast = datetime(2018, 1, 1, 1, 1, 1)
self.nosPosts = []
try: try:
np.load('markov_dict.npy', allow_pickle=True) np.load('markov_dict.npy', allow_pickle=True)
except FileNotFoundError: except FileNotFoundError:
@@ -28,56 +34,52 @@ class Chatbot(commands.Cog):
#Do stuff when a message comes in: #Do stuff when a message comes in:
@self.bot.event @self.bot.event
@asyncio.coroutine async def on_message(message):
def on_message(message):
if message.author.bot: if message.author.bot:
return #ignore your own messages, Stroop return #ignore your own messages, Stroop
if message.content.strip() == "" or message.content.strip()[0] != '!': #don't respond to a command if message.content.strip() == "" or message.content.strip()[0] != '!': #don't respond to a command
if message.content.lower() == "nihao": if message.content.lower() == "nihao":
yield from message.channel.send("kankerlauw") await message.channel.send("kankerlauw")
return return
if message.content.lower() == "lol": if message.content.lower() == "lol":
yield from message.channel.send("laffing aut laut") await message.channel.send("laffing aut laut")
return return
if self.bot.user.mentioned_in(message) and "@everyone" not in message.content: if self.bot.user.mentioned_in(message) and "@everyone" not in message.content:
MENTIONED_RESPONSES = [ MENTIONED_RESPONSES = [
"Hoi", "Hoi",
"hmm?", "hmm?",
"JA WAT?", "JA WAT?",
"Godve...Godver-fucking-domme! Wie de fuck heeft me zojuist gepingt? Wie de fuck heeft de ballen om mij te pingen?! Als ik jou vind hè, ik ram je helemaal de tyfus in. Ik ga je kapot maken. Welke breincel in jouw hoofd dacht dat het grappig was om mij te pingen? Noem jij dat 'grappig'? Ik zal je godverdomme iets laten zien wat grappig is, ja. Ik neuk je moeder zo hard dat ze van me gaat houden, godverdomme. Dat krijg je er van als je me pingt, vuile teringleijer. Jouw soort mag wat mij betreft uitsterven. Weet je, ik ga je helemaal geen aandacht meer geven. Je mag de tering krijgen, en daar blijft het bij. Kutjong.", self.getResponseForMessageLocal("stroopwafel")
self.getResponseForMessage("stroopwafel")
] ]
try: try:
MENTIONED_RESPONSES.append("Wat mot je, " + random.choice(self.bot.get_cog("Shitpost").insult) + "?") MENTIONED_RESPONSES.append("Wat mot je, " + random.choice(self.bot.get_cog("Shitpost").insult) + "?")
except: except:
print("ERROR! - Could not import insults") print("ERROR! - Could not import insults")
yield from message.channel.send(random.choice(MENTIONED_RESPONSES)) await message.channel.send(random.choice(MENTIONED_RESPONSES))
return return
if re.match("^[0-9]+([,.]?[0-9]+)*?$", message.content.strip()) and random.randint(0,9) == 0: if re.match("^[0-9]+([,.]?[0-9]+)*?$", message.content.strip()) and random.randint(0,9) == 0:
yield from message.channel.send("That's Numberwang!") # https://www.youtube.com/watch?v=0obMRztklqU await message.channel.send("That's Numberwang!") # https://www.youtube.com/watch?v=0obMRztklqU
return return
if "DMChannel" in type(message.channel).__name__: #respond to messages in PM channels if "DMChannel" in type(message.channel).__name__: #respond to messages in PM channels
if (self.isAllowedToLearnFromPm(message)): #avoid spam-learning if (self.isAllowedToLearnFromPm(message)): #avoid spam-learning
self.pmCount += 1 self.pmCount += 1
self.pmLast = datetime.now() self.pmLast = datetime.now()
yield from self.learnFromMessagesInChannel(message.channel, 1) await self.learnFromMessagesInChannel(message.channel, 1)
yield from self.respondToMessage(message) await self.respondToMessage(message)
elif message.channel.id == self.bot.hdChannels["belangrijk"]: #don't abuse the "belangrijk" channel
pass
else: else:
a = random.randint(0,999) # probablity a = random.randint(0,999) # probablity
if a < 40: if a < 40:
yield from self.learnFromMessagesInChannel(message.channel, 10) await self.learnFromMessagesInChannel(message.channel, 10)
if "stroop" in message.content.lower(): if "stroop" in message.content.lower():
a = a / 20 # significantly increase the chance of responding if somebody talks about him. a = a / 20 # significantly increase the chance of responding if somebody talks about him.
if message.channel.id == self.bot.hdChannels["shitpost"] and a < 40: #shitpost channel if message.channel.id == os.getenv('STROOP_CHANNEL_SHITPOST') and a < 40: #shitpost channel
yield from self.respondToMessage(message) await self.respondToMessage(message)
elif a < 10: #all other channels elif a < 10: #all other channels
yield from self.respondToMessage(message) await self.respondToMessage(message)
#process commands: #process commands:
yield from self.bot.process_commands(message) await self.bot.process_commands(message)
def __check(self, ctx): def __check(self, ctx):
return True return True
@@ -183,22 +185,20 @@ class Chatbot(commands.Cog):
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def trainmarkovchat(self, ctx, channelId=409751773595566081, nrOfMessages=50):
def trainmarkovchat(self, ctx, channelId=409751773595566081, nrOfMessages=50):
"""Train that chain, jermaine """Train that chain, jermaine
param channelId: use this channel to train param channelId: use this channel to train
param nrOfMessages: use the x most recent messages param nrOfMessages: use the x most recent messages
""" """
channel=self.bot.get_channel(channelId) channel=self.bot.get_channel(channelId)
yield from self.learnFromMessagesInChannel(channel, nrOfMessages) await self.learnFromMessagesInChannel(channel, nrOfMessages)
yield from ctx.channel.send("Ik heb weer wat nieuwe woordjes geleerd. :slight_smile:") await ctx.channel.send("Ik heb weer wat nieuwe woordjes geleerd. :slight_smile:")
#Learns from an x number of messages from a certain channel #Learns from an x number of messages from a certain channel
@asyncio.coroutine async def learnFromMessagesInChannel(self, channel, nrOfMessages):
def learnFromMessagesInChannel(self, channel, nrOfMessages):
#Open current chain: #Open current chain:
wordDict = np.load('markov_dict.npy', allow_pickle=True).item() wordDict = np.load('markov_dict.npy', allow_pickle=True).item()
@@ -207,7 +207,7 @@ class Chatbot(commands.Cog):
messageIterator = channel.history(limit=nrOfMessages, before=None, after=None, oldest_first=False, around=None) messageIterator = channel.history(limit=nrOfMessages, before=None, after=None, oldest_first=False, around=None)
allMessages = [] allMessages = []
for i in range(nrOfMessages): for i in range(nrOfMessages):
msg = yield from anext(messageIterator) msg = await anext(messageIterator)
allMessages.append(msg) allMessages.append(msg)
i = 0 i = 0
@@ -225,6 +225,11 @@ class Chatbot(commands.Cog):
pass # Dit is een commando. Negeer. pass # Dit is een commando. Negeer.
elif "```" in messageContent: elif "```" in messageContent:
pass # Daar zit een codeblok in. Negeer. pass # Daar zit een codeblok in. Negeer.
elif "http" in messageContent and "nos" in messageContent:
# NOS link
nosIds = re.findall(r'\d+', messageContent)
if nosIds:
self.nosPosts.append(nosIds[0])
elif messageContent[0:7] == "http://" or messageContent[0:8] == "https://": elif messageContent[0:7] == "http://" or messageContent[0:8] == "https://":
pass # Een link. Negeer. TODO: post af en toe een random link die geen repost is pass # Een link. Negeer. TODO: post af en toe een random link die geen repost is
else: else:
@@ -248,18 +253,17 @@ class Chatbot(commands.Cog):
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def reageer(self, ctx):
def reageer(self, ctx):
"""Laat Stroop ergens op reageren. """Laat Stroop ergens op reageren.
Stroop leert van onze gesprekken. Hij kan zich nu voordoen als een van ons. Soort van. Stroop leert van onze gesprekken. Hij kan zich nu voordoen als een van ons. Soort van.
""" """
#Get previous message to respond to #Get previous message to respond to
messageIterator = ctx.channel.history(limit=3, before=None, after=None, oldest_first=False, around=None) messageIterator = ctx.channel.history(limit=3, before=None, after=None, oldest_first=False, around=None)
messageToRespondTo = yield from anext(messageIterator) #this will be the !reageer command. skip messageToRespondTo = await anext(messageIterator) #this will be the !reageer command. skip
messageToRespondTo = yield from anext(messageIterator) messageToRespondTo = await anext(messageIterator)
if messageToRespondTo.content.strip()[0] == '!' or messageToRespondTo.author.bot: #another chance if messageToRespondTo.content.strip()[0] == '!' or messageToRespondTo.author.bot: #another chance
messageToRespondTo = yield from anext(messageIterator) #but it's not a huge problem if he responds to himself messageToRespondTo = await anext(messageIterator) #but it's not a huge problem if he responds to himself
if messageToRespondTo.content.strip()[0] == '!': if messageToRespondTo.content.strip()[0] == '!':
wordsToRespondTo = [] wordsToRespondTo = []
else: else:
@@ -268,12 +272,12 @@ class Chatbot(commands.Cog):
#Delete command #Delete command
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
pass pass
response = self.getResponseForMessage(wordsToRespondTo) response = await self.getResponseForMessage(wordsToRespondTo)
yield from ctx.channel.send(response) await ctx.channel.send(response)
# Calculate probabilities and pick a next word from a word pair dict: # Calculate probabilities and pick a next word from a word pair dict:
# https://stackoverflow.com/questions/835092/python-dictionary-are-keys-and-values-always-the-same-order # https://stackoverflow.com/questions/835092/python-dictionary-are-keys-and-values-always-the-same-order
@@ -285,15 +289,41 @@ class Chatbot(commands.Cog):
#Respond to a message. #Respond to a message.
#Assumes the message isn't a command #Assumes the message isn't a command
@asyncio.coroutine async def respondToMessage(self, message):
def respondToMessage(self, message):
wordsToRespondTo = message.content.strip().split() wordsToRespondTo = message.content.strip().split()
response = self.getResponseForMessage(wordsToRespondTo) response = await self.getResponseForMessage(wordsToRespondTo)
yield from message.channel.send(response) await message.channel.send(response)
#Gets a response #Gets a response
def getResponseForMessage(self, wordsToRespondTo): async def getResponseForMessage(self, wordsToRespondTo, gptChance=0.1):
if random.random() < 1-gptChance:
try:
# GPT request moet echt even in een non-blocking executortje, anders loopt de hele boel vast
response = await self.bot.loop.run_in_executor(None,self.getResponseForMessageOnline, wordsToRespondTo)
if response:
return response # Anders door naar local
except:
pass # Door naar local call
return self.getResponseForMessageLocal(wordsToRespondTo)
def translateTo(self, language, text):
req = requests.post('http://gpt.hoekveen.net/translate', json={"text": text, "source_lang": "auto", "target_lang": language})
print(req.json())
return req.json()["translations"][0]["text"]
def getResponseForMessageOnline(self, wordsToRespondTo):
prompt = " ".join(wordsToRespondTo)
if not prompt:
prompt = self.getResponseForMessageLocal([])
text = self.translateTo("en", prompt)
req = requests.post('http://gpt.hoekveen.net/complete', json={"prompt": text, "max_tokens": 80})
print(req.json())
respons = req.json()["text"]
respons = respons[0:respons.rfind(".")+1] # Alles weg na de laatste punt
return self.translateTo("nl", respons)
def getResponseForMessageLocal(self, wordsToRespondTo):
MAX_N_WORDS = 100 #Don't use more words than this MAX_N_WORDS = 100 #Don't use more words than this
@@ -351,7 +381,7 @@ class Chatbot(commands.Cog):
chain[n] = "@jemoeder" chain[n] = "@jemoeder"
#print(' '.join(chain)) #print(' '.join(chain))
#yield from ctx.channel.send(' '.join(chain)) #await ctx.channel.send(' '.join(chain))
return ' '.join(chain) return ' '.join(chain)
@@ -424,22 +454,20 @@ class Chatbot(commands.Cog):
return ' '.join(chain) return ' '.join(chain)
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def haiku(self, ctx):
def haiku(self, ctx):
"""Stroop is een poëet. Laat hem een Haiku maken. """Stroop is een poëet. Laat hem een Haiku maken.
""" """
response = self.getHaiku() response = self.getHaiku()
yield from ctx.channel.send(response) await ctx.channel.send(response)
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def uitspraak(self, ctx, numPosts=1):
def uitspraak(self, ctx, numPosts=1):
"""Random uitspraak uit de hall of fame. """Random uitspraak uit de hall of fame.
Optioneel kan je een nummer meegeven voor meerdere uitspraken Optioneel kan je een nummer meegeven voor meerdere uitspraken
0 voor alle uitspraken.""" 0 voor alle uitspraken."""
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
pass pass
try: try:
@@ -451,6 +479,52 @@ class Chatbot(commands.Cog):
numPosts = len(uitspraken) numPosts = len(uitspraken)
for i in range(numPosts): for i in range(numPosts):
message += uitspraken[i] message += uitspraken[i]
yield from ctx.channel.send(message) await ctx.channel.send(message)
except: except:
pass pass
@commands.command(pass_context=True)
async def nos(self, ctx, categorie=None):
"""Een leuk NOS artikel. Hoef je het zelf niet meer op te zoeken.
Mag optioneel een categorie aangeven:
algemeen binnenland buitenland politiek economie opmerkelijk koningshuis cultuurenmedia tech """
try:
await ctx.message.delete()
except:
pass
diff = datetime.now() - self.nosLast
self.nosLast = datetime.now()
if diff.days <= 0 and diff.seconds <= 300:
await ctx.channel.send(f"Kappen nou {ctx.author.mention}")
return
opties = [
"algemeen",
"binnenland",
"buitenland",
"politiek",
"economie",
"opmerkelijk",
"koningshuis",
"cultuurenmedia",
"tech"
]
artikel = None
tries = 0
while artikel is None:
tries += 1
if not categorie:
categorie = random.choice(opties)
categorie = categorie.lower()
if categorie in opties:
artikelen = feedparser.parse("https://feeds.nos.nl/nosnieuws" + categorie).entries
artikel = random.choice(artikelen)
#print(json.dumps(artikel, indent=4))
nosId = re.findall(r'\d+', artikel.id)[0]
if nosId not in self.nosPosts:
self.nosPosts.append(nosId)
response = await self.getResponseForMessage(artikel.title, gptChance=0.5)
elif tries > 100:
print("Oneindige loop voorkomen. Damn.")
else:
artikel = None
await ctx.channel.send(response + '\n' + artikel.link)
+8 -10
View File
@@ -197,8 +197,7 @@ class Cryptocoin(commands.Cog):
#user functions below #user functions below
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def coinprice(self, ctx, coinId: str, currencyId: str="USD"):
def coinprice(self, ctx, coinId: str, currencyId: str="USD"):
"""Geeft de huidige prijs van de desbetreffende crypto currency """Geeft de huidige prijs van de desbetreffende crypto currency
Bijv: Bijv:
!coinprice BTC !coinprice BTC
@@ -211,20 +210,19 @@ class Cryptocoin(commands.Cog):
currencyId = currencyId.upper() currencyId = currencyId.upper()
if (currencyId not in allowedCurrencies): if (currencyId not in allowedCurrencies):
yield from ctx.channel.send("Valuta " + currencyId + " ken ik niet. :disappointed: ") await ctx.channel.send("Valuta " + currencyId + " ken ik niet. :disappointed: ")
return return
price = self.getCoinPrice(coinId, currencyId) price = self.getCoinPrice(coinId, currencyId)
if (price == -1): if (price == -1):
yield from ctx.channel.send("Die cryptocoin ken ik niet... :frowning2: ") await ctx.channel.send("Die cryptocoin ken ik niet... :frowning2: ")
return return
yield from ctx.channel.send(coinId + " is nu " + str(price) + " " + currencyId + " waard.") await ctx.channel.send(coinId + " is nu " + str(price) + " " + currencyId + " waard.")
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def coinadvice(self, ctx, coinId: str=""):
def coinadvice(self, ctx, coinId: str=""):
"""Voor al uw adviezen in monopolygeld """Voor al uw adviezen in monopolygeld
Vraag Stroop's mening over een specifieke coin: Vraag Stroop's mening over een specifieke coin:
!coinadvice NLG !coinadvice NLG
@@ -237,7 +235,7 @@ class Cryptocoin(commands.Cog):
#Geen specieke coin? Doe random. #Geen specieke coin? Doe random.
if(coinId == ""): if(coinId == ""):
yield from ctx.channel.send( self.getRandomCoinAdvice() ) await ctx.channel.send( self.getRandomCoinAdvice() )
return return
coinId = coinId.upper() coinId = coinId.upper()
@@ -245,7 +243,7 @@ class Cryptocoin(commands.Cog):
growPercentage, coinStability, dummy = self.analyseCoin(coinId) growPercentage, coinStability, dummy = self.analyseCoin(coinId)
if (growPercentage == 0 and coinStability == 1.0): #aanname. anders moet je weer een extra call doen. if (growPercentage == 0 and coinStability == 1.0): #aanname. anders moet je weer een extra call doen.
yield from ctx.channel.send("Die cryptocoin ken ik niet... :frowning2: ") await ctx.channel.send("Die cryptocoin ken ik niet... :frowning2: ")
return return
time.sleep(0.1) #don't overload the API time.sleep(0.1) #don't overload the API
@@ -302,5 +300,5 @@ class Cryptocoin(commands.Cog):
if (coinStability < 0.3): if (coinStability < 0.3):
message += "Denk ik?" message += "Denk ik?"
yield from ctx.channel.send(message) await ctx.channel.send(message)
+1 -1
View File
@@ -1,4 +1,4 @@
FROM python:3.10 FROM python:3.13
WORKDIR /opt/stroopwafel WORKDIR /opt/stroopwafel
+60 -29
View File
@@ -1,4 +1,3 @@
import asyncio
import discord import discord
import os import os
import praw import praw
@@ -6,6 +5,7 @@ import random
import re import re
import json, requests import json, requests
import warnings import warnings
from datetime import timedelta, datetime, timezone
from discord.ext import commands from discord.ext import commands
class General(commands.Cog): class General(commands.Cog):
@@ -13,7 +13,7 @@ class General(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self.muzak_url = 'https://hdcon-muzak.herokuapp.com' self.muzak_url = 'http://muzak.hoekveen.net:8001'
self.r = praw.Reddit( self.r = praw.Reddit(
user_agent='StroopwafelBot', user_agent='StroopwafelBot',
client_secret=os.getenv("STROOP_REDDIT_SECRET"), client_secret=os.getenv("STROOP_REDDIT_SECRET"),
@@ -23,25 +23,24 @@ class General(commands.Cog):
warnings.simplefilter("ignore") warnings.simplefilter("ignore")
def get_emoji_embed(self, tag: str): def get_emoji_embed(self, tag: str):
emoji = re.search(".*\<\:([A-z]*)\:(\d*)\>.*", tag) emoji = re.search(r'.*\<\:([A-z]*)\:(\d*)\>.*', tag)
embed = discord.Embed(title=emoji.group(1), type='photo') embed = discord.Embed(title=emoji.group(1), type='photo')
hugemoji = 'https://cdn.discordapp.com/emojis/' + emoji.group(2) + '.png' hugemoji = 'https://cdn.discordapp.com/emojis/' + emoji.group(2) + '.png'
embed.set_image(url=hugemoji) embed.set_image(url=hugemoji)
return embed return embed
@commands.command() @commands.command()
@asyncio.coroutine async def huge(self, ctx, *, arg):
def huge(self, ctx, *, arg):
"""YUGE. Geeft een grote versie van de gegeven emoji terug. Werkt alleen voor custom emoji. """YUGE. Geeft een grote versie van de gegeven emoji terug. Werkt alleen voor custom emoji.
Bijvoorbeeld: Bijvoorbeeld:
!huge :ancilla: !huge :ancilla:
""" """
em = self.get_emoji_embed(arg) em = self.get_emoji_embed(arg)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
def get_aww_post(self): def get_aww_post(self):
raww = self.r.subreddit('aww+catloaf+tuckedinkitties+babyelephantgifs+babybigcatgifs+blep+holdmynip+gingerkitty+cathighfive+catsstandingup+catsareassholes+eyebleach') raww = self.r.subreddit('aww+catloaf+tuckedinkitties+babyelephantgifs+babybigcatgifs+blep+holdmynip+gingerkitty+cathighfive+catsstandingup+catsareassholes+eyebleach')
@@ -49,32 +48,36 @@ class General(commands.Cog):
return random.choice(listing) return random.choice(listing)
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def aww(self, ctx):
def aww(self, ctx):
""" iets schattigs... """ """ iets schattigs... """
post = self.get_aww_post() post = self.get_aww_post()
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention + ' ' + post.url) await ctx.channel.send(ctx.author.mention + ' ' + post.url)
def get_kopieerpasta(self): def get_kopieerpasta(self):
rkopieerpasta = self.r.subreddit('kopieerpasta') rkopieerpasta = self.r.subreddit('kopieerpasta')
post = rkopieerpasta.random() try:
post = rkopieerpasta.random()
# Subreddits kunnen de random functie uitzetten, dus dit is de fallback: # Subreddits kunnen de random functie uitzetten, dus dit is de fallback:
if post == None: if post == None:
listing = list(rkopieerpasta.top('month', limit=250)) listing = list(rkopieerpasta.top(time_filter='month', limit=250))
post = random.choice(listing) post = random.choice(listing)
return post return post
except:
return None
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def kopieerpasta(self, ctx):
def kopieerpasta(self, ctx):
"""Een willekeurige shitpost""" """Een willekeurige shitpost"""
post = self.get_kopieerpasta() post = self.get_kopieerpasta()
if not post:
await ctx.channel.send("Geen kopieerpasta voor jou vandaag.")
return
print(post.url) print(post.url)
ATTEMPTS = 10 ATTEMPTS = 10
a = 0 a = 0
@@ -83,23 +86,51 @@ class General(commands.Cog):
print(post.url) print(post.url)
a += 1 a += 1
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if len(post.selftext + post.title) < 1990: if len(post.selftext + post.title) < 1990:
yield from ctx.channel.send('**'+post.title+'**```'+post.selftext+'```') await ctx.channel.send('**'+post.title+'**```'+post.selftext+'```')
else: else:
yield from ctx.channel.send("Geen kopieerpasta voor jou vandaag.") await ctx.channel.send("Geen kopieerpasta voor jou vandaag.")
def get_playlist_json(self): def get_playlist_json(self):
return requests.get(self.muzak_url + '/stroopwafel') return requests.get(self.muzak_url + '/stroopwafel')
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def muzak(self, ctx):
def playlist(self, ctx): """HD muzak playlist"""
"""HDcon2021 playlist"""
data = json.loads(self.get_playlist_json().content) data = json.loads(self.get_playlist_json().content)
msg = 'Stemmen en nomineren kan hier: {}\n'.format(self.muzak_url) msg = ""
msg += '*Er zijn al {} nummers genomineerd*\n'.format(data['stemCount']) open = datetime.fromisoformat(data['openDate'])
yield from ctx.channel.send(msg) nom = datetime.fromisoformat(data['deadlineNominations'])
vote = datetime.fromisoformat(data['deadlineVoting'])
today = datetime.now(tz=timezone(timedelta(hours=2)))
if open > today:
msg = "Muwat?"
else:
msg += f"Stemmen en nomineren kan hier: https://muzak.hoekveen.net/ \n"
msg += f"*Er zijn al {data['stemCount']} nummers genomineerd!*\n"
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')
+22 -27
View File
@@ -1,4 +1,3 @@
import asyncio
import discord import discord
from discord.ext import commands from discord.ext import commands
from pprint import pprint from pprint import pprint
@@ -25,8 +24,7 @@ class Points(commands.Cog):
return True return True
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def geefpunten(self, ctx, user, points: int):
def geefpunten(self, ctx, user, points: int):
"""Wees eens lief. Geef iemand wat punten. """Wees eens lief. Geef iemand wat punten.
Bijvoorbeeld: Bijvoorbeeld:
!geefpunten @ikbenjp 42 !geefpunten @ikbenjp 42
@@ -37,29 +35,29 @@ class Points(commands.Cog):
self.reloadPointsCount() self.reloadPointsCount()
if points == 0: if points == 0:
yield from ctx.channel.send("0 punten? Gul hoor.") await ctx.channel.send("0 punten? Gul hoor.")
return return
if points < 0: if points < 0:
yield from self.sendErrorDm(ctx, "Daar hebben we de !neempunten functie voor. Voor meer info typ: ```!help neempunten```") await self.sendErrorDm(ctx, "Daar hebben we de !neempunten functie voor. Voor meer info typ: ```!help neempunten```")
return return
if user[0:2] != "<@": if user[0:2] != "<@":
yield from self.sendErrorDm(ctx, "Je moet iemand taggen om punten te geven. :)") await self.sendErrorDm(ctx, "Je moet iemand taggen om punten te geven. :)")
#TODO ook userId oid toestaan? #TODO ook userId oid toestaan?
return return
userObj = ctx.message.mentions[0] userObj = ctx.message.mentions[0]
if userObj.id == ctx.author.id: if userObj.id == ctx.author.id:
yield from ctx.channel.send("Nee. Je mag niet jezelf punten geven.") await ctx.channel.send("Nee. Je mag niet jezelf punten geven.")
time.sleep(0.6) time.sleep(0.6)
yield from ctx.channel.send("Gekkie.") await ctx.channel.send("Gekkie.")
return return
if not self.isUserOnList(userObj): if not self.isUserOnList(userObj):
yield from ctx.channel.send("Nee. Die krijgt geen punten.") await ctx.channel.send("Nee. Die krijgt geen punten.")
return return
if self.getUserBalance(ctx.author) < points: if self.getUserBalance(ctx.author) < points:
yield from ctx.channel.send("Daar heb jij niet genoeg puntjes voor. :bell:") await ctx.channel.send("Daar heb jij niet genoeg puntjes voor. :bell:")
return return
# Execute the transaction: # Execute the transaction:
@@ -68,7 +66,7 @@ class Points(commands.Cog):
self.savePointsCount() self.savePointsCount()
message = self.getMessageForAwardingPoints(ctx.author.name, userObj.name, points) message = self.getMessageForAwardingPoints(ctx.author.name, userObj.name, points)
yield from ctx.channel.send(message) await ctx.channel.send(message)
def execute_geefpunten(self, giverId, recieverId, points): def execute_geefpunten(self, giverId, recieverId, points):
# First, try to give away (at most 10) bankpoints # First, try to give away (at most 10) bankpoints
@@ -86,8 +84,7 @@ class Points(commands.Cog):
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def neempunten(self, ctx, user, points: int):
def neempunten(self, ctx, user, points: int):
"""Tijd om iemand the shamen. Haal wat punten weg. """Tijd om iemand the shamen. Haal wat punten weg.
Bijvoorbeeld: Bijvoorbeeld:
!neempunten @mark 5 !neempunten @mark 5
@@ -98,27 +95,27 @@ class Points(commands.Cog):
self.reloadPointsCount() self.reloadPointsCount()
if points < 1: if points < 1:
yield from ctx.channel.send("Volgens mij snap je het niet.") await ctx.channel.send("Volgens mij snap je het niet.")
return return
if points > 10: if points > 10:
yield from self.sendErrorDm(ctx, "Je mag niet meer dan 10 punten afnemen.") await self.sendErrorDm(ctx, "Je mag niet meer dan 10 punten afnemen.")
return return
remainingToTakeAway = self.getUsersRemainingPointsToTakeToday(ctx.author.id) remainingToTakeAway = self.getUsersRemainingPointsToTakeToday(ctx.author.id)
if points > remainingToTakeAway: # The limit per day is 10 if points > remainingToTakeAway: # The limit per day is 10
yield from self.sendErrorDm(ctx, "Je mag vandaag nog maar " + str(remainingToTakeAway) + " punten wegnemen.") await self.sendErrorDm(ctx, "Je mag vandaag nog maar " + str(remainingToTakeAway) + " punten wegnemen.")
return return
if user[0:2] != "<@": if user[0:2] != "<@":
yield from self.sendErrorDm(ctx, "Je moet iemand taggen. :)") await self.sendErrorDm(ctx, "Je moet iemand taggen. :)")
return return
userObj = ctx.message.mentions[0] userObj = ctx.message.mentions[0]
if not self.isUserOnList(userObj): if not self.isUserOnList(userObj):
yield from ctx.channel.send("Nee.") await ctx.channel.send("Nee.")
return return
if self.getUserBalance(userObj) < points: if self.getUserBalance(userObj) < points:
yield from ctx.channel.send(userObj.name + " mag niet rood staan.") await ctx.channel.send(userObj.name + " mag niet rood staan.")
return return
# Execute the transaction: # Execute the transaction:
@@ -127,7 +124,7 @@ class Points(commands.Cog):
self.savePointsCount() self.savePointsCount()
message = self.getMessageForTakingPoints(userObj.name, ctx.author.name, points) message = self.getMessageForTakingPoints(userObj.name, ctx.author.name, points)
yield from ctx.channel.send(message) await ctx.channel.send(message)
def execute_neempunten(self, takerId, victimId, points): def execute_neempunten(self, takerId, victimId, points):
self.increaseUsersPointTakenOnDate(takerId, points) self.increaseUsersPointTakenOnDate(takerId, points)
@@ -135,8 +132,7 @@ class Points(commands.Cog):
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def puntentelling(self, ctx):
def puntentelling(self, ctx):
"""Hoeveel punten heeft iedereen? """Hoeveel punten heeft iedereen?
""" """
@@ -148,18 +144,17 @@ class Points(commands.Cog):
if user[0] != self.BANK_ID: if user[0] != self.BANK_ID:
message += str(user[1]["points"]).rjust(4) + " " + user[1]["name"] + "\n" message += str(user[1]["points"]).rjust(4) + " " + user[1]["name"] + "\n"
message += str(self.pointsCount[self.BANK_ID]["points"]).rjust(4) + " " + self.pointsCount[self.BANK_ID]["name"] + "```" message += str(self.pointsCount[self.BANK_ID]["points"]).rjust(4) + " " + self.pointsCount[self.BANK_ID]["name"] + "```"
yield from ctx.channel.send(message) await ctx.channel.send(message)
# No public shaming. Send somebody a direct correction message. # No public shaming. Send somebody a direct correction message.
@asyncio.coroutine async def sendErrorDm(self, ctx, message):
def sendErrorDm(self, ctx, message):
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
try: try:
yield from ctx.message.author.send(message) await ctx.message.author.send(message)
except: except:
print("No permission to send DM") print("No permission to send DM")
+108 -103
View File
@@ -1,4 +1,3 @@
import asyncio
import discord import discord
from discord.ext import commands from discord.ext import commands
from urllib import request from urllib import request
@@ -17,6 +16,7 @@ class Shitpost(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self.hdConImpatientEvents = [] self.hdConImpatientEvents = []
self.userAgent = 'Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0'
try: try:
with open('black.txt') as zwart: with open('black.txt') as zwart:
self.zwarte_lijst = [line.rstrip('\n') for line in zwart] self.zwarte_lijst = [line.rstrip('\n') for line in zwart]
@@ -41,34 +41,36 @@ class Shitpost(commands.Cog):
'zout': '116231806' 'zout': '116231806'
} }
warnings.simplefilter("ignore") warnings.simplefilter("ignore")
datestring = os.getenv('STROOP_HDCON_DATE') or None
self.HdConDate = None
if datestring:
self.HdConDate = datetime.fromisoformat(datestring)
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def ishetalhdcon(self, ctx):
def ishetalhdcon(self, ctx): """Hoe lang nog tot Hoestende Draken Con dit jaar? Of is het pas volgend jaar?
"""Hoe lang nog tot Hoestende Draken Con 2022?
Gebruik: !ishetalhdcon Gebruik: !ishetalhdcon
""" """
Now = datetime.now() Now = datetime.now()
HdConDate = datetime(2022, 10, 14, 4, 0, 1) #om 4 uur lig je toch wel al op bed? Message = f"Geen HD Con! >:|"
Distance = HdConDate - Now if self.HdConDate:
Message = Message = "HD Con 2022 is al voorbij. HD Con 2023 zal in 2023 plaatsvinden." Message = f"HD Con {self.HdConDate.year} "
if Distance.days == -1: Distance = self.HdConDate - Now
Message = "HD Con 2022 begint vandaag! HYPE!" if Distance.days == -1:
elif Distance.days < 0 and Distance.days > -4: Message += "begint vandaag! HYPE!"
Message = "HD Con 2022 is nu bezig!!" elif Distance.days < 0 and Distance.days > -4:
elif Distance.days == -4: Message += "is nu bezig!!"
Message = "HD Con 2022 is vandaag alweer afgelopen... F" elif Distance.days == -4:
Message += "is vandaag afgelopen :(\nWe hebben gelachen, we hebben gehuild. Het was gezellig. Volgend jaar bij mij."
else: # distance < -4
Message += f"is geweest. HD Con {self.HdConDate.year+1} zal komen."
if Distance.days < 0: if Distance.days < 0:
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message)) await ctx.channel.send(ctx.author.mention + ' ' + str(Message))
return return
NachtjesSlapen = Distance.days + 1 NachtjesSlapen = Distance.days + 1
if NachtjesSlapen == 1: Message = f"Nog {NachtjesSlapen} nachtje{'s' if NachtjesSlapen > 1 else ''} slapen..."
Message = "Nog " + str(NachtjesSlapen) + " nachtje slapen..."
else:
Message = "Nog " + str(NachtjesSlapen) + " nachtjes slapen..."
#Hou bij hoe vaak dit wordt gevraagd: #Hou bij hoe vaak dit wordt gevraagd:
eventsMinutesAgo = 0; eventsMinutesAgo = 0;
@@ -90,23 +92,23 @@ class Shitpost(commands.Cog):
return #fuck it. return #fuck it.
if eventsMinutesAgoSameAuthor > 0: if eventsMinutesAgoSameAuthor > 0:
if eventsMinutesAgoSameAuthor > 2: if eventsMinutesAgoSameAuthor > 2:
yield from ctx.channel.send("...") await ctx.channel.send("...")
return return
yield from ctx.channel.send("Dat vroeg je net ook al, " + ctx.author.mention + "!") await ctx.channel.send("Dat vroeg je net ook al, " + ctx.author.mention + "!")
return return
#Hoe vaker er wordt gevraagd, hoe ongeduldiger de antwoorden: #Hoe vaker er wordt gevraagd, hoe ongeduldiger de antwoorden:
if not "DMChannel" in type(ctx.channel).__name__: #ignore personal chats if not "DMChannel" in type(ctx.channel).__name__: #ignore personal chats
impatientFactor = 10 + eventsMinutesAgo*25 + eventsLastDays*10; impatientFactor = 10 + eventsMinutesAgo*25 + min(10, eventsLastDays)*2;
impatientFactor *= random.random() impatientFactor *= random.random()
if impatientFactor > 100: if impatientFactor > 100:
yield from ctx.channel.send("Nee!") await ctx.channel.send("Nee!")
return return
elif impatientFactor > 15 and eventsMinutesAgo > 0: elif impatientFactor > 15 and eventsMinutesAgo > 0:
Message = "Dat hebben jullie net gevraagd." Message = "Dat hebben jullie net gevraagd."
elif impatientFactor > 9: elif impatientFactor > 12:
Message = "Nee." Message = "Nee."
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message)) await ctx.channel.send(ctx.author.mention + ' ' + str(Message))
def zalgofy(self, sentence, factor = 4): def zalgofy(self, sentence, factor = 4):
random.seed(datetime.now().timestamp()) random.seed(datetime.now().timestamp())
@@ -119,8 +121,7 @@ class Shitpost(commands.Cog):
return message return message
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def zalgo(self, ctx, *, arg):
def zalgo(self, ctx, *, arg):
"""z̴̬̘͇̗͇̦̤̩̜͜ą̷̟̯̪̩̣̭̭͇̹l̴̗͓̟̠̤̳̗͉̠ͅg̵̜͎̪̞̫͎͈͉͉͍o̵̧̧͇̱̱̜̮͉͉̳ ̴̨̡͖̘̪̭̖͖̘̝h̸̭̰̫̲̺̹̻̜͕ͅe̴̢̘̪̱̱̩̠̣̘̱ ̴̡̢̲̞̙̝̮̻̻͇c̶̡̢̺͙̮̗̲̹̱̱o̷̢̡̺̘͈͎̫̬͔̤m̷͕͍͍̥͖̻̲̞̝ͅe̷̱̟͕̥͕̞̜̫̳̙s̷̨͍̼̝̙̩̥̰̠ͅ """z̴̬̘͇̗͇̦̤̩̜͜ą̷̟̯̪̩̣̭̭͇̹l̴̗͓̟̠̤̳̗͉̠ͅg̵̜͎̪̞̫͎͈͉͉͍o̵̧̧͇̱̱̜̮͉͉̳ ̴̨̡͖̘̪̭̖͖̘̝h̸̭̰̫̲̺̹̻̜͕ͅe̴̢̘̪̱̱̩̠̣̘̱ ̴̡̢̲̞̙̝̮̻̻͇c̶̡̢̺͙̮̗̲̹̱̱o̷̢̡̺̘͈͎̫̬͔̤m̷͕͍͍̥͖̻̲̞̝ͅe̷̱̟͕̥͕̞̜̫̳̙s̷̨͍̼̝̙̩̥̰̠ͅ
h̷̦̰̣̗̭͕̩͓͈̠i̶̗̰̹̤̖͙̰̹͙̹j̸̧̜̬̬̜̹͔̰̫͜ ̶̧͉͔̠̻͈̜̳̥̭k̸̯̳̠̼̙̗̘̳͜ͅǫ̵̝̱̩͎̫͈̣̪̦m̶̺̙̟̫͔͈̭̖̱ͅt̶̜̠̟͙̞̠̗̗̥ͅ ̸̢̹̜͉͙̩̬̖ͅͅh̷̯̮̘̭͈̜̺͎̳̯i̴̩̯̼̱͇̟̫̻̘̖j̵̪̤̦͖̮̜̦̼̺̮ ̶̧͇̭̞̮̩̼͚̮ͅḵ̴̢̨̢͉͉͖̹̬̺o̵̢̪̥̻͙͕̫̥̗͜m̶̧̡͔̠̺͖̝̳̪ͅt̷̢̮̭̜̥̠̼̫͍̯ h̷̦̰̣̗̭͕̩͓͈̠i̶̗̰̹̤̖͙̰̹͙̹j̸̧̜̬̬̜̹͔̰̫͜ ̶̧͉͔̠̻͈̜̳̥̭k̸̯̳̠̼̙̗̘̳͜ͅǫ̵̝̱̩͎̫͈̣̪̦m̶̺̙̟̫͔͈̭̖̱ͅt̶̜̠̟͙̞̠̗̗̥ͅ ̸̢̹̜͉͙̩̬̖ͅͅh̷̯̮̘̭͈̜̺͎̳̯i̴̩̯̼̱͇̟̫̻̘̖j̵̪̤̦͖̮̜̦̼̺̮ ̶̧͇̭̞̮̩̼͚̮ͅḵ̴̢̨̢͉͉͖̹̬̺o̵̢̪̥̻͙͕̫̥̗͜m̶̧̡͔̠̺͖̝̳̪ͅt̷̢̮̭̜̥̠̼̫͍̯
d̷̢̪͍͓̭̣̼̠͎̠e̴̡̢̩̱͙̻̥̯͎͜ ̵̲̪͖̖͖͍͈͎̮̼ļ̴̯̗̝̦͍͍͖̰͜i̶̡̘̟̳̖͙͕͔̺͜ȩ̸̤͎̣͖͔̭͔̫̯v̷͔̺͖̖̞̙̘̖̠͓e̶̲͍̮̳͎̗̳̞̹͔ ̸̡̬̫͎͎̝͍̤̯ͅg̴̨̞̻͙̠̰͖͖̝ͅǫ̴̘̥͇̙̖͈͍̹̥e̵̥͇̫̱̬̝̥̲̞̜d̷͈͙̝͍͔̘͕̼̜̦e̴̡̯̦͉͙̪̭͕̻̝ d̷̢̪͍͓̭̣̼̠͎̠e̴̡̢̩̱͙̻̥̯͎͜ ̵̲̪͖̖͖͍͈͎̮̼ļ̴̯̗̝̦͍͍͖̰͜i̶̡̘̟̳̖͙͕͔̺͜ȩ̸̤͎̣͖͔̭͔̫̯v̷͔̺͖̖̞̙̘̖̠͓e̶̲͍̮̳͎̗̳̞̹͔ ̸̡̬̫͎͎̝͍̤̯ͅg̴̨̞̻͙̠̰͖͖̝ͅǫ̴̘̥͇̙̖͈͍̹̥e̵̥͇̫̱̬̝̥̲̞̜d̷͈͙̝͍͔̘͕̼̜̦e̴̡̯̦͉͙̪̭͕̻̝
@@ -130,10 +131,10 @@ class Shitpost(commands.Cog):
""" """
message = self.zalgofy(arg) message = self.zalgofy(arg)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
yield from ctx.channel.send(str(message)) await ctx.channel.send(str(message))
def get_corona_message(self): def get_corona_message(self):
response = requests.get('https://covid.ourworldindata.org/data/latest/owid-covid-latest.json') response = requests.get('https://covid.ourworldindata.org/data/latest/owid-covid-latest.json')
@@ -151,18 +152,16 @@ class Shitpost(commands.Cog):
return None return None
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def corona(self, ctx):
def corona(self, ctx):
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
message = self.get_corona_message() message = self.get_corona_message()
yield from ctx.channel.send(ctx.author.mention + ' ' + str(message)) await ctx.channel.send(ctx.author.mention + ' ' + str(message))
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def viertwintig(self, ctx):
def viertwintig(self, ctx):
"""Hoe lang nog tot 420? """Hoe lang nog tot 420?
Gebruik: !viertwintig Gebruik: !viertwintig
""" """
@@ -188,11 +187,10 @@ class Shitpost(commands.Cog):
seconds = secondsLeft - minutes * 60 seconds = secondsLeft - minutes * 60
Message += "Nog " + str(days) + " dagen, " + str(hours) + " uur, " + str(minutes) + " minuten en " + str(seconds) + " seconden tot 420!!" 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)) await ctx.channel.send(ctx.author.mention + ' ' + str(Message))
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def iselderscrolls6aluit(self, ctx):
def iselderscrolls6aluit(self, ctx):
"""Hoe lang nog tot Elder Scrolls 6? 11-11-11? 20-20-20? """Hoe lang nog tot Elder Scrolls 6? 11-11-11? 20-20-20?
Gebruik: !iselderscrolls6aluit Gebruik: !iselderscrolls6aluit
""" """
@@ -203,15 +201,14 @@ class Shitpost(commands.Cog):
else: else:
Message = "Nee. :frowning2: Nog even geduld..." Message = "Nee. :frowning2: Nog even geduld..."
yield from ctx.channel.send(ctx.author.mention + ' ' + str(Message)) await ctx.channel.send(ctx.author.mention + ' ' + str(Message))
def get_giet_het_oan(self): def get_giet_het_oan(self):
# Alsof we ooit nog een elfstedentocht gaan krijgen. # Alsof we ooit nog een elfstedentocht gaan krijgen.
return "nee" return "nee"
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def giethetaloan(self, ctx):
def giethetaloan(self, ctx):
"""Giet het al oan? """Giet het al oan?
Ja of Nee.. kom op nou. Ja of Nee.. kom op nou.
""" """
@@ -225,7 +222,7 @@ class Shitpost(commands.Cog):
else: else:
if 'nee' in answer: if 'nee' in answer:
reactie += 'Nee helaas..' reactie += 'Nee helaas..'
yield from ctx.channel.send(ctx.author.mention + ' ' + reactie) await ctx.channel.send(ctx.author.mention + ' ' + reactie)
def get_inspiration(self): def get_inspiration(self):
inspiration = requests.get(url='http://inspirobot.me/api?generate=true') inspiration = requests.get(url='http://inspirobot.me/api?generate=true')
@@ -235,8 +232,7 @@ class Shitpost(commands.Cog):
@commands.command(pass_context=True, hidden=False) @commands.command(pass_context=True, hidden=False)
@asyncio.coroutine async def inspire(self, ctx):
def inspire(self, ctx):
"""Laat je inspireren """Laat je inspireren
Bijvoorbeeld: Bijvoorbeeld:
!inspire !inspire
@@ -246,12 +242,12 @@ class Shitpost(commands.Cog):
em = discord.Embed(title='Uw wijze woorden:', type='photo') em = discord.Embed(title='Uw wijze woorden:', type='photo')
em.set_image(url=inspo) em.set_image(url=inspo)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
else: else:
yield from ctx.channel.send(ctx.author.mention + ' helaas, geen quote gevonden.') await ctx.channel.send(ctx.author.mention + ' helaas, geen quote gevonden.')
def get_imgflip_embed(self, template: str, boven: str, onder: str, extra_options: dict = None): def get_imgflip_embed(self, template: str, boven: str, onder: str, extra_options: dict = None):
params = dict( params = dict(
@@ -273,49 +269,46 @@ class Shitpost(commands.Cog):
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def tering(self, ctx, boven: str, onder: str):
def tering(self, ctx, boven: str, onder: str):
"""Vanavond gaan we helemaal naar de tering """Vanavond gaan we helemaal naar de tering
Bijvoorbeeld: Bijvoorbeeld:
!tering \"Vanavond\" \"gaan we helemaal naar de tering\" !tering \"Vanavond\" \"gaan we helemaal naar de tering\"
""" """
em = self.get_imgflip_embed(self.imgflips['tering'], boven, onder) em = self.get_imgflip_embed(self.imgflips['tering'], boven, onder)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if em: if em:
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def mark(self, ctx, boven: str, onder: str):
def mark(self, ctx, boven: str, onder: str):
"""Maakt een mark meem. """Maakt een mark meem.
Bijvoorbeeld: Bijvoorbeeld:
!mark \"je moeder\" \"is een hoer\" !mark \"je moeder\" \"is een hoer\"
""" """
em = self.get_imgflip_embed(self.imgflips['mark'], boven, onder) em = self.get_imgflip_embed(self.imgflips['mark'], boven, onder)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if em: if em:
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def eriku(self, ctx, boven: str, onder: str):
def eriku(self, ctx, boven: str, onder: str):
"""Maakt een erik meem. """Maakt een erik meem.
Bijvoorbeeld: Bijvoorbeeld:
!eriku \"je moeder\" \"is een hoer\" !eriku \"je moeder\" \"is een hoer\"
""" """
em = self.get_imgflip_embed(self.imgflips['eriku'], boven, onder) em = self.get_imgflip_embed(self.imgflips['eriku'], boven, onder)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if em: if em:
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
def get_tegeltje(self, tekst, auteur): def get_tegeltje(self, tekst, auteur):
params = { params = {
@@ -341,43 +334,39 @@ class Shitpost(commands.Cog):
return self.get_imgflip_embed(self.imgflips['tegeltje'], "", "", params) return self.get_imgflip_embed(self.imgflips['tegeltje'], "", "", params)
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def tegeltje(self, ctx, tekst: str, auteur: str=" "):
def tegeltje(self, ctx, tekst: str, auteur: str=" "):
"""Maak een mooi tegeltje met volkswijsheid """Maak een mooi tegeltje met volkswijsheid
Bijvoorbeeld: Bijvoorbeeld:
!tegeltje \"Oost west, 420 best\" \"Lourens\" !tegeltje \"Oost west, 420 best\" \"Lourens\"
""" """
em = get_tegeltje(tekst, auteur) em = self.get_tegeltje(tekst, auteur)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if em: if em:
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def zout(self, ctx, boven: str, onder: str):
def zout(self, ctx, boven: str, onder: str):
"""Maakt een martijn-zout meem. """Maakt een martijn-zout meem.
Bijvoorbeeld: Bijvoorbeeld:
!zout \"je moeder\" \"is een hoer\" !zout \"je moeder\" \"is een hoer\"
""" """
em = self.get_imgflip_embed(self.imgflips['zout'], boven, onder) em = self.get_imgflip_embed(self.imgflips['zout'], boven, onder)
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if em: if em:
yield from ctx.channel.send(ctx.author.mention, embed=em) await ctx.channel.send(ctx.author.mention, embed=em)
@commands.command(pass_context=True, hidden=True) @commands.command(pass_context=True, hidden=True)
@asyncio.coroutine async def nihao(self,ctx):
def nihao(self,ctx): await ctx.channel.send("kankerlauw")
yield from ctx.channel.send("kankerlauw")
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def tijd(self, ctx, *args):
def tijd(self, ctx, *args):
"""Vertelt je hoe laat het is.. """Vertelt je hoe laat het is..
Misschien geeft het ook wel een leuke meem terug. Misschien geeft het ook wel een leuke meem terug.
Wie weet. Wie weet.
@@ -398,20 +387,20 @@ class Shitpost(commands.Cog):
elif os.path.isfile(filepng): elif os.path.isfile(filepng):
filepath = filepng filepath = filepng
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
if filepath != '': if filepath != '':
yield from ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M'), file=discord.File(filepath, 'tijd.png')) await ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M'), file=discord.File(filepath, 'tijd.png'))
else: else:
yield from ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M')) await ctx.channel.send(ctx.author.mention + ' Het is nu ' + datetime.now().strftime('%H:%M'))
def get_dice_roll(self, nrOfDice, dieType, modifier=None): def get_dice_roll(self, nrOfDice, dieType, modifier=None):
if nrOfDice > 99 or dieType > 9999 or dieType < 2 or (modifier and abs(modifier) > 9999): if nrOfDice > 99 or dieType > 9999 or dieType < 2 or (modifier and abs(modifier) > 9999):
return None return None
# Do the rolling # Do the rolling
random.seed(datetime.now()) random.seed(datetime.now().timestamp())
total = 0 total = 0
rolls = [] rolls = []
for x in range(0, nrOfDice): for x in range(0, nrOfDice):
@@ -447,8 +436,7 @@ class Shitpost(commands.Cog):
return (numDice, die, modifier) return (numDice, die, modifier)
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def roll(self, ctx, *, dice):
def roll(self, ctx, *, dice):
"""Roll een dobbelsteen. Of een paar. Bijvoorbeeld: """Roll een dobbelsteen. Of een paar. Bijvoorbeeld:
!roll 4d20 !roll 4d20
!roll 1d6 + 5 !roll 1d6 + 5
@@ -456,9 +444,9 @@ class Shitpost(commands.Cog):
(nrOfDice, dieType, modifier) = self.get_dice_parameters(dice) (nrOfDice, dieType, modifier) = self.get_dice_parameters(dice)
message = self.get_dice_roll(nrOfDice, dieType, modifier) message = self.get_dice_roll(nrOfDice, dieType, modifier)
if message: if message:
yield from ctx.channel.send(message) await ctx.channel.send(message)
else: else:
yield from ctx.channel.send("Die roll vind ik echt een beetje te mal..") await ctx.channel.send("Die roll vind ik echt een beetje te mal..")
def get_weerbericht(self, wData, verbose=None): def get_weerbericht(self, wData, verbose=None):
if not wData: if not wData:
@@ -519,8 +507,7 @@ class Shitpost(commands.Cog):
return None return None
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def weer(self, ctx, location="Leiden", verbose=None):
def weer(self, ctx, location="Leiden", verbose=None):
"""Vertelt je het weer. """Vertelt je het weer.
Omdat je te lui bent om naar buiten te kijken. Omdat je te lui bent om naar buiten te kijken.
Oant Moarn! Oant Moarn!
@@ -530,7 +517,7 @@ class Shitpost(commands.Cog):
message = self.get_weerbericht(wData, verbose) message = self.get_weerbericht(wData, verbose)
if not wData or not message: if not wData or not message:
message = "Weer ophalen niet gelukt. Probeer het later nogmaals.." message = "Weer ophalen niet gelukt. Probeer het later nogmaals.."
yield from ctx.channel.send(message) await ctx.channel.send(message)
#returns a nice weather icon. Sometimes the API uses non-documented icons, so we return something else #returns a nice weather icon. Sometimes the API uses non-documented icons, so we return something else
def getWeatherIconTranslation(self, iconKey): def getWeatherIconTranslation(self, iconKey):
@@ -610,27 +597,25 @@ class Shitpost(commands.Cog):
return zwarte_kaart.replace("___", "**{}**").format(*wit) return zwarte_kaart.replace("___", "**{}**").format(*wit)
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def ktdm(self, ctx, *args):
def ktdm(self, ctx, *args):
'''Speel Kaarten Tegen De Mensheid! Genereer een kaart of geef zelf opties. '''Speel Kaarten Tegen De Mensheid! Genereer een kaart of geef zelf opties.
Bijvoorbeeld: !ktdm <"1"><"2"><"3"> (aanbevolen 1 of 2, max 3)''' Bijvoorbeeld: !ktdm <"1"><"2"><"3"> (aanbevolen 1 of 2, max 3)'''
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
resultaat = self.get_ktdm(args) resultaat = self.get_ktdm(args)
if resultaat: if resultaat:
yield from ctx.channel.send(f"{ctx.author.mention}\n{resultaat}") await ctx.channel.send(f"{ctx.author.mention}\n{resultaat}")
else: else:
yield from ctx.channel.send(f"{ctx.author.mention}\nIets ging niet helemaal lekker") await ctx.channel.send(f"{ctx.author.mention}\nIets ging niet helemaal lekker")
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def beledig(self, ctx, member:discord.User):
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! '''Je vindt iemand stom maar je hebt geen inspiratie? Beledig al je vriendjes met deze handige beledig-i-fier!
Bijvoorbeeld: !beledig @jemoeder''' Bijvoorbeeld: !beledig @jemoeder'''
yield from ctx.channel.send(member.mention+ ", " + ctx.author.mention + " vindt jou een " + random.choice(self.insult) + "! :angry:") await ctx.channel.send(member.mention+ ", " + ctx.author.mention + " vindt jou een " + random.choice(self.insult) + "! :angry:")
yield from ctx.message.delete() await ctx.message.delete()
def get_watspelenwe_cal(self): def get_watspelenwe_cal(self):
"""Geeft een paar terug, met de titel en omschrijving van het eerstvolgende event uit de kalender""" """Geeft een paar terug, met de titel en omschrijving van het eerstvolgende event uit de kalender"""
@@ -749,8 +734,7 @@ class Shitpost(commands.Cog):
return message return message
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def watspelenwe(self, ctx):
def watspelenwe(self, ctx):
"""Stroop weet wat we spelen op vrijdag. """Stroop weet wat we spelen op vrijdag.
Geeft elke week een pseudo-random antwoord. Geeft elke week een pseudo-random antwoord.
Geseed op weeknummer + jaar. Geseed op weeknummer + jaar.
@@ -764,10 +748,10 @@ class Shitpost(commands.Cog):
message += ". En wilt iemand even aan Mark vragen of hij de kalender bijhoudt?" message += ". En wilt iemand even aan Mark vragen of hij de kalender bijhoudt?"
try: try:
yield from ctx.message.delete() await ctx.message.delete()
except: except:
print("No permission to delete message") print("No permission to delete message")
yield from ctx.channel.send(message) await ctx.channel.send(message)
def get_review_string(self, topic = ""): def get_review_string(self, topic = ""):
if topic == "": if topic == "":
@@ -819,10 +803,31 @@ class Shitpost(commands.Cog):
return message return message
@commands.command(pass_context=True) @commands.command(pass_context=True)
@asyncio.coroutine async def review(self, ctx, *args):
def review(self, ctx, *args):
"""Stroop heeft (bijna) overal een mening over. Vraag het hem! """Stroop heeft (bijna) overal een mening over. Vraag het hem!
""" """
topic = " ".join(args) topic = " ".join(args)
message = self.get_review_string(topic) message = self.get_review_string(topic)
yield from ctx.channel.send(message) await ctx.channel.send(message)
def get_zaagmans(self):
zaagman_url = "http://iszaagmansallangsgeweest.nl/"
headers = {
'User-Agent': self.userAgent,
}
zreq = requests.get(zaagman_url, headers=headers)
if zreq:
return zreq.text.partition("<h1>")[2].partition("</h1>")[0]
else:
return None
@commands.command(pass_context=True)
async def zaagmans(self, ctx):
"""Is zaagmans al langsgeweest? Is de week al doormidden. Wie weet."""
gezaagd = self.get_zaagmans()
message = ctx.author.mention + ": "
if gezaagd:
message += gezaagd
else:
message += "De waarheid over zaagmans is niet te doorgronden."
await ctx.channel.send(message)
+1
View File
@@ -14,3 +14,4 @@ STROOP_IMGFLIP_PASSWORD=
STROOP_RESET_PASSWORD= STROOP_RESET_PASSWORD=
STROOP_CHANNEL_SHITPOST= STROOP_CHANNEL_SHITPOST=
STROOP_CHANNEL_BELANGRIJK= STROOP_CHANNEL_BELANGRIJK=
STROOP_HDCON_DATE=2025-12-01
+3
View File
@@ -3,3 +3,6 @@ discord.py
praw praw
numpy numpy
python-dotenv python-dotenv
feedparser
audioop-lts
vobject
+2 -2
View File
@@ -41,9 +41,9 @@ class TestGeneral(unittest.TestCase):
if not isinstance(self.cog.r, praw.Reddit): if not isinstance(self.cog.r, praw.Reddit):
self.skipTest("PRAW Reddit instance failed to create") self.skipTest("PRAW Reddit instance failed to create")
post = self.cog.get_kopieerpasta() post = self.cog.get_kopieerpasta()
self.assertIsInstance(post.url, str) if post:
self.assertIsInstance(post.url, str)
def test_huge(self): def test_huge(self):
embed = self.cog.get_emoji_embed("<:test:123456789>") embed = self.cog.get_emoji_embed("<:test:123456789>")
self.assertIsInstance(embed, discord.Embed) self.assertIsInstance(embed, discord.Embed)
+9 -1
View File
@@ -3,6 +3,7 @@ import dotenv
import os import os
import discord import discord
import requests import requests
from datetime import datetime
from discord.ext import commands from discord.ext import commands
import Shitpost import Shitpost
@@ -39,7 +40,7 @@ class TestShitpost(unittest.TestCase):
def test_watspelenwe_cal(self): def test_watspelenwe_cal(self):
data = requests.get(os.getenv('STROOP_CALDAV_CAL')) data = requests.get(os.getenv('STROOP_CALDAV_CAL'))
if not data: if not data:
self.skipTest(f"Server at {self.cog.muzak_url} has an error, or is unavailable") self.skipTest(f"Server at {os.getenv('STROOP_CALDAV_HOST')} has an error, or is unavailable")
(activiteit, reden) = self.cog.get_watspelenwe_cal() (activiteit, reden) = self.cog.get_watspelenwe_cal()
with self.subTest(msg="Watspelenwe activiteit does not return a string"): with self.subTest(msg="Watspelenwe activiteit does not return a string"):
@@ -169,3 +170,10 @@ class TestShitpost(unittest.TestCase):
message = self.cog.zalgofy(inmsg) message = self.cog.zalgofy(inmsg)
self.assertIsInstance(message, str) self.assertIsInstance(message, str)
self.assertEqual(len(message), len(inmsg)*5) self.assertEqual(len(message), len(inmsg)*5)
def test_zaagmans(self):
zaag = self.cog.get_zaagmans()
if zaag is None:
self.skipTest(f"Server at iszaagmansallangsgeweest.nl has an error, or is unavailable")
else:
self.assertIsInstance(zaag, str)