diff --git a/.pylintrc b/.pylintrc index b24040ae08..e52082247f 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,3 +1,6 @@ [MESSAGES CONTROL] disable=line-too-long, - missing-docstring \ No newline at end of file + missing-docstring + +[TYPECHECK] +ignored-modules=distutils,distutils.core diff --git a/pokemongo_bot/cell_workers/evolve_all_worker.py b/pokemongo_bot/cell_workers/evolve_all_worker.py index 982f521a1c..ae8745b69c 100644 --- a/pokemongo_bot/cell_workers/evolve_all_worker.py +++ b/pokemongo_bot/cell_workers/evolve_all_worker.py @@ -2,7 +2,7 @@ from pokemongo_bot import logger from pokemongo_bot.human_behaviour import sleep -from item_list import Item +from pokemongo_bot.item_list import Item class EvolveAllWorker(object): diff --git a/pokemongo_bot/polyline_stepper.py b/pokemongo_bot/polyline_stepper.py deleted file mode 100644 index 1ac25dd9a4..0000000000 --- a/pokemongo_bot/polyline_stepper.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -from math import ceil - -from stepper import Stepper - -import logger -from cell_workers.utils import i2f -from human_behaviour import sleep -from polyline_walker import PolylineWalker - - -class PolylineStepper(Stepper): - - def _walk_to(self, speed, lat, lng, alt): - origin = ','.join([str(i2f(self.api._position_lat)), str(i2f(self.api._position_lng))]) - destination = ','.join([str(lat), str(lng)]) - polyline_walker = PolylineWalker(origin, destination, speed) - proposed_origin = polyline_walker.points[0] - proposed_destination = polyline_walker.points[-1] - proposed_lat = proposed_origin[0] - proposed_lng = proposed_origin[1] - if proposed_lat != lat and proposed_lng != lng: - logger.log('[#] Using _old_walk_to to go to the proposed_origin: {}' - .format(proposed_origin)) - self._old_walk_to(speed, proposed_lat, proposed_lng, alt) - if proposed_origin != proposed_destination: - duration = polyline_walker.get_total_distance() / speed - logger.log('[#] Using PolylineWalker from {} to {} for approx. {} seconds.' - .format(proposed_origin, proposed_destination, ceil(duration))) - while proposed_destination != polyline_walker.get_pos()[0]: - cLat, cLng = polyline_walker.get_pos()[0] - self.api.set_position(cLat, cLng, alt) - self.bot.heartbeat() - self._work_at_position(i2f(self.api._position_lat), i2f(self.api._position_lng), alt, False) - sleep(1) # sleep one second plus a random delta - if proposed_lat != self.api._position_lat and proposed_lng != self.api._position_lng: - logger.log('[#] Using _old_walk_to to go from the proposed destination : {} to {}' - .format(proposed_destination, (lat, lng))) - - self._old_walk_to(speed, lat, lng, alt) - - def _old_walk_to(self, speed, lat, lng, alt): - return super(PolylineStepper, self)._walk_to(speed, lat, lng, alt) diff --git a/pokemongo_bot/polyline_walker/__init__.py b/pokemongo_bot/walkers/__init__.py similarity index 51% rename from pokemongo_bot/polyline_walker/__init__.py rename to pokemongo_bot/walkers/__init__.py index 272b8375d4..95338c20cf 100644 --- a/pokemongo_bot/polyline_walker/__init__.py +++ b/pokemongo_bot/walkers/__init__.py @@ -1 +1,3 @@ +from polyline_generator import Polyline from polyline_walker import PolylineWalker + diff --git a/pokemongo_bot/polyline_walker/polyline_walker.py b/pokemongo_bot/walkers/polyline_generator.py similarity index 77% rename from pokemongo_bot/polyline_walker/polyline_walker.py rename to pokemongo_bot/walkers/polyline_generator.py index 2c5be3daaa..ff50885b98 100644 --- a/pokemongo_bot/polyline_walker/polyline_walker.py +++ b/pokemongo_bot/walkers/polyline_generator.py @@ -1,25 +1,24 @@ import time from itertools import chain from math import ceil - import haversine import polyline import requests -class PolylineWalker(object): +class Polyline(object): def __init__(self, origin, destination, speed): self.DISTANCE_API_URL='https://maps.googleapis.com/maps/api/directions/json?mode=walking' self.origin = origin self.destination = destination + self.URL = '{}&origin={}&destination={}'.format(self.DISTANCE_API_URL, + '{},{}'.format(*self.origin), + '{},{}'.format(*self.destination)) self.polyline_points = [x['polyline']['points'] for x in - requests.get(self.DISTANCE_API_URL+'&origin='+ - self.origin+'&destination='+ - self.destination - ).json()['routes'][0]['legs'][0]['steps']] + requests.get(self.URL).json()['routes'][0]['legs'][0]['steps']] self.speed = float(speed) - self.points = self.get_points(self.polyline_points) + self.points = [self.origin] + self.get_points(self.polyline_points) + [self.destination] self.lat, self.long = self.points[0][0], self.points[0][1] self.polyline = self.combine_polylines(self.points) self._timestamp = time.time() @@ -85,9 +84,15 @@ def get_pos(self): return self.calculate_coord(percentage_walked, *steps_dict[walked_end_step]) def calculate_coord(self, percentage, o, d): - lat = o[0]+ (d[0] -o[0]) * percentage - lon = o[1]+ (d[1] -o[1]) * percentage - return [(lat, lon)] + # If this is the destination then returning as such + if self.points[-1] == d: + return [d] + else: + # intermediary points returned with 5 decimals precision only + # this ensures ~3-50cm ofset from the geometrical point calculated + lat = o[0]+ (d[0] -o[0]) * percentage + lon = o[1]+ (d[1] -o[1]) * percentage + return [(round(lat, 5), round(lon, 5))] def get_total_distance(self): return ceil(sum([haversine.haversine(*x)*1000 for x in self.walk_steps()])) diff --git a/pokemongo_bot/polyline_walker/polyline_tester.py b/pokemongo_bot/walkers/polyline_generator_tester.py similarity index 82% rename from pokemongo_bot/polyline_walker/polyline_tester.py rename to pokemongo_bot/walkers/polyline_generator_tester.py index a8d0554e16..d58265618c 100644 --- a/pokemongo_bot/polyline_walker/polyline_tester.py +++ b/pokemongo_bot/walkers/polyline_generator_tester.py @@ -3,10 +3,10 @@ import haversine import polyline - -from polyline_walker import PolylineWalker - -a = PolylineWalker('Poststrasse+20,Zug,CH', 'Guggiweg+7,Zug,CH', 100) +from math import ceil +from polyline_generator import Polyline +a = Polyline((47.1706378, 8.5167405), (47.1700271, 8.518072999999998), 100) +print(a.points) print('Walking polyline: ', a.polyline) print('Encoded level: ','B'*len(a.points)) print('Initialted with speed: ', a.speed, 'm/s') diff --git a/pokemongo_bot/walkers/polyline_walker.py b/pokemongo_bot/walkers/polyline_walker.py new file mode 100644 index 0000000000..d3642c28de --- /dev/null +++ b/pokemongo_bot/walkers/polyline_walker.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from polyline_generator import Polyline +from math import ceil +from ..human_behaviour import sleep +from ..cell_workers.utils import i2f +from pokemongo_bot.step_walker import StepWalker +from pokemongo_bot import logger + +class PolylineWalker(StepWalker): + + def __init__(self, bot, speed, initLat, initLng, destLat, destLng): + super(PolylineWalker, self).__init__(bot, speed, initLat, initLng, destLat, destLng) + self.polyline_walker = Polyline((i2f(self.api._position_lat), i2f(self.api._position_lng)), + (self.destLat, self.destLng), self.speed) + logger.log('[#] {}'.format(self.polyline_walker.URL)) + + def step(self): + self.polyline_walker.unpause() + sleep(1) + self.polyline_walker.pause() + cLat, cLng = self.polyline_walker.get_pos()[0] + self.api.set_position(round(cLat, 5), round(cLng, 5), 0) + self.bot.heartbeat() + if self.destLat == cLat and self.destLng == cLng: + return True diff --git a/requirements.txt b/requirements.txt index 0eb44fb82c..a08b7ab147 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ -e git+https://github.com/tejado/pgoapi.git#egg=pgoapi geopy==1.11.0 +distribute==0.7.3 protobuf==3.0.0b4 requests==2.10.0 s2sphere==0.2.4 @@ -11,3 +12,4 @@ enum34==1.1.6 pyyaml==3.11 haversine==0.4.5 polyline==1.3.1 +pysmbus==0.1.post3 diff --git a/web b/web deleted file mode 160000 index 83463c2bcd..0000000000 --- a/web +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 83463c2bcd5c4360adbc41c61e6572406fec54ce