def run(self): log = logging.getLogger(__name__) history = History() preflop_url, preflop_url_backup = self.updater.get_preflop_sheet_url() try: history.preflop_sheet = pd.read_excel(preflop_url, sheet_name=None, engine='openpyxl') except: history.preflop_sheet = pd.read_excel(preflop_url_backup, sheet_name=None, engine='openpyxl') self.game_logger.clean_database() strategy = StrategyHandler() strategy.read_strategy() preflop_state = CurrentHandPreflopState() mongo = MongoManager() table_scraper_name = None while True: # reload table if changed config = ConfigObj(CONFIG_FILENAME) if table_scraper_name != config['table_scraper_name']: table_scraper_name = config['table_scraper_name'] log.info( f"Loading table scraper info for {table_scraper_name}") table_dict = mongo.get_table(table_scraper_name) if self.gui_signals.pause_thread: while self.gui_signals.pause_thread: time.sleep(0.5) if self.gui_signals.exit_thread: sys.exit() ready = False while not ready: strategy.read_strategy() table = TableScreenBased(strategy, table_dict, self.gui_signals, self.game_logger, version) mouse = MouseMoverTableBased(table_dict) mouse.move_mouse_away_from_buttons_jump() ready = table.take_screenshot(True, strategy) and \ table.get_top_left_corner(strategy) and \ table.check_for_captcha(mouse) and \ table.get_lost_everything(history, table, strategy, self.gui_signals) and \ table.check_for_imback(mouse) and \ table.get_my_cards(history) and \ table.get_new_hand(mouse, history, strategy) and \ table.get_table_cards(history) and \ table.upload_collusion_wrapper(strategy, history) and \ table.get_dealer_position() and \ table.check_fast_fold(history, strategy, mouse) and \ table.check_for_button() and \ table.get_round_number(history) and \ table.check_for_checkbutton() and \ table.init_get_other_players_info() and \ table.get_other_player_status(strategy, history) and \ table.get_other_player_names(strategy) and \ table.get_other_player_funds(strategy) and \ table.get_total_pot_value(history) and \ table.get_round_pot_value(history) and \ table.check_for_call() and \ table.check_for_betbutton() and \ table.check_for_allincall() and \ table.get_current_call_value(strategy) and \ table.get_current_bet_value(strategy) if not self.gui_signals.pause_thread: config = ConfigObj(CONFIG_FILENAME) m = run_montecarlo_wrapper(strategy, self.gui_signals, config, ui, table, self.game_logger, preflop_state, history) self.gui_signals.signal_progressbar_increase.emit(20) d = Decision(table, history, strategy, self.game_logger) d.make_decision(table, history, strategy, self.game_logger) self.gui_signals.signal_progressbar_increase.emit(10) if self.gui_signals.exit_thread: sys.exit() self.update_most_gui_items(preflop_state, strategy, m, table, d, history, self.gui_signals) log.info("Equity: " + str(table.equity * 100) + "% -> " + str(int(table.assumedPlayers)) + " (" + str(int(table.other_active_players)) + "-" + str(int(table.playersAhead)) + "+1) Plr") log.info("Final Call Limit: " + str(d.finalCallLimit) + " --> " + str(table.minCall)) log.info("Final Bet Limit: " + str(d.finalBetLimit) + " --> " + str(table.minBet)) log.info("Pot size: " + str((table.totalPotValue)) + " -> Zero EV Call: " + str(round(d.maxCallEV, 2))) log.info("+++++++++++++++++++++++ Decision: " + str(d.decision) + "+++++++++++++++++++++++") mouse_target = d.decision if mouse_target == 'Call' and table.allInCallButton: mouse_target = 'Call2' mouse.mouse_action(mouse_target, table.tlc) table.time_action_completed = datetime.datetime.utcnow() filename = str(history.GameID) + "_" + str( table.gameStage) + "_" + str(history.round_number) + ".png" log.debug("Saving screenshot: " + filename) pil_image = table.crop_image(table.entireScreenPIL, table.tlc[0], table.tlc[1], table.tlc[0] + 950, table.tlc[1] + 650) pil_image.save("log/screenshots/" + filename) self.gui_signals.signal_status.emit("Logging data") t_log_db = threading.Thread( name='t_log_db', target=self.game_logger.write_log_file, args=[strategy, history, table, d]) t_log_db.daemon = True t_log_db.start() # self.game_logger.write_log_file(strategy, history, table, d) history.previousPot = table.totalPotValue history.histGameStage = table.gameStage history.histDecision = d.decision history.histEquity = table.equity history.histMinCall = table.minCall history.histMinBet = table.minBet history.hist_other_players = table.other_players history.first_raiser = table.first_raiser history.first_caller = table.first_caller history.previous_decision = d.decision history.lastRoundGameID = history.GameID history.previous_round_pot_value = table.round_pot_value history.last_round_bluff = False if table.currentBluff == 0 else True if table.gameStage == 'PreFlop': preflop_state.update_values(table, d.decision, history, d) mongo.increment_plays(table_scraper_name) log.info("=========== round end ===========")
def test_increment_plays(): mongo = MongoManager() mongo.increment_plays("PartyPoker 6 Players Fast Forward $1-$2 NL Hold'em")