Merge branch 'latest-version'
This commit is contained in:
+7
-7
@@ -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:
|
||||||
|
|||||||
+1
-1
@@ -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
@@ -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):
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user