import asyncio import discord import json from funcs import logThis, addMoney, deleteGame, parseFourInARow, fourInARowAI, blackjackContinue, blackjackFinish, parseHex, hexAI, parseMonopoly, monopolyContinue # 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/games.json", "r") as f: data = json.load(f) try: with open("resources/games/oldImages/hex"+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["hex games"][str(channel.id)]["winner"] if winner != 0: addMoney(data["hex games"][str(channel.id)]["players"][winner-1].lower(),20) deleteGame("hex games",str(channel.id)) # 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")