def visit_near_pokestops(bot, pokestops=None): # type: (PokemonGoBot, Optional[List[Fort]]) -> Dict[Str, List[PokeStop]] def log(text, color="black"): logger.log(text, color=color, prefix="PokeStop") if pokestops is None: return # If we're debugging, don't filter pokestops so we can test if they are on cooldown if not bot.config.debug: pokestops = filtered_forts(bot.stepper.current_lat, bot.stepper.current_lng, pokestops) now = int(time.time()) * 1000 for pokestop in pokestops: dist = distance(bot.stepper.current_lat, bot.stepper.current_lng, pokestop.latitude, pokestop.longitude) if dist < 15: if pokestop.cooldown_timestamp_ms < now: manager.fire_with_context("pokestop_arrived", bot, pokestop=pokestop) elif bot.config.debug: log( "Nearby fort found is in cooldown for {} ({}m away)".format( format_time((pokestop.cooldown_timestamp_ms - now) / 1000), ceil(dist) ), color="yellow", )
def visit_near_pokestops(self, bot, pokestops=None): # type: (PokemonGoBot, Optional[List[Fort]]) -> Dict[Str, List[PokeStop]] if pokestops is None: return # If we're debugging, don't filter pokestops so we can test if they are on cooldown if not bot.config["debug"]: pokestops = filtered_forts(bot.stepper.current_lat, bot.stepper.current_lng, pokestops) now = int(time.time()) * 1000 for pokestop in pokestops: dist = distance(bot.stepper.current_lat, bot.stepper.current_lng, pokestop.latitude, pokestop.longitude) if dist < 35: if pokestop.is_in_cooldown() is False: self.event_manager.fire_with_context('pokestop_arrived', bot, pokestop=pokestop) elif bot.config["debug"]: self.log( "Nearby fort found is in cooldown for {} ({}m away)". format( format_time( (pokestop.cooldown_timestamp_ms - now) / 1000), ceil(dist)), color="yellow")
def _work_on_forts(self, position, map_cells): forts = filtered_forts(position[0], position[1], sum([cell.get("forts", []) for cell in map_cells], [])) if forts: walk_worker = WalkTowardsFortWorker(forts[0], self) walk_worker.work() spinner_worker = SeenFortWorker(forts[0], self) spinner_worker.work()
def _work_on_forts(self, position, map_cells): # type: (Tuple[float, float], List[Cell]) -> None forts = filtered_forts(position[0], position[1], sum([cell.pokestops for cell in map_cells], [])) if forts: walk_worker = WalkTowardsFortWorker(forts[0], self) walk_worker.work() spinner_worker = SeenFortWorker(forts[0], self) spinner_worker.work()
def test_filtered_forts(self): forts = [ self._create_fort("pokestop", "test_1", 51.50204, -0.11955), self._create_fort("pokestop", "test_2", 51.503342, -0.119668), self._create_fort("pokestop", "test_3", 51.504250, -0.117458), self._create_fort("gym", "test_4", 51.503602, -0.118756) ] returned_forts = filtered_forts(51.503056, -0.119500, forts) assert len(returned_forts) == 3 assert returned_forts[0].fort_id == 'pokestop_test_2' assert returned_forts[2].fort_id == 'pokestop_test_3' assert returned_forts[1].fort_id == 'pokestop_test_1'
def work_on_cell(self, cell): # type: (Cell, bool) -> None self.fire("pokemon_found", encounters=cell.catchable_pokemon + cell.wild_pokemon) # TODO: Refactor WalkTowardsFortWorker # self.fire("pokestops_found", pokestops=cell.pokestops) pokestops = filtered_forts(self.position[0], self.position[1], cell.pokestops) for pokestop in pokestops: walk_worker = WalkTowardsFortWorker(pokestop, self) walk_worker.work() self.fire("pokestop_arrived", pokestop=pokestop)