import asyncio import discord import json from funcs import logThis, deleteGame from .money import addMoney from .fourInARow import parseFourInARow, fourInARowAI from .blackjack import blackjackContinue, blackjackFinish from .hex import parseHex, hexAI from .monopoly import parseMonopoly, monopolyContinue from .hangman import parseHangman # Deletes a message async def deleteMessage(imageLocation,channel): try: logThis("Finding old image") with open("resources/games/oldImages/"+imageLocation, "r") as f: oldImage = await channel.fetch_message(int(f.read())) logThis("Deleting old image") await oldImage.delete() except: oldImage = "" return oldImage # 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: 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: addMoney(data[str(channel.id)]["players"][winner-1].lower(),20) #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)) # Loop of blackjack game rounds async def blackjackLoop(channel,gameRound,gameID): logThis("Loop "+str(gameRound),str(channel.id)) with open("resources/games/oldImages/blackjack"+str(channel.id), "r") as f: oldImage = await channel.fetch_message(int(f.read())) new_message, allStanding, gamedone = blackjackContinue(str(channel.id)) if new_message != "": logThis(new_message,str(channel.id)) await channel.send(new_message) if gamedone == False: await oldImage.delete() oldImage = await channel.send(file = discord.File("resources/games/blackjackTables/blackjackTable"+str(channel.id)+".png")) with open("resources/games/oldImages/blackjack"+str(channel.id), "w") as f: f.write(str(oldImage.id)) try: if allStanding: await asyncio.sleep(5) else: await asyncio.sleep(120) except: logThis("Loop "+str(gameRound)+" interrupted (error code 1321)") with open("resources/games/games.json", "r") as f: data = json.load(f) if str(channel.id) in data["blackjack games"]: realRound = data["blackjack games"][str(channel.id)]["round"] realGameID = data["blackjack games"][str(channel.id)]["id"] if gameRound == realRound and realGameID == gameID: if gamedone == False: logThis("Loop "+str(gameRound)+" calling blackjackLoop()",str(channel.id)) await blackjackLoop(channel,gameRound+1,gameID) else: try: new_message = blackjackFinish(str(channel.id)) except: logThis("Something fucked up (error code 1310)") await channel.send(new_message) else: logThis("Ending loop on round "+str(gameRound),str(channel.id)) else: logThis("Ending loop on round "+str(gameRound),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,command = "start"): try: response, showImage, deleteImage, remainingLetters = parseHangman(str(channel.id),user,command) except: logThis("Error parsing command (error code 1701)") await channel.send(response) logThis(response,str(channel.id)) if showImage: if deleteImage: oldImage = await deleteMessage("hangman"+str(channel.id),channel) oldImage = await channel.send(file = discord.File("resources/games/hangmanBoards/hangmanBoard"+str(channel.id)+".png")) with open("resources/games/oldImages/hangman"+str(channel.id), "w") as f: f.write(str(oldImage.id))