import asyncio import discord import json from funcs import logThis, deleteGame from .money import addMoney from .fourInARow import parseFourInARow, fourInARowAI from .hex import parseHex, hexAI from .monopoly import parseMonopoly, monopolyContinue from .hangman import parseHangman # Deletes a message async def deleteMessage(imageLocation,channel): try: with open("resources/games/oldImages/"+imageLocation, "r") as f: messages = f.read().splitlines() for message in messages: oldMessage = await channel.fetch_message(int(message)) logThis("Deleting old message") await oldMessage.delete() except: oldMessage = "" return oldMessage # Runs Hex async def runHex(channel,command,user): try: response, showImage, deleteImage, gameDone, gwendoTurn = parseHex(command,str(channel.id),user) except: logThis("Error parsing command (error code 1510)") await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: try: oldImage = await deleteMessage("hex"+str(channel.id),channel) except: logThis("Error deleting old image (error code 1501)") oldImage = await channel.send(file = discord.File("resources/games/hexBoards/board"+str(channel.id)+".png")) if not gameDone: if gwendoTurn: try: response, showImage, deleteImage, gameDone, gwendoTurn = hexAI(str(channel.id)) except: response, showImage, deleteImage, gameDone, gwendoTurn = "An AI error occured",False,False,False,False logThis("AI error (error code 1520)") await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: await oldImage.delete() oldImage = await channel.send(file = discord.File("resources/games/hexBoards/board"+str(channel.id)+".png")) else: with open("resources/games/oldImages/hex"+str(channel.id), "w") as f: f.write(str(oldImage.id)) if gameDone: with open("resources/games/hexGames.json", "r") as f: data = json.load(f) winner = data[str(channel.id)]["winner"] if winner != 0 and data[channel]["players"][0] != data[channel]["players"][1]: # player1 != player2 winnings = data[str(channel.id)]["difficulty"]*10 addMoney(data[str(channel.id)]["players"][winner-1].lower(),winnings) #deleteGame("hex games",str(channel.id)) with open("resources/games/hexGames.json", "r") as f: data = json.load(f) del data[str(channel.id)] with open("resources/games/hexGames.json", "w") as f: json.dump(data,f,indent=4) # Runs Four in a Row async def fiar(channel,command,user): try: response, showImage, deleteImage, gameDone, gwendoTurn = parseFourInARow(command,str(channel.id),user) except: logThis("Error parsing command (error code 1410)") await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: try: oldImage = await deleteMessage("fourInARow"+str(channel.id),channel) except: logThis("Error deleting message (error code 1401)") oldImage = await channel.send(file = discord.File("resources/games/4InARowBoards/board"+str(channel.id)+".png")) if gameDone == False: if gwendoTurn: try: response, showImage, deleteImage, gameDone, gwendoTurn = fourInARowAI(str(channel.id)) except: logThis("AI error (error code 1420)") await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: await oldImage.delete() oldImage = await channel.send(file = discord.File("resources/games/4InARowBoards/board"+str(channel.id)+".png")) if gameDone == False: with open("resources/games/oldImages/fourInARow"+str(channel.id), "w") as f: f.write(str(oldImage.id)) try: reactions = ["1️⃣","2️⃣","3️⃣","4️⃣","5️⃣","6️⃣","7️⃣"] for reaction in reactions: await oldImage.add_reaction(reaction) except: logThis("Image deleted before I could react to all of them") else: with open("resources/games/oldImages/fourInARow"+str(channel.id), "w") as f: f.write(str(oldImage.id)) try: reactions = ["1️⃣","2️⃣","3️⃣","4️⃣","5️⃣","6️⃣","7️⃣"] for reaction in reactions: await oldImage.add_reaction(reaction) except: logThis("Image deleted before I could react to all of them") if gameDone: with open("resources/games/games.json", "r") as f: data = json.load(f) try: with open("resources/games/oldImages/fourInARow"+str(channel.id), "r") as f: oldImage = await channel.fetch_message(int(f.read())) await oldImage.delete() except: logThis("The old image was already deleted") winner = data["4 in a row games"][str(channel.id)]["winner"] difficulty = int(data["4 in a row games"][str(channel.id)]["difficulty"]) reward = difficulty**2 + 5 if winner != 0: if data["4 in a row games"][str(channel.id)]["players"][winner-1].lower() != "gwendolyn": addMoney(data["4 in a row games"][str(channel.id)]["players"][winner-1].lower(),reward) with open("resources/games/games.json", "r") as f: data = json.load(f) #why is this here? deleteGame("4 in a row games",str(channel.id)) async def runMonopoly(channel, command, user): try: response, showImage, deleteImage, gameStarted, gameContinue = parseMonopoly(command,str(channel.id),user) except: logThis("Error parsing command (error code 1610)") if response != "": await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: try: oldImage = await deleteMessage("monopoly"+str(channel.id),channel) except: logThis("Error deleting message (error code 1601)") oldImage = await channel.send(file = discord.File("resources/games/monopolyBoards/monopolyBoard"+str(channel.id)+".png")) with open("resources/games/oldImages/monopoly"+str(channel.id), "w") as f: f.write(str(oldImage.id)) if gameContinue: if gameStarted: await asyncio.sleep(60) else: await asyncio.sleep(3) response, showImage, deleteImage, gameDone = monopolyContinue(str(channel.id)) em = discord.Embed(description=response,colour = 0x59f442) await channel.send(embed=em) if showImage: if deleteImage: try: oldImage = await deleteMessage("monopoly"+str(channel.id),channel) except: logThis("Error deleting message (error code 1601)") oldImage = await channel.send(file = discord.File("resources/games/monopolyBoards/monopolyBoard"+str(channel.id)+".png")) with open("resources/games/oldImages/monopoly"+str(channel.id), "w") as f: f.write(str(oldImage.id)) if gameDone == False: try: await oldImage.add_reaction("🎲") except: logThis("Image deleted before I could react to all of them") async def runHangman(channel,user,apiKey = "",command = "start"): try: response, showImage, deleteImage, remainingLetters = parseHangman(str(channel.id),user,command,apiKey) except: logThis("Error parsing command (error code 1701)") if response != "": await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: await deleteMessage("hangman"+str(channel.id),channel) oldImage = await channel.send(file = discord.File("resources/games/hangmanBoards/hangmanBoard"+str(channel.id)+".png")) if len(remainingLetters) > 15: otherMessage = await channel.send("_ _") reactionMessages = {oldImage : remainingLetters[:15],otherMessage : remainingLetters[15:]} else: otherMessage = "" reactionMessages = {oldImage : remainingLetters} oldMessages = str(oldImage.id) if otherMessage != "": oldMessages += "\n"+str(otherMessage.id) with open("resources/games/oldImages/hangman"+str(channel.id), "w") as f: f.write(oldMessages) try: for message, letters in reactionMessages.items(): for letter in letters: emoji = chr(ord(letter)+127397) await message.add_reaction(emoji) except: logThis("Image deleted before adding all reactions")