Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes: login issue, followpath with enable #6045

Merged
merged 5 commits into from
May 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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