Merge branch 'latest-version'

This commit is contained in:
JP
2020-06-12 19:36:26 +02:00
7 changed files with 22 additions and 151 deletions
+8 -8
View File
@@ -6,7 +6,7 @@ import random
from datetime import datetime from datetime import datetime
import re import re
class Chatbot(object): class Chatbot(commands.Cog):
"""Een heuse chatbot. Under construction...""" """Een heuse chatbot. Under construction..."""
def __init__(self, bot): def __init__(self, bot):
@@ -17,7 +17,7 @@ class Chatbot(object):
self.pmLast = datetime(2018, 1, 1, 1, 1, 1) self.pmLast = datetime(2018, 1, 1, 1, 1, 1)
self.pmCount = 0 self.pmCount = 0
try: try:
np.load('markov_dict.npy') np.load('markov_dict.npy', allow_pickle=True)
except FileNotFoundError: except FileNotFoundError:
#If there's no initial file, make a new one: #If there's no initial file, make a new one:
initFile = {'pairs':{self.START_OF_MESSAGE:{'Hoi':1},'Hoi':{self.END_OF_MESSAGE:1}}, 'trairs':{}, 'responsePairs':{}} initFile = {'pairs':{self.START_OF_MESSAGE:{'Hoi':1},'Hoi':{self.END_OF_MESSAGE:1}}, 'trairs':{}, 'responsePairs':{}}
@@ -187,10 +187,10 @@ class Chatbot(object):
channel=self.bot.get_channel(channelId) channel=self.bot.get_channel(channelId)
#Open current chain: #Open current chain:
wordDict = np.load('markov_dict.npy').item() wordDict = np.load('markov_dict.npy', allow_pickle=True).item()
#Iterate through the last x messages from the channel: #Iterate through the last x messages from the channel:
messageIterator = channel.history(limit=nrOfMessages, before=None, after=None, reverse=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 messageIterator.next() msg = yield from messageIterator.next()
@@ -241,7 +241,7 @@ class Chatbot(object):
""" """
#Get previous message to respond to #Get previous message to respond to
messageIterator = ctx.channel.history(limit=3, before=None, after=None, reverse=False, around=None) messageIterator = ctx.channel.history(limit=3, before=None, after=None, oldest_first=False, around=None)
messageToRespondTo = yield from messageIterator.next() #this will be the !reageer command. skip messageToRespondTo = yield from messageIterator.next() #this will be the !reageer command. skip
messageToRespondTo = yield from messageIterator.next() messageToRespondTo = yield from messageIterator.next()
if messageToRespondTo.content.strip()[0] == '!' or messageToRespondTo.author.bot: #another chance if messageToRespondTo.content.strip()[0] == '!' or messageToRespondTo.author.bot: #another chance
@@ -276,7 +276,7 @@ class Chatbot(object):
MAX_N_WORDS = 100 #Don't use more words than this MAX_N_WORDS = 100 #Don't use more words than this
#Get dictionary/Markov chain #Get dictionary/Markov chain
wordDict = np.load('markov_dict.npy').item() wordDict = np.load('markov_dict.npy', allow_pickle=True).item()
wordPairDict = wordDict['pairs'] wordPairDict = wordDict['pairs']
wordTrairDict = wordDict['trairs'] wordTrairDict = wordDict['trairs']
responsePairDict = wordDict['responsePairs'] responsePairDict = wordDict['responsePairs']
@@ -389,7 +389,7 @@ class Chatbot(object):
MAX_N_TRIES = 50 MAX_N_TRIES = 50
#Get dictionary/Markov chain #Get dictionary/Markov chain
wordDict = np.load('markov_dict.npy').item() wordDict = np.load('markov_dict.npy', allow_pickle=True).item()
wordPairDict = wordDict['pairs'] wordPairDict = wordDict['pairs']
#try: #try:
@@ -439,4 +439,4 @@ class Chatbot(object):
message += uitspraken[i] message += uitspraken[i]
yield from ctx.channel.send(message) yield from ctx.channel.send(message)
except: except:
pass pass
+1 -1
View File
@@ -7,7 +7,7 @@ import time
import random import random
import statistics import statistics
class Cryptocoin(object): class Cryptocoin(commands.Cog):
"""Voor al uw crypto currency advies.""" """Voor al uw crypto currency advies."""
def __init__(self, bot): def __init__(self, bot):
+1 -1
View File
@@ -9,7 +9,7 @@ from sympy import latex, symbols, preview, Symbol #for LaTeX images
import youtube_dl import youtube_dl
import ffmpeg import ffmpeg
class General(object): class General(commands.Cog):
"""Overal toegestaan.""" """Overal toegestaan."""
def __init__(self, bot): def __init__(self, bot):
+11 -11
View File
@@ -7,7 +7,7 @@ import numpy as np
import random import random
from datetime import datetime from datetime import datetime
class Points(object): class Points(commands.Cog):
"""Geef elkaar punten!""" """Geef elkaar punten!"""
def __init__(self, bot): def __init__(self, bot):
@@ -122,7 +122,7 @@ class Points(object):
""" """
message = "**De puntentelling:** \n```" message = "**De puntentelling:** \n```"
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
pointsCountSorted = sorted(pointsCount.items(), key=lambda i: i[1]['points'], reverse=True) pointsCountSorted = sorted(pointsCount.items(), key=lambda i: i[1]['points'], reverse=True)
for user in pointsCountSorted: for user in pointsCountSorted:
if user[0] != self.BANK_ID: if user[0] != self.BANK_ID:
@@ -146,31 +146,31 @@ class Points(object):
# Transfer points form one user to another # Transfer points form one user to another
def transferPoints(self, fromUserId, toUserId, points): def transferPoints(self, fromUserId, toUserId, points):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
pointsCount[fromUserId]["points"] -= points pointsCount[fromUserId]["points"] -= points
pointsCount[toUserId]["points"] += points pointsCount[toUserId]["points"] += points
np.save("pointscount.npy", pointsCount) np.save("pointscount.npy", pointsCount)
# Do we know this user? # Do we know this user?
def isUserOnList(self, user): def isUserOnList(self, user):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
return user.id in pointsCount.keys() return user.id in pointsCount.keys()
# Get a user's point balance # Get a user's point balance
def getUserBalance(self, user): def getUserBalance(self, user):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
return pointsCount[user.id]["points"] return pointsCount[user.id]["points"]
# Get the balance of the bank # Get the balance of the bank
def getBankBalance(self): def getBankBalance(self):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
return pointsCount[self.BANK_ID]["points"] return pointsCount[self.BANK_ID]["points"]
# To keep track if a user used some points today, we look at when the last time was he/she used them # To keep track if a user used some points today, we look at when the last time was he/she used them
# If this was in the past: reset # If this was in the past: reset
# Also, return the updated object. Why not. # Also, return the updated object. Why not.
def refreshDateVarsAndReturnUserVars(self, userId): def refreshDateVarsAndReturnUserVars(self, userId):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
currentDateStr = datetime.now().strftime("%Y%m%d") currentDateStr = datetime.now().strftime("%Y%m%d")
if pointsCount[userId]["theDate"] != currentDateStr: if pointsCount[userId]["theDate"] != currentDateStr:
pointsCount[userId]["theDate"] = currentDateStr pointsCount[userId]["theDate"] = currentDateStr
@@ -192,14 +192,14 @@ class Points(object):
# Increase the number of points this user has taken away today. # Increase the number of points this user has taken away today.
# Warning: assumes you executed refreshDateVarsAndReturnUserVars() # Warning: assumes you executed refreshDateVarsAndReturnUserVars()
def increaseUsersPointTakenOnDate(self, userId, points): def increaseUsersPointTakenOnDate(self, userId, points):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
pointsCount[userId]["pointTakenOnDate"] += points pointsCount[userId]["pointTakenOnDate"] += points
np.save("pointscount.npy", pointsCount) np.save("pointscount.npy", pointsCount)
# Increase the number of bank points this user has given today # Increase the number of bank points this user has given today
# Warning: assumes you executed refreshDateVarsAndReturnUserVars() # Warning: assumes you executed refreshDateVarsAndReturnUserVars()
def increaseUsersBankPointGivenAwayToday(self, userId, points): def increaseUsersBankPointGivenAwayToday(self, userId, points):
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
pointsCount[userId]["bankPointsGivenOnDate"] += points pointsCount[userId]["bankPointsGivenOnDate"] += points
np.save("pointscount.npy", pointsCount) np.save("pointscount.npy", pointsCount)
@@ -252,10 +252,10 @@ class Points(object):
def init(self): def init(self):
# Check if points file exists: # Check if points file exists:
try: try:
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
except FileNotFoundError: except FileNotFoundError:
np.save("pointscount.npy", {}) np.save("pointscount.npy", {})
pointsCount = np.load('pointscount.npy').item() pointsCount = np.load('pointscount.npy', allow_pickle=True).item()
# Initialise the bank: # Initialise the bank:
if self.BANK_ID not in pointsCount.keys(): if self.BANK_ID not in pointsCount.keys():
+1 -2
View File
@@ -3,7 +3,6 @@ import discord
from discord.ext import commands from discord.ext import commands
from urllib import request from urllib import request
import requests import requests
import oauth2 as oauth
import json, requests import json, requests
import math import math
from datetime import datetime from datetime import datetime
@@ -11,7 +10,7 @@ import sys
import os import os
import random import random
class Shitpost(object): class Shitpost(commands.Cog):
"""Schijtpaal commando's. Alleen bruikbaar in de daarvoor toegewezen schijtpaal kanalen.""" """Schijtpaal commando's. Alleen bruikbaar in de daarvoor toegewezen schijtpaal kanalen."""
def __init__(self, bot): def __init__(self, bot):
-126
View File
@@ -1,126 +0,0 @@
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import json
import spotipy
import spotipy.util as util
from spotipy.oauth2 import SpotifyClientCredentials
import asyncio
import random
import time
from json.decoder import JSONDecodeError
class Spotify(object):
"""HD Con 2019 Playlist features! Alleen te gebruiken in het juiste kanaal"""
def __init__(self, bot):
self.bot = bot
#voting settings
self.desired_count = 5 # aantal upvotes dat nodig is om een liedje in de lijst te krijgen
self.veto_count = 5 # aantal downvotes dat nodig is om een liedje weg te stemmen
self.thumbs_up = '👌' #"\N{Ok Hand Sign}"
self.thumbs_down = '🙅' #"\N{Face With No Good Gesture}"
self.stemkanaal_naam = 'top2000' # naam van het stemkanaal
#All the spotipy settings
self.redirect = 'http://localhost' #must match app settings.
self.scope = 'user-read-private user-read-playback-state user-modify-playback-state playlist-modify-public playlist-modify-private'
self.username = self.bot.tokens["spotifyUsername"]
self.secret = self.bot.tokens["spotifySecret"]
self.client = self.bot.tokens["spotifyId"]
self.playlist_id = self.bot.tokens["spotifyPlaylist"]
#Create spotipy objects for authentication
client_credentials_manager = SpotifyClientCredentials(
client_id=self.client,
client_secret=self.secret)
self.token = util.prompt_for_user_token(
username=self.username,
scope=self.scope,
client_id=self.client,
client_secret=self.secret,
redirect_uri=self.redirect)
self.sp_app = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
self.sp_user = spotipy.Spotify(auth=self.token)
@self.bot.event
@asyncio.coroutine
def on_reaction_add(reaction, user):
# Als kanaal niet top2000 is niet tellen
if not reaction.message.channel.name.startswith(self.stemkanaal_naam):
return
# Bij genoeg stemmen voor
if reaction.emoji == self.thumbs_up and reaction.count >= self.desired_count:
print(str(reaction.message.content)) # debugging
with open("lijst.txt", "a") as f:
f.write(str(reaction.message.content)+'\n')
yield from reaction.message.delete() # verwijder poll
yield from reaction.message.channel.send("Dit nummer heeft genoeg stemmen ontvangen en is op de lijst gezet: " + str(reaction.message.content))
try:
self.nummer_toevoegen(str(reaction.message.content))
except:
pass
# Bij genoeg stemmen tegen
elif reaction.emoji == self.thumbs_down and reaction.count >= self.veto_count:
stemmen = reaction.message.reactions[0].count - 1 # tel het aantal voor-stemmen
if stemmen == 1: men = '' # om de grammar nazi's een plezier te doen
else: men = 'men'
yield from reaction.message.channel.send("Helaas, dit nummer heeft het ondanks " + str(stemmen) + " stem" + men + " niet gehaald: " + str(reaction.message.content))
try:
yield from ctx.message.delete()
except:
pass
#Properties and helper functions
@property
def playlist(self):
playlist_results = self.sp_user.user_playlist(self.username, self.playlist_id)
playlist_results = playlist_results['tracks']['items']
return playlist_results
def nummer_toevoegen(self, nummer):
tracks = ["spotify:track:"+nummer[31:]] # Het moet in een list
self.sp_user.user_playlist_add_tracks(user=self.username, playlist_id=self.playlist_id, tracks=tracks)
#User-facing commands
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def geefplaylist(self, ctx):
yield from ctx.channel.send(ctx.author.mention + " https://open.spotify.com/playlist/" + self.playlist_id)
try:
yield from ctx.message.delete()
except:
pass
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def nummers(self, ctx):
yield from ctx.channel.send(str(len(self.playlist)))
@commands.command(pass_context=True, hidden=False)
@asyncio.coroutine
def stem(self, ctx, *, text=None):
'''Stel een liedje voor dat in de HDcon afspeellijst moet komen! De rest mag dan stemmen.
Werkt alleen in het #top2000 kanaal.
Bijvoorbeeld:
!stem https://open.spotify.com/track/LOr3miP5uMd0l0R51t4m3T'''
# Maak lijst met links om dubbele nummers te vermijden
voorlopigelijst = [line.rstrip('\n') for line in open('lijst.txt')]
# if not ctx.channel.id == stemkanaal: # ??? kapoet ???
if not ctx.channel.name.startswith(self.stemkanaal_naam): # indien verkeerde kanaal
yield from ctx.channel.send(ctx.author.mention + ", stemmen doen we in het " + self.stemkanaal + " kanaal")
return
elif text in voorlopigelijst: # filter duplicaten
yield from ctx.channel.send(ctx.author.mention + ", je hebt geluk: dit liedje is reeds in de lijst opgenomen!")
return
if text != None and text.startswith("https://open.spotify.com/track/"): # indien geen leeg commando en valide link
message = yield from ctx.channel.send(text)
for emoji in (self.thumbs_up, self.thumbs_down): # geeft stemkeuze
yield from message.add_reaction(emoji)
else:
yield from ctx.channel.send(ctx.author.mention + ", je moet wel een valide link geven waar we op kunnen stemmen!")
try:
yield from ctx.message.delete()
except:
pass # pas op icm !stemtest
-2
View File
@@ -6,7 +6,6 @@ import General
import Cryptocoin import Cryptocoin
import Chatbot import Chatbot
import Points import Points
import Spotify
import logging import logging
import importlib import importlib
import configparser import configparser
@@ -42,7 +41,6 @@ bot.add_cog(Cryptocoin.Cryptocoin(bot))
bot.add_cog(Chatbot.Chatbot(bot)) bot.add_cog(Chatbot.Chatbot(bot))
pointsBot = Points.Points(bot) pointsBot = Points.Points(bot)
bot.add_cog(pointsBot) bot.add_cog(pointsBot)
bot.add_cog(Spotify.Spotify(bot))
@bot.event @bot.event
@asyncio.coroutine @asyncio.coroutine