26 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
9 changed files with 186 additions and 82 deletions
+28 -28
View File
@@ -2,34 +2,34 @@ kind: pipeline
name: default name: default
steps: steps:
- name: test - name: test
image: python:3.11 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:
+65 -6
View File
@@ -5,6 +5,8 @@ import random
import requests import requests
import asyncio import asyncio
import os import os
import feedparser
import json
from datetime import datetime from datetime import datetime
import re import re
@@ -18,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:
@@ -46,7 +50,6 @@ class Chatbot(commands.Cog):
"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.getResponseForMessageLocal("stroopwafel")
] ]
try: try:
@@ -222,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:
@@ -288,11 +296,13 @@ class Chatbot(commands.Cog):
await message.channel.send(response) await message.channel.send(response)
#Gets a response #Gets a response
async def getResponseForMessage(self, wordsToRespondTo): async def getResponseForMessage(self, wordsToRespondTo, gptChance=0.1):
if random.random() > 0.9: if random.random() < 1-gptChance:
try: try:
# GPT request moet echt even in een non-blocking executortje, anders loopt de hele boel vast # GPT request moet echt even in een non-blocking executortje, anders loopt de hele boel vast
return await self.bot.loop.run_in_executor(None,self.getResponseForMessageOnline, wordsToRespondTo) response = await self.bot.loop.run_in_executor(None,self.getResponseForMessageOnline, wordsToRespondTo)
if response:
return response # Anders door naar local
except: except:
pass # Door naar local call pass # Door naar local call
return self.getResponseForMessageLocal(wordsToRespondTo) return self.getResponseForMessageLocal(wordsToRespondTo)
@@ -303,8 +313,11 @@ class Chatbot(commands.Cog):
return req.json()["translations"][0]["text"] return req.json()["translations"][0]["text"]
def getResponseForMessageOnline(self, wordsToRespondTo): def getResponseForMessageOnline(self, wordsToRespondTo):
text = self.translateTo("en", " ".join(wordsToRespondTo)) prompt = " ".join(wordsToRespondTo)
req = requests.post('http://gpt.hoekveen.net/complete', json={"prompt": text, "max_tokens": 60}) 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()) print(req.json())
respons = req.json()["text"] respons = req.json()["text"]
respons = respons[0:respons.rfind(".")+1] # Alles weg na de laatste punt respons = respons[0:respons.rfind(".")+1] # Alles weg na de laatste punt
@@ -469,3 +482,49 @@ class Chatbot(commands.Cog):
await 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.11 FROM python:3.13
WORKDIR /opt/stroopwafel WORKDIR /opt/stroopwafel
+48 -12
View File
@@ -5,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):
@@ -12,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"),
@@ -22,7 +23,7 @@ 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)
@@ -58,19 +59,25 @@ class General(commands.Cog):
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)
async def kopieerpasta(self, ctx): async 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
@@ -92,9 +99,38 @@ class General(commands.Cog):
return requests.get(self.muzak_url + '/stroopwafel') return requests.get(self.muzak_url + '/stroopwafel')
@commands.command(pass_context=True) @commands.command(pass_context=True)
async def playlist(self, ctx): async def muzak(self, ctx):
"""HDcon2021 playlist""" """HD muzak 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'])
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) 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')
+29 -22
View File
@@ -16,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]
@@ -40,33 +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)
async def ishetalhdcon(self, ctx): async def ishetalhdcon(self, ctx):
"""Hoe lang nog tot Hoestende Draken Con 2022? """Hoe lang nog tot Hoestende Draken Con dit jaar? Of is het pas volgend jaar?
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:
await 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;
@@ -94,14 +98,14 @@ class Shitpost(commands.Cog):
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:
await 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."
await ctx.channel.send(ctx.author.mention + ' ' + str(Message)) await ctx.channel.send(ctx.author.mention + ' ' + str(Message))
@@ -808,7 +812,10 @@ class Shitpost(commands.Cog):
def get_zaagmans(self): def get_zaagmans(self):
zaagman_url = "http://iszaagmansallangsgeweest.nl/" zaagman_url = "http://iszaagmansallangsgeweest.nl/"
zreq = requests.get(zaagman_url) headers = {
'User-Agent': self.userAgent,
}
zreq = requests.get(zaagman_url, headers=headers)
if zreq: if zreq:
return zreq.text.partition("<h1>")[2].partition("</h1>")[0] return zreq.text.partition("<h1>")[2].partition("</h1>")[0]
else: else:
+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)