Skip to content

Commit

Permalink
Merge pull request #6045 from MerlionRock/dev
Browse files Browse the repository at this point in the history
Fixes: login issue, followpath with enable
  • Loading branch information
Jcolomar authored May 20, 2017
2 parents 1da9f62 + 6b3c48c commit b476375
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 57 deletions.
12 changes: 11 additions & 1 deletion pokecli.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,17 @@ def report_summary(bot):
return # Bot didn't actually start, no metrics to show.

metrics = bot.metrics
metrics.capture_stats()
try:
metrics.capture_stats()
except NotLoggedInException:
bot.event_manager.emit(
'api_error',
sender=bot,
level='info',
formatted='Not logged in, reconnecting in {:d} seconds'.format(5)
)
time.sleep(5)
return
logger.info('')
logger.info('Ran for {}'.format(metrics.runtime()))
logger.info('Total XP Earned: {} Average: {:.2f}/h'.format(metrics.xp_earned(), metrics.xp_per_hour()))
Expand Down
110 changes: 68 additions & 42 deletions pokemongo_bot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ def __init__(self, db, config):
self.catch_disabled = False

self.capture_locked = False # lock catching while moving to VIP pokemon

# Inform bot if there's a response
self.empty_response = False

client_id_file_path = os.path.join(_base_dir, 'data', 'mqtt_client_id')
saved_info = shelve.open(client_id_file_path)
Expand Down Expand Up @@ -955,6 +958,9 @@ def check_session(self, position):

def login(self):
status = {}
retry = 0
quit_login = False

self.event_manager.emit(
'login_started',
sender=self,
Expand All @@ -963,21 +969,36 @@ def login(self):
)
lat, lng = self.position[0:2]
self.api.set_position(lat, lng, self.alt) # or should the alt kept to zero?

while not quit_login:
try:
self.api.login(
self.config.auth_service,
str(self.config.username),
str(self.config.password))
# No exception, set quit_login = true
quit_login = True
except AuthException as e:
self.event_manager.emit(
'login_failed',
sender=self,
level='info',
formatted='Login process failed: {}'.format(e)
)
# Exception encountered. Retry 3 times, everytime increase wait time 5 secs
retry += 1
sleeptime = retry*5

try:
self.api.login(
self.config.auth_service,
str(self.config.username),
str(self.config.password))
except AuthException as e:
self.event_manager.emit(
'login_failed',
sender=self,
level='info',
formatted='Login process failed: {}'.format(e)
)

sys.exit()
self.event_manager.emit(
'login_failed',
sender=self,
level='info',
formatted="Retry {} time(s) for {} secs".format(retry,sleeptime)
)
sleep(retry*5)
# Quit after 3rd tries
if retry == 3:
sys.exit()

with self.database as conn:
c = conn.cursor()
Expand Down Expand Up @@ -1545,38 +1566,41 @@ def heartbeat(self):
responses = request.call()
except NotLoggedInException:
self.logger.warning('Unable to login, retying')
self.empty_response = True
except:
self.logger.warning('Error occured in heatbeat, retying')

if responses['responses']['GET_PLAYER']['success'] == True:
# we get the player_data anyway, might as well store it
self._player = responses['responses']['GET_PLAYER']['player_data']
self.event_manager.emit(
'player_data',
sender=self,
level='debug',
formatted='player_data: {player_data}',
data={'player_data': self._player}
)
if responses['responses']['CHECK_AWARDED_BADGES']['success'] == True:
# store awarded_badges reponse to be used in a task or part of heartbeat
self._awarded_badges = responses['responses']['CHECK_AWARDED_BADGES']

if 'awarded_badges' in self._awarded_badges:
i = 0
for badge in self._awarded_badges['awarded_badges']:
badgelevel = self._awarded_badges['awarded_badge_levels'][i]
badgename = badge_type_pb2._BADGETYPE.values_by_number[badge].name
i += 1
self.empty_response = True

if not self.empty_response:
if responses['responses']['GET_PLAYER']['success'] == True:
# we get the player_data anyway, might as well store it
self._player = responses['responses']['GET_PLAYER']['player_data']
self.event_manager.emit(
'badges',
'player_data',
sender=self,
level='info',
formatted='awarded badge: {badge}, lvl {level}',
data={'badge': badgename,
'level': badgelevel}
level='debug',
formatted='player_data: {player_data}',
data={'player_data': self._player}
)
human_behaviour.action_delay(3, 10)
if responses['responses']['CHECK_AWARDED_BADGES']['success'] == True:
# store awarded_badges reponse to be used in a task or part of heartbeat
self._awarded_badges = responses['responses']['CHECK_AWARDED_BADGES']

if 'awarded_badges' in self._awarded_badges:
i = 0
for badge in self._awarded_badges['awarded_badges']:
badgelevel = self._awarded_badges['awarded_badge_levels'][i]
badgename = badge_type_pb2._BADGETYPE.values_by_number[badge].name
i += 1
self.event_manager.emit(
'badges',
sender=self,
level='info',
formatted='awarded badge: {badge}, lvl {level}',
data={'badge': badgename,
'level': badgelevel}
)
human_behaviour.action_delay(3, 10)

try:
self.web_update_queue.put_nowait(True) # do this outside of thread every tick
Expand All @@ -1588,7 +1612,9 @@ def heartbeat(self):
def update_web_location_worker(self):
while True:
self.web_update_queue.get()
self.update_web_location()
#skip undate if no response
if not self.empty_response:
self.update_web_location()

def display_player_info(self):
player_stats = player()
Expand Down
32 changes: 18 additions & 14 deletions pokemongo_bot/cell_workers/follow_path.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,29 @@ class FollowPath(BaseTask):

def initialize(self):
self._process_config()
self.points = self.load_path()
self.status = STATUS_MOVING
self.waiting_end_time = 0
self.distance_unit = self.bot.config.distance_unit
self.append_unit = False
if self.enable:
self.points = self.load_path()
self.status = STATUS_MOVING
self.waiting_end_time = 0
self.distance_unit = self.bot.config.distance_unit
self.append_unit = False

if self.path_start_mode == 'closest':
self.ptr = self.find_closest_point_idx(self.points)
if self.path_start_mode == 'closest':
self.ptr = self.find_closest_point_idx(self.points)

else:
self.ptr = 0
else:
self.ptr = 0

if self.disable_location_output:
self.emit_event(
'followpath_output_disabled',
formatted="Bot in follow path mode, position update disabled. You will not be inform of path taken by bot."
)
if self.disable_location_output:
self.emit_event(
'followpath_output_disabled',
formatted="Bot in follow path mode, position update disabled. You will not be inform of path taken by bot."
)
else:
self.status = STATUS_FINISHED

def _process_config(self):
self.enable = self.config.get("enable", True)
self.path_file = self.config.get("path_file", None)
self.path_mode = self.config.get("path_mode", "linear")
self.path_start_mode = self.config.get("path_start_mode", "first")
Expand Down
1 change: 1 addition & 0 deletions pokemongo_bot/cell_workers/spin_fort.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ def work(self):
'items': awards
}
)
#time.sleep(10)
else:
self.emit_event(
'pokestop_empty',
Expand Down

0 comments on commit b476375

Please sign in to comment.