From 4a8bde0fb7de66bea7e54e40e445c4c2229ceb90 Mon Sep 17 00:00:00 2001 From: Douglas Camata Date: Fri, 29 Jul 2016 16:07:43 +0200 Subject: [PATCH] Extract CatchLuredPokemonWorker from PokemonCatchWorker and improved worker order (#1627) * extracted lure catch worker from pokemon catch * removing information less logs --- pokemongo_bot/__init__.py | 9 +-- pokemongo_bot/cell_workers/__init__.py | 1 + .../catch_lured_pokemon_worker.py | 57 +++++++++++++++++++ .../catch_visible_pokemon_worker.py | 28 +-------- .../cell_workers/move_to_fort_worker.py | 2 +- pokemongo_bot/spiral_navigator.py | 5 -- pokemongo_bot/step_walker.py | 2 - 7 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 pokemongo_bot/cell_workers/catch_lured_pokemon_worker.py diff --git a/pokemongo_bot/__init__.py b/pokemongo_bot/__init__.py index 9b15cdd359..0df8d345df 100644 --- a/pokemongo_bot/__init__.py +++ b/pokemongo_bot/__init__.py @@ -36,8 +36,9 @@ class PokemonGoBot(object): cell_workers.EvolveAllWorker, cell_workers.RecycleItemsWorker, cell_workers.CatchVisiblePokemonWorker, - cell_workers.SeenFortWorker, - cell_workers.MoveToFortWorker + cell_workers.MoveToFortWorker, + cell_workers.CatchLuredPokemonWorker, + cell_workers.SeenFortWorker ] @property @@ -83,7 +84,9 @@ def _setup_event_system(self): # self.event_manager.emit('location', 'level'='info', data={'lat': 1, 'lng':1}), def tick(self): + logger.log('') self.cell = self.get_meta_cell() + self.tick_count +=1 # Check if session token has expired self.check_session(self.position[0:2]) @@ -94,8 +97,6 @@ def tick(self): self.navigator.take_step() - self.tick_count +=1 - def get_meta_cell(self): location = self.position[0:2] cells = self.find_close_cells(*location) diff --git a/pokemongo_bot/cell_workers/__init__.py b/pokemongo_bot/cell_workers/__init__.py index 93b1ebba83..e176c1adf0 100644 --- a/pokemongo_bot/cell_workers/__init__.py +++ b/pokemongo_bot/cell_workers/__init__.py @@ -8,3 +8,4 @@ from catch_visible_pokemon_worker import CatchVisiblePokemonWorker from recycle_items_worker import RecycleItemsWorker from incubate_eggs_worker import IncubateEggsWorker +from catch_lured_pokemon_worker import CatchLuredPokemonWorker diff --git a/pokemongo_bot/cell_workers/catch_lured_pokemon_worker.py b/pokemongo_bot/cell_workers/catch_lured_pokemon_worker.py new file mode 100644 index 0000000000..22591b6b37 --- /dev/null +++ b/pokemongo_bot/cell_workers/catch_lured_pokemon_worker.py @@ -0,0 +1,57 @@ + +import json +from utils import distance, format_dist, i2f +from pokemongo_bot.human_behaviour import sleep +from pokemongo_bot import logger +from pokemongo_bot.step_walker import StepWalker +from pokemongo_bot.cell_workers import PokemonCatchWorker + + +class CatchLuredPokemonWorker(object): + def __init__(self, bot): + self.bot = bot + self.cell = bot.cell; + self.api = bot.api + self.config = bot.config + self.position = bot.position + + def work(self): + if not self.config.catch_pokemon: + return + + lured_pokemon = self.get_lured_pokemon() + if lured_pokemon: + self.catch_pokemon(lured_pokemon) + + def get_lured_pokemon(self): + forts = self.bot.get_forts(order_by_distance=True) + + if len(forts) == 0: + return False + + fort = forts[0] + + self.api.fort_details(fort_id=fort['id'], + latitude=fort['latitude'], + longitude=fort['longitude']) + + response_dict = self.api.call() + fort_details = response_dict.get('responses', {}).get('FORT_DETAILS', {}) + fort_name = fort_details.get('name', 'Unknown').encode('utf8', 'replace') + + encounter_id = fort.get('lure_info', {}).get('encounter_id', None) + + pokemon = { + 'encounter_id': encounter_id, + 'fort_id': fort['id'], + 'latitude': fort['latitude'], + 'longitude': fort['longitude'] + } + + return pokemon + + def catch_pokemon(self, pokemon): + worker = PokemonCatchWorker(pokemon, self.bot) + return_value = worker.work() + + return return_value diff --git a/pokemongo_bot/cell_workers/catch_visible_pokemon_worker.py b/pokemongo_bot/cell_workers/catch_visible_pokemon_worker.py index 4031c4db20..b9e54aae39 100644 --- a/pokemongo_bot/cell_workers/catch_visible_pokemon_worker.py +++ b/pokemongo_bot/cell_workers/catch_visible_pokemon_worker.py @@ -6,6 +6,7 @@ from pokemongo_bot.step_walker import StepWalker from pokemongo_bot.cell_workers import PokemonCatchWorker + class CatchVisiblePokemonWorker(object): def __init__(self, bot): self.bot = bot @@ -44,33 +45,6 @@ def work(self): lambda x: distance(self.position[0], self.position[1], x['latitude'], x['longitude'])) return self.catch_pokemon(self.cell['wild_pokemons'][0]) - lured_pokemon = self.get_lured_pokemon() - if lured_pokemon: - self.catch_pokemon(lured_pokemon) - - def get_lured_pokemon(self): - forts = self.bot.get_forts(order_by_distance=True) - fort = forts[0] - - self.api.fort_details(fort_id=fort['id'], - latitude=fort['latitude'], - longitude=fort['longitude']) - - response_dict = self.api.call() - fort_details = response_dict.get('responses', {}).get('FORT_DETAILS', {}) - fort_name = fort_details.get('name', 'Unknown').encode('utf8', 'replace') - - encounter_id = fort.get('lure_info', {}).get('encounter_id', None) - - pokemon = { - 'encounter_id': encounter_id, - 'fort_id': fort['id'], - 'latitude': fort['latitude'], - 'longitude': fort['longitude'] - } - - return pokemon - def catch_pokemon(self, pokemon): worker = PokemonCatchWorker(pokemon, self.bot) return_value = worker.work() diff --git a/pokemongo_bot/cell_workers/move_to_fort_worker.py b/pokemongo_bot/cell_workers/move_to_fort_worker.py index d5489dfc4c..62e043d0b7 100644 --- a/pokemongo_bot/cell_workers/move_to_fort_worker.py +++ b/pokemongo_bot/cell_workers/move_to_fort_worker.py @@ -53,7 +53,7 @@ def work(self): if not step_walker.step(): return WorkerResult.RUNNING - logger.log('Arrived at Pokestop') + logger.log('Arrived at pokestop.') return WorkerResult.SUCCESS def get_nearest_fort(self): diff --git a/pokemongo_bot/spiral_navigator.py b/pokemongo_bot/spiral_navigator.py index b07c8c2020..63e83ce02e 100644 --- a/pokemongo_bot/spiral_navigator.py +++ b/pokemongo_bot/spiral_navigator.py @@ -48,11 +48,6 @@ def take_step(self): point = self.points[self.ptr] self.cnt += 1 - if self.cnt == 1: - logger.log('Scanning area for objects....') - - # Scan location math - if self.config.walk > 0: step_walker = StepWalker( self.bot, diff --git a/pokemongo_bot/step_walker.py b/pokemongo_bot/step_walker.py index 9c24b04908..b39cb4ce9d 100644 --- a/pokemongo_bot/step_walker.py +++ b/pokemongo_bot/step_walker.py @@ -40,8 +40,6 @@ def __init__(self, bot, speed, destLat, destLng): def step(self): if (self.dLat == 0 and self.dLng == 0) or self.dist < self.speed: - if sys.stdout.isatty(): - sys.stdout.write('\n') self.api.set_position(self.destLat, self.destLng, 0) return True