import random from funcs import logThis from .monopolyDraw import DrawMonopoly rulesAndTerms = { "pass go money" : 200, "money term" : "GP" } class Monopoly(): def __init__(self, bot): self.bot = bot self.draw = DrawMonopoly(bot) def monopolyStart(self, channel): logThis("Starting a monopoly game") game = self.bot.database["monopoly games"].find_one({"_id":channel}) if game == None: buildings = [0] * 40 newGame = {"_id":channel,"players" : {}, "player list" : [],"turn" : 0, "buildings" : buildings, "last roll" : [0,0], "started" : False} self.bot.database["monopoly games"].insert_one(newGame) #try: self.draw.drawImage(channel) #except: # logThis("Error drawing board (error code 1640)") return "Started a monopoly game. Use \"!monopoly join\" to join within the next minute.", True, False, True, True else: return "There's already a monopoly game going on.", False, False, False, False def monopolyJoin(self,channel,user): game = self.bot.database["monopoly games"].find_one({"_id":channel}) if game != None: if not game["started"]: if user not in game["players"]: if len(game["players"]) < 6: newPlayer = {"position" : 0, "properties" : [], "money" : 1500, "doubles" : 0} self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"players."+user:newPlayer}}) return self.bot.funcs.getName(user)+" has joined the game.", False, False, False, False else: return "There are already 6 players in the game.", False, False, False, False else: return "You're already in the game!", False, False, False, False else: return "It's too late to join.", False, False, False, False else: return "There's no game going on.", False, False, False, False def parseMonopoly(self, command, channel, user): logThis("Parsing "+command) commands = command.split() if command in [" ", ""] or commands[0] == "start": try: return self.monopolyStart(channel) except: logThis("Error starting game (error code 1620)") elif commands[0] == "join": try: return self.monopolyJoin(channel,user) except: logThis("Error joining game (error code 1630)") elif commands[0] == "roll": try: return self.monopolyRoll(channel,user) except: logThis("Error rolling (error code 1650)") elif commands[0] == "stop": return self.monopolyStop(channel) else: return "I didn't understand that (error code 1602)", False, False, False, False def monopolyContinue(self, channel): game = self.bot.database["monopoly games"].find_one({"_id":channel}) if game != None: if game["started"] == False: self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"started":True}}) playerList = list(game["players"].keys()) random.shuffle(playerList) self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"player list":playerList}}) turn = 0 else: if game["last roll"][0] == game["last roll"][1]: turn = game["turn"] else: turn = (game["turn"] + 1)%len(game["player list"]) self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"turn":turn}}) playerList = list(game["players"].keys()) #try: self.draw.drawImage(channel) #except: # logThis("Error drawing board (error code 1640)") if playerList == []: return "No one joined. Ending game.", False, True, True else: message = "It's "+self.bot.funcs.getName(playerList[turn])+"'s turn. Use the 🎲 reaction to roll. You can also use \"!monopoly trade\" at any time." return message, True, True, False def monopolyRoll(self, channel,user): game = self.bot.database["monopoly games"].find_one({"_id":channel}) turn = game["turn"] currentPlayer = game["player list"][turn] if user == currentPlayer or self.bot.options.testing: rolls = [random.randint(1,6),random.randint(1,6)] message = self.bot.funcs.getName(user)+" rolled a "+str(rolls[0])+" and a "+str(rolls[1])+"." if rolls[0] == rolls[1]: message += " Doubbles!" roll = rolls[0] + rolls[1] oldPosition = game["players"][user]["position"] newPosition = (oldPosition + roll)%40 if newPosition < oldPosition: self.bot.database["monopoly games"].update_one({"_id":channel}, {"$inc":{"players."+user+".money":rulesAndTerms["pass go money"]}}) message += "\nYou passed go and got "+str(rulesAndTerms["pass go money"])+" "+rulesAndTerms["money term"]+"." self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"players."+user+".position":newPosition}}) self.bot.database["monopoly games"].update_one({"_id":channel},{"$set":{"last roll":rolls}}) #try: self.draw.drawImage(channel) #except: # logThis("Error drawing board (error code 1640)") return message, True, True, False, True else: return "", False, False, False, False def monopolyStop(self,channel): self.bot.funcs.deleteGame("monopoly games",channel) return "Stopped game", False, False, False, False