def initialize(config): bot = PokemonGoBot(config) bot.start() initialize_task(bot, config) bot.metrics.capture_stats() bot.health_record = BotEvent(config) return bot
def initialize(config): bot = PokemonGoBot(config) bot.start() initialize_task(bot,config) bot.metrics.capture_stats() bot.health_record = BotEvent(config) return bot
def main(): bot = False def handle_sigint(*args): raise SIGINTRecieved signal.signal(signal.SIGINT, handle_sigint) def get_commit_hash(): try: hash = subprocess.check_output(['git', 'rev-parse', 'HEAD'], stderr=subprocess.STDOUT)[:-1] return hash if all(c in string.hexdigits for c in hash) else "not found" except: return "not found" try: logger.info('PokemonGO Bot v1.0') logger.info('commit: ' + get_commit_hash()) sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) config = init_config() if not config: return logger.info('Configuration initialized') health_record = BotEvent(config) health_record.login_success() finished = False while not finished: try: bot = PokemonGoBot(config) bot.start() tree = TreeConfigBuilder(bot, config.raw_tasks).build() bot.workers = tree bot.metrics.capture_stats() bot.health_record = health_record bot.event_manager.emit( 'bot_start', sender=bot, level='info', formatted='Starting bot...' ) while True: bot.tick() except KeyboardInterrupt: bot.event_manager.emit( 'bot_exit', sender=bot, level='info', formatted='Exiting bot.' ) finished = True report_summary(bot) except NotLoggedInException: wait_time = config.reconnecting_timeout * 60 bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Log logged in, reconnecting in {:d}'.format(wait_time) ) time.sleep(wait_time) except ServerBusyOrOfflineException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server busy or offline' ) except ServerSideRequestThrottlingException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server is throttling, reconnecting in 30 seconds' ) time.sleep(30) except PermaBannedException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Probably permabanned, Game Over ! Play again at https://club.pokemon.com/us/pokemon-trainer-club/sign-up/' ) except GeocoderQuotaExceeded: raise Exception("Google Maps API key over requests limit.") except SIGINTRecieved: if bot: bot.event_manager.emit( 'bot_interrupted', sender=bot, level='info', formatted='Bot caught SIGINT. Shutting down.' ) report_summary(bot) except Exception as e: # always report session summary and then raise exception if bot: report_summary(bot) raise finally: # Cache here on SIGTERM, or Exception. Check data is available and worth caching. if bot: if bot.recent_forts[-1] is not None and bot.config.forts_cache_recent_forts: cached_forts_path = os.path.join( _base_dir, 'data', 'recent-forts-%s.json' % bot.config.username ) try: with open(cached_forts_path, 'w') as outfile: json.dump(bot.recent_forts, outfile) bot.event_manager.emit( 'cached_fort', sender=bot, level='debug', formatted='Forts cached.', ) except IOError as e: bot.event_manager.emit( 'error_caching_forts', sender=bot, level='debug', formatted='Error caching forts for {path}', data={'path': cached_forts_path} )
def main(): bot = False try: logger.info('PokemonGO Bot v1.0') sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) config = init_config() if not config: return logger.info('Configuration initialized') health_record = BotEvent(config) health_record.login_success() finished = False while not finished: try: bot = PokemonGoBot(config) bot.start() tree = TreeConfigBuilder(bot, config.raw_tasks).build() bot.workers = tree bot.metrics.capture_stats() bot.health_record = health_record bot.event_manager.emit( 'bot_start', sender=bot, level='info', formatted='Starting bot...' ) while True: bot.tick() except KeyboardInterrupt: bot.event_manager.emit( 'bot_exit', sender=bot, level='info', formatted='Exiting bot.' ) finished = True report_summary(bot) except NotLoggedInException: wait_time = config.reconnecting_timeout * 60 bot.event_manager.emit( 'api_error', sender=bot, level='info', formmated='Log logged in, reconnecting in {:s}'.format(wait_time) ) time.sleep(wait_time) except ServerBusyOrOfflineException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server busy or offline' ) except ServerSideRequestThrottlingException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server is throttling, reconnecting in 30 seconds' ) time.sleep(30) except GeocoderQuotaExceeded: raise Exception("Google Maps API key over requests limit.") except Exception as e: # always report session summary and then raise exception if bot: report_summary(bot) raise e
def main(): bot = False def handle_sigint(*args): raise SIGINTRecieved signal.signal(signal.SIGINT, handle_sigint) try: logger.info("PokemonGO Bot v1.0") sys.stdout = codecs.getwriter("utf8")(sys.stdout) sys.stderr = codecs.getwriter("utf8")(sys.stderr) config = init_config() if not config: return logger.info("Configuration initialized") health_record = BotEvent(config) health_record.login_success() finished = False while not finished: try: bot = PokemonGoBot(config) bot.start() tree = TreeConfigBuilder(bot, config.raw_tasks).build() bot.workers = tree bot.metrics.capture_stats() bot.health_record = health_record bot.event_manager.emit("bot_start", sender=bot, level="info", formatted="Starting bot...") while True: bot.tick() except KeyboardInterrupt: bot.event_manager.emit("bot_exit", sender=bot, level="info", formatted="Exiting bot.") finished = True report_summary(bot) except NotLoggedInException: wait_time = config.reconnecting_timeout * 60 bot.event_manager.emit( "api_error", sender=bot, level="info", formatted="Log logged in, reconnecting in {:d}".format(wait_time), ) time.sleep(wait_time) except ServerBusyOrOfflineException: bot.event_manager.emit("api_error", sender=bot, level="info", formatted="Server busy or offline") except ServerSideRequestThrottlingException: bot.event_manager.emit( "api_error", sender=bot, level="info", formatted="Server is throttling, reconnecting in 30 seconds" ) time.sleep(30) except PermaBannedException: bot.event_manager.emit( "api_error", sender=bot, level="info", formatted="Probably permabanned, Game Over ! Play again at https://club.pokemon.com/us/pokemon-trainer-club/sign-up/", ) except GeocoderQuotaExceeded: raise Exception("Google Maps API key over requests limit.") except SIGINTRecieved: if bot: bot.event_manager.emit( "bot_interrupted", sender=bot, level="info", formatted="Bot caught SIGINT. Shutting down." ) report_summary(bot) except Exception as e: # always report session summary and then raise exception if bot: report_summary(bot) raise finally: # Cache here on SIGTERM, or Exception. Check data is available and worth caching. if bot: if bot.recent_forts[-1] is not None and bot.config.forts_cache_recent_forts: cached_forts_path = os.path.join(_base_dir, "data", "recent-forts-%s.json" % bot.config.username) try: with open(cached_forts_path, "w") as outfile: json.dump(bot.recent_forts, outfile) bot.event_manager.emit("cached_fort", sender=bot, level="debug", formatted="Forts cached.") except IOError as e: bot.event_manager.emit( "error_caching_forts", sender=bot, level="debug", formatted="Error caching forts for {path}", data={"path": cached_forts_path}, )
def main(): bot = False def handle_sigint(*args): raise SIGINTRecieved signal.signal(signal.SIGINT, handle_sigint) def get_commit_hash(): try: hash = subprocess.check_output(['git', 'rev-parse', 'HEAD'], stderr=subprocess.STDOUT)[:-1] return hash if all(c in string.hexdigits for c in hash) else "not found" except: return "not found" try: logger.info('PokemonGO Bot v1.0') logger.info('commit: ' + get_commit_hash()) sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) config = init_config() if not config: return logger.info('Configuration initialized') health_record = BotEvent(config) health_record.login_success() finished = False while not finished: try: bot = PokemonGoBot(config) bot.start() tree = TreeConfigBuilder(bot, config.raw_tasks).build() bot.workers = tree bot.metrics.capture_stats() bot.health_record = health_record bot.event_manager.emit('bot_start', sender=bot, level='info', formatted='Starting bot...') while True: bot.tick() except KeyboardInterrupt: bot.event_manager.emit('bot_exit', sender=bot, level='info', formatted='Exiting bot.') finished = True report_summary(bot) except NotLoggedInException: wait_time = config.reconnecting_timeout * 60 bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Log logged in, reconnecting in {:d}'.format( wait_time)) time.sleep(wait_time) except ServerBusyOrOfflineException: bot.event_manager.emit('api_error', sender=bot, level='info', formatted='Server busy or offline') except ServerSideRequestThrottlingException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server is throttling, reconnecting in 30 seconds' ) time.sleep(30) except PermaBannedException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted= 'Probably permabanned, Game Over ! Play again at https://club.pokemon.com/us/pokemon-trainer-club/sign-up/' ) except GeocoderQuotaExceeded: raise Exception("Google Maps API key over requests limit.") except SIGINTRecieved: if bot: bot.event_manager.emit( 'bot_interrupted', sender=bot, level='info', formatted='Bot caught SIGINT. Shutting down.') report_summary(bot) except Exception as e: # always report session summary and then raise exception if bot: report_summary(bot) raise finally: # Cache here on SIGTERM, or Exception. Check data is available and worth caching. if bot: if bot.recent_forts[ -1] is not None and bot.config.forts_cache_recent_forts: cached_forts_path = os.path.join( _base_dir, 'data', 'recent-forts-%s.json' % bot.config.username) try: with open(cached_forts_path, 'w') as outfile: json.dump(bot.recent_forts, outfile) bot.event_manager.emit( 'cached_fort', sender=bot, level='debug', formatted='Forts cached.', ) except IOError as e: bot.event_manager.emit( 'error_caching_forts', sender=bot, level='debug', formatted='Error caching forts for {path}', data={'path': cached_forts_path})
def main(): bot = False try: def handle_sigint(*args): raise SIGINTRecieved signal.signal(signal.SIGINT, handle_sigint) logger.info('PokemonGO Bot v1.0') sys.stdout = codecs.getwriter('utf8')(sys.stdout) sys.stderr = codecs.getwriter('utf8')(sys.stderr) config = init_config() if not config: return logger.info('Configuration initialized') health_record = BotEvent(config) health_record.login_success() finished = False while not finished: try: bot = PokemonGoBot(config) bot.start() tree = TreeConfigBuilder(bot, config.raw_tasks).build() bot.workers = tree bot.metrics.capture_stats() bot.health_record = health_record bot.event_manager.emit( 'bot_start', sender=bot, level='info', formatted='Starting bot...' ) while True: bot.tick() except (KeyboardInterrupt, SIGINTRecieved): bot.event_manager.emit( 'bot_exit', sender=bot, level='info', formatted='Exiting bot.' ) finished = True report_summary(bot) except NotLoggedInException: wait_time = config.reconnecting_timeout * 60 bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Log logged in, reconnecting in {:d}'.format(wait_time) ) time.sleep(wait_time) except ServerBusyOrOfflineException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server busy or offline' ) except ServerSideRequestThrottlingException: bot.event_manager.emit( 'api_error', sender=bot, level='info', formatted='Server is throttling, reconnecting in 30 seconds' ) time.sleep(30) except GeocoderQuotaExceeded: raise Exception("Google Maps API key over requests limit.") except Exception as e: # always report session summary and then raise exception if bot: report_summary(bot) raise finally: # Cache here on SIGTERM, or Exception. Check data is available and worth caching. if bot: if bot.recent_forts[-1] is not None and bot.config.forts_cache_recent_forts: cached_forts_path = os.path.join( _base_dir, 'data', 'recent-forts-%s.json' % bot.config.username ) try: with open(cached_forts_path, 'w') as outfile: json.dump(bot.recent_forts, outfile) bot.event_manager.emit( 'cached_fort', sender=bot, level='debug', formatted='Forts cached.', ) except IOError as e: bot.event_manager.emit( 'error_caching_forts', sender=bot, level='debug', formatted='Error caching forts for {path}', data={'path': cached_forts_path} )