def calculate(self, balance: int) -> dict: self.decision = {"choice": None, "amount": 0, "id": None} if self.settings.strategy == Strategy.MOST_VOTED: self.decision["choice"] = self.__return_choice( OutcomeKeys.TOTAL_USERS) elif self.settings.strategy == Strategy.HIGH_ODDS: self.decision["choice"] = self.__return_choice(OutcomeKeys.ODDS) elif self.settings.strategy == Strategy.PERCENTAGE: self.decision["choice"] = self.__return_choice( OutcomeKeys.ODDS_PERCENTAGE) elif self.settings.strategy == Strategy.SMART: difference = abs(self.outcomes[0][OutcomeKeys.PERCENTAGE_USERS] - self.outcomes[1][OutcomeKeys.PERCENTAGE_USERS]) self.decision["choice"] = (self.__return_choice( OutcomeKeys.ODDS) if difference < self.settings.percentage_gap else self.__return_choice( OutcomeKeys.TOTAL_USERS)) if self.decision["choice"] is not None: index = char_decision_as_index(self.decision["choice"]) self.decision["id"] = self.outcomes[index]["id"] self.decision["amount"] = min( int(balance * (self.settings.percentage / 100)), self.settings.max_points, ) if (self.settings.stealth_mode is True and self.decision["amount"] >= self.outcomes[index][OutcomeKeys.TOP_POINTS]): reduce_amount = uniform(1, 5) self.decision["amount"] = ( self.outcomes[index][OutcomeKeys.TOP_POINTS] - reduce_amount) self.decision["amount"] = int(self.decision["amount"]) return self.decision
def skip(self) -> bool: if self.settings.filter_condition is not None: # key == by , condition == where key = self.settings.filter_condition.by condition = self.settings.filter_condition.where value = self.settings.filter_condition.value fixed_key = (key if key not in [ OutcomeKeys.DECISION_USERS, OutcomeKeys.DECISION_POINTS ] else key.replace("decision", "total")) if key in [OutcomeKeys.TOTAL_USERS, OutcomeKeys.TOTAL_POINTS]: compared_value = (self.outcomes[0][fixed_key] + self.outcomes[1][fixed_key]) else: outcome_index = char_decision_as_index(self.decision["choice"]) compared_value = self.outcomes[outcome_index][fixed_key] # Check if condition is satisfied if condition == Condition.GT: if compared_value > value: return False, compared_value elif condition == Condition.LT: if compared_value < value: return False, compared_value elif condition == Condition.GTE: if compared_value >= value: return False, compared_value elif condition == Condition.LTE: if compared_value <= value: return False, compared_value return True, compared_value # Else skip the bet else: return False, 0 # Default don't skip the bet
def calculate(self, balance: int) -> dict: self.decision = {"choice": None, "amount": 0, "id": None} if self.settings.strategy == Strategy.MOST_VOTED: self.decision["choice"] = self.__return_choice(OutcomeKeys.TOTAL_USERS) elif self.settings.strategy == Strategy.HIGH_ODDS: self.decision["choice"] = self.__return_choice(OutcomeKeys.ODDS) elif self.settings.strategy == Strategy.PERCENTAGE: self.decision["choice"] = self.__return_choice(OutcomeKeys.ODDS_PERCENTAGE) elif self.settings.strategy == Strategy.SMART: difference = abs( self.outcomes[0][OutcomeKeys.PERCENTAGE_USERS] - self.outcomes[1][OutcomeKeys.PERCENTAGE_USERS] ) self.decision["choice"] = ( self.__return_choice(OutcomeKeys.ODDS) if difference < self.settings.percentage_gap else self.__return_choice(OutcomeKeys.TOTAL_USERS) ) elif self.settings.strategy == Strategy.RANDOM: try: if os.path.exists('choiceA'): self.decision['choice'] = 'B' os.remove('choiceA') else: self.decision['choice'] = 'A' open('choiceA','w').close() except Exception as e: print(f'random coord fail, {e}') if random() > 0.5: self.decision["choice"] = 'A' else: self.decision["choice"] = 'B' if self.decision["choice"] is not None: index = char_decision_as_index(self.decision["choice"]) self.decision["id"] = self.outcomes[index]["id"] self.decision["amount"] = min( int(balance * (self.settings.percentage / 100)), self.settings.max_points, ) if ( self.settings.stealth_mode is True and self.decision["amount"] >= self.outcomes[index][OutcomeKeys.TOP_POINTS] ): reduce_amount = uniform(1, 5) self.decision["amount"] = ( self.outcomes[index][OutcomeKeys.TOP_POINTS] - reduce_amount ) self.decision["amount"] = int(self.decision["amount"]) return self.decision