import re, git, os, json, time def sanitize(data : str, options : bool = False): data = data.splitlines() dct = {} for line in data: if line[0] != "#" and ":" in line: lineValues = line.split(":") lineValues[0] = lineValues[0].lower() lineValues[1] = lineValues[1].replace(" ", "") if options: lineValues[1] = lineValues[1].lower() if lineValues[0] in ["testing guild ids", "admins"]: lineValues[1] = lineValues[1].split(",") if all(i.isnumeric() for i in lineValues[1]): lineValues[1] = [int(i) for i in lineValues[1]] if any(i == lineValues[1] for i in ["true", "false"]): lineValues[1] = (lineValues[1] == "true") dct[lineValues[0]] = lineValues[1] return dct class Options(): def __init__(self): with open("options.txt","r") as f: data = sanitize(f.read(), True) self.testing = data["testing"] self.guildIds = data["testing guild ids"] self.admins = data["admins"] class Credentials(): def __init__(self): with open("credentials.txt","r") as f: data = sanitize(f.read()) self.token = data["bot token"] self.finnhubKey = data["finnhub api key"] self.wordnikKey = data["wordnik api key"] self.mongoDBUser = data["mongodb user"] self.mongoDBPassword = data["mongodb password"] self.wolfKey = data["wolframalpha appid"] self.radarrKey = data["radarr api key"] self.sonarrKey = data["sonarr api key"] class databaseFuncs(): def __init__(self, bot): self.bot = bot def getName(self, userID): user = self.bot.database["users"].find_one({"_id":userID}) if user != None: return user["user name"] elif userID == "Gwendolyn": return userID else: self.bot.log("Couldn't find user "+userID) return userID def getID(self,userName): user = self.bot.database["users"].find_one({"user name":re.compile(userName, re.IGNORECASE)}) if user != None: return user["_id"] else: self.bot.log("Couldn't find user "+userName) return None def deleteGame(self, gameType,channel): self.bot.database[gameType].delete_one({"_id":channel}) def stopServer(self): self.bot.database["trivia questions"].delete_many({}) self.bot.database["blackjack games"].delete_many({}) self.bot.database["connect 4 games"].delete_many({}) self.bot.database["hangman games"].delete_many({}) if not self.bot.options.testing: g = git.cmd.Git("") g.pull() def connectFourReactionTest(self,channel,message,user): game = self.bot.database["connect 4 games"].find_one({"_id":str(channel.id)}) with open("resources/games/oldImages/connectFour"+str(channel.id), "r") as f: oldImage = int(f.read()) if message.id == oldImage: self.bot.log("They reacted to the connectFour game") turn = game["turn"] if user == game["players"][turn]: return True, turn+1 else: self.bot.log("It wasn't their turn") return False, 0 else: return False, 0 def hangmanReactionTest(self, channel,message): try: with open("resources/games/oldImages/hangman"+str(channel.id), "r") as f: oldMessages = f.read().splitlines() except: return False gameMessage = False for oldMessage in oldMessages: oldMessageID = int(oldMessage) if message.id == oldMessageID: self.bot.log("They reacted to the hangman game") gameMessage = True return gameMessage def bedreNetflixReactionTest(self, channel, message): if os.path.isfile(f"resources/bedreNetflix/oldMessage{str(channel.id)}"): with open("resources/bedreNetflix/oldMessage"+str(channel.id),"r") as f: data = json.load(f) else: return False, None, None if data["messageID"] == message.id: if "imdbIds" in data: return True, True, data["imdbIds"] else: return True, False, data["imdbNames"] else: return False, None, None async def syncCommands(self): collection = self.bot.database["last synced"] lastSynced = collection.find_one() now = time.time() if lastSynced["last synced"] < now - 86400: slashCommandList = str(await self.bot.slash.to_dict()) self.bot.log(f"Updating commands: {slashCommandList}") await self.bot.slash.sync_all_commands() idNumber = lastSynced["_id"] queryFilter = {"_id" : idNumber} update = {"$set" : {"last synced" : now}} collection.update_one(queryFilter, update)