diff --git a/pyircbot/modules/UnoPlay.py b/pyircbot/modules/UnoPlay.py index 0cb1eee..9e014d7 100644 --- a/pyircbot/modules/UnoPlay.py +++ b/pyircbot/modules/UnoPlay.py @@ -87,13 +87,17 @@ class UnoPlay(ModuleBase): # See if we play first if "plays first..." in trailing: message = trailing.split("The top card is")[1] - self.log.debug(">> we play first!") + self.log.info("we play first!") self.current_card = self.parsecard(message) - self.log.debug(">> top card: %s" % str(self.current_card)) + self.log.debug("top card: %s" % str(self.current_card)) if self.bot.get_nick() in trailing: self.shouldgo = True + # We need to choose a color + if "hoose a color %s" % self.bot.get_nick() in trailing: + self.pickcolor() + # See if someone passed to us if "passes" in trailing and self.bot.get_nick() in trailing: self.shouldgo = True @@ -102,16 +106,17 @@ class UnoPlay(ModuleBase): if "continuing with" in trailing and self.bot.get_nick() in trailing: self.shouldgo = True - # Parse misc played cards - # bug - if " plays " in trailing: - message = trailing.split(" plays ")[1].split(" ")[0] - self.current_card = self.parsecard(message) - self.log.debug(">> current card: %s" % str(self.current_card)) - - # After someone plays to us - if "to %s" % self.bot.get_nick() in trailing: - self.shouldgo = True + # After color change by bot + if "Current player " in trailing and "and chooses" in trailing: + print("BOT WILD") + color = trailing.split(" and chooses ")[1].split(" Current ")[0].strip() + self.current_card[2]['color'] = {'Blue': 'b', 'Red': 'r', 'Yellow': 'y', 'Green': 'g'}[color] + self.current_card[2]['number'] = -1 + self.current_card[2]['type'] = None + self.log.info("Color changed to %s " % self.current_card[2]['color']) + if "urrent player %s" % self.bot.get_nick() in trailing: + self.shouldgo = True + return # After color change if "play continues with " in trailing: @@ -119,30 +124,30 @@ class UnoPlay(ModuleBase): self.current_card[2]['color'] = {'Blue': 'b', 'Red': 'r', 'Yellow': 'y', 'Green': 'g'}[color] self.current_card[2]['number'] = -1 self.current_card[2]['type'] = None + self.log.info("Color changed to %s " % self.current_card[2]['color']) - self.log.debug("Color changed to %s " % self.current_card[2]['color']) - - # After color change by bot - if "Current player " in trailing and "and chooses" in trailing: - color = trailing.split(" and chooses ")[1].split(" Current ")[0].strip() - self.current_card[2]['color'] = {'Blue': 'b', 'Red': 'r', 'Yellow': 'y', 'Green': 'g'}[color] - self.current_card[2]['number'] = -1 - self.current_card[2]['type'] = None - self.log.debug("Color changed to %s " % self.current_card[2]['color']) - if "urrent player %s" % self.bot.get_nick() in trailing: + if self.bot.get_nick() in trailing: self.shouldgo = True + return + + # Parse misc played cards + # bug + if " plays " in trailing and "four cards" not in trailing: + message = trailing.split(" plays ")[1].split(" ")[0] + self.current_card = self.parsecard(message) + self.log.info("current card: %s" % str(self.current_card)) + + # After someone plays to us + if "to %s" % self.bot.get_nick() in trailing: + self.shouldgo = True # After color change to us if "play continues with %s" % self.bot.get_nick() in trailing: self.shouldgo = True - # We need to choose a color - if "hoose a color %s" % self.bot.get_nick() in trailing: - self.pickcolor() - # Reset if " by Marky" in trailing or "cards played in" in trailing: - self.log.debug(">> Reset") + self.log.info("System reset") self.current_card = None self.shouldgo = False self.has_drawn = False @@ -183,6 +188,8 @@ class UnoPlay(ModuleBase): Find all legal permutations starting with the card in play based on our hand. The first card of the chain with the highest point sum will be selected for play. """ + start = time.time() + def chain_next(cards, chain): """ Given some cards, (Cards == list of card-like data structures) @@ -223,7 +230,9 @@ class UnoPlay(ModuleBase): # Where chain is a list of card structs and chain_value is the point value of that chain. # The list is sorted by chain_value # pprint(chains) - self.log.info("Cards in hand: {}. Considering {} possible outcomes...".format(len(self.cards), len(chains))) + end = time.time() + self.log.info("Cards in hand: {}. Considered {} possible outcomes in {}ms..." + .format(len(self.cards), len(chains), round((end - start) * 1000, 2))) if not chains: return None # No valid moves :( @@ -260,7 +269,7 @@ class UnoPlay(ModuleBase): mycolors = sorted(mycolors.items(), key=lambda x: x[1]) mycolors.reverse() - self.log.debug("Sorted: %s" % str(mycolors)) + self.log.info("Color pick weights: %s" % str(mycolors)) self.sleep("beforepickcolor") self.bot.act_PRIVMSG(self.config["unochannel"], "co %s" % mycolors[0][0]) @@ -288,7 +297,7 @@ class UnoPlay(ModuleBase): if self.config["enable_delays"]: time.sleep(self.config["randomhuman_sleep"]) self.sleep("beforemove") - self.log.debug(">> playing %s" % move[0]) + self.log.debug("playing %s" % move[0]) self.playcard(move[0]) def getbestmove(self):