From dc9afd188caea28d70254455c4b8ef3667ec489f Mon Sep 17 00:00:00 2001 From: DBa2016 Date: Sun, 28 Aug 2016 18:04:45 +0200 Subject: [PATCH] - debug improvements for MoveToMap - fix for Telegram to accept "@username" as "master", too, along with numeric IDs --- pokemongo_bot/__init__.py | 8 ++++++ .../cell_workers/move_to_map_pokemon.py | 25 ++++++++++++++----- pokemongo_bot/cell_workers/telegram_task.py | 17 ++++++++++++- .../event_handlers/telegram_handler.py | 17 ++++++++++--- 4 files changed, 56 insertions(+), 11 deletions(-) diff --git a/pokemongo_bot/__init__.py b/pokemongo_bot/__init__.py index 6891da550e..5d9a945628 100644 --- a/pokemongo_bot/__init__.py +++ b/pokemongo_bot/__init__.py @@ -183,6 +183,8 @@ def _register_events(self): self.event_manager.register_event('set_start_location') self.event_manager.register_event('load_cached_location') self.event_manager.register_event('location_cache_ignored') + + self.event_manager.register_event('debug') # ignore candy above threshold self.event_manager.register_event( @@ -592,6 +594,12 @@ def _register_events(self): 'moving_to_pokemon_throught_fort', parameters=('fort_name', 'distance','poke_name','poke_dist') ) + self.event_manager.register_event( + 'move_to_map_pokemon', + parameters=('message') + ) + + # cached recent_forts self.event_manager.register_event('loaded_cached_forts') diff --git a/pokemongo_bot/cell_workers/move_to_map_pokemon.py b/pokemongo_bot/cell_workers/move_to_map_pokemon.py index a18a77545d..1003f781e0 100644 --- a/pokemongo_bot/cell_workers/move_to_map_pokemon.py +++ b/pokemongo_bot/cell_workers/move_to_map_pokemon.py @@ -3,6 +3,11 @@ Moves a trainer to a Pokemon. Events: + move_to_map_pokemon + When a generic message is logged + Returns: + message: Log message. + move_to_map_pokemon_fail When the worker fails. Returns: @@ -83,7 +88,7 @@ SNIPE_MAX_IN_CHAIN = 2 # Don't call sniper every time in workers -SNIPE_SKIP_IN_ROUND = 30 +SNIPE_SKIP_IN_ROUND = 5 DEBUG_ON = False @@ -130,7 +135,13 @@ def get_pokemon_from_social(self): pokemon['is_vip'] = pokemon['name'] in self.bot.config.vips if pokemon['name'] not in self.config['catch']: + if DEBUG_ON: + self._emit_failure("Not catching {}".format(pokemon['name'])) continue + else: + if DEBUG_ON: + self._emit_log("Catching {}".format(pokemon['name'])) + if self.was_caught(pokemon): continue @@ -144,7 +155,7 @@ def get_pokemon_from_social(self): pokemon['longitude'], ) - if pokemon['dist'] > self.config['max_distance'] or not self.config['snipe']: + if pokemon['dist'] > self.config['max_distance'] and not self.config['snipe']: continue # pokemon not reachable with mean walking speed (by config) @@ -300,7 +311,7 @@ def work(self): if (pokeballs_quantity + superballs_quantity + ultraballs_quantity) < self.min_ball: if DEBUG_ON: - print 'no enough balls' + self._emit_log("Not enough balls to start sniping (have {}, {} needed)".format(pokeballs_quantity + superballs_quantity + ultraballs_quantity, self.min_ball)) return WorkerResult.SUCCESS self.dump_caught_pokemon() @@ -308,6 +319,8 @@ def work(self): if self.config['snipe']: self.by_pass_times = self.by_pass_times + 1 if self.by_pass_times < SNIPE_SKIP_IN_ROUND: + if DEBUG_ON: + self._emit_log("Skipping pass {}".format(self.by_pass_times)) return WorkerResult.SUCCESS self.by_pass_times = 0 pokemon_list = self.get_pokemon_from_social() @@ -323,12 +336,12 @@ def work(self): if len(pokemon_list) < 1: if DEBUG_ON: - print 'No enough pokemon in list to snip' + self._emit_log("No pokemons in list to snipe") return WorkerResult.SUCCESS pokemon = pokemon_list[0] if DEBUG_ON: - print 'How many pokemon in list: {}'.format(len(pokemon_list)) + self._emit_log('How many pokemon in list: {}'.format(len(pokemon_list))) if self.config['snipe']: if self.snipe_high_prio_only: count = 0 @@ -342,7 +355,7 @@ def work(self): time.sleep(SNIPE_SLEEP_SEC*5) else: if DEBUG_ON: - print 'this pokemon is not good enough to snip {}'.format(pokemon) + self._emit_log('this pokemon is not good enough to snipe {}'.format(pokemon)) return WorkerResult.SUCCESS else: return self.snipe(pokemon) diff --git a/pokemongo_bot/cell_workers/telegram_task.py b/pokemongo_bot/cell_workers/telegram_task.py index 3478f30f37..6591b7183d 100644 --- a/pokemongo_bot/cell_workers/telegram_task.py +++ b/pokemongo_bot/cell_workers/telegram_task.py @@ -6,6 +6,10 @@ from pokemongo_bot.base_task import BaseTask from pokemongo_bot.base_dir import _base_dir from pokemongo_bot.event_handlers import TelegramHandler + +from pprint import pprint +import re + class TelegramTask(BaseTask): SUPPORTED_TASK_API_VERSION = 1 update_id = None @@ -37,8 +41,19 @@ def work(self): self.update_id = update.update_id+1 if update.message: self.logger.info("message from {} ({}): {}".format(update.message.from_user.username, update.message.from_user.id, update.message.text)) - if self.config.get('master',None) and self.config.get('master',None)<>update.message.from_user.id: + if self.config.get('master',None) and self.config.get('master',None) not in [update.message.from_user.id, "@{}".format(update.message.from_user.username)]: + self.emit_event( + 'debug', + formatted="Master wrong: expecting {}, got {}({})".format(self.config.get('master',None), update.message.from_user.username, update.message.from_user.id)) continue + else: + if not re.match(r'^[0-9]+$', "{}".format(self.config['master'])): # master was not numeric... + self.config['master'] = update.message.chat_id + idx = (i for i,v in enumerate(self.bot.event_manager._handlers) if type(v) is TelegramHandler).next() + self.bot.event_manager._handlers[idx] = TelegramHandler(self.tbot,self.config['master'], self.config.get('alert_catch')) + + + if update.message.text == "/info": stats = self._get_player_stats() if stats: diff --git a/pokemongo_bot/event_handlers/telegram_handler.py b/pokemongo_bot/event_handlers/telegram_handler.py index 826e2214f5..b32a083225 100644 --- a/pokemongo_bot/event_handlers/telegram_handler.py +++ b/pokemongo_bot/event_handlers/telegram_handler.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from pokemongo_bot.event_manager import EventHandler import thread +import re DEBUG_ON = False @@ -9,15 +10,23 @@ def __init__(self, tbot,master,pokemons): self.tbot = tbot self.master=master self.pokemons=pokemons + self.whoami="TelegramHandler" def handle_event(self, event, sender, level, formatted_msg, data): if self.master: + if not re.match(r'^[0-9]+$', str(self.master)): + return + master = self.master + if event == 'level_up': - self.tbot.sendMessage(chat_id=self.master, parse_mode='Markdown', text="level up ({})".format(data["current_level"])) + msg = "level up ({})".format(data["current_level"]) elif event == 'pokemon_caught': if data["pokemon"] in self.pokemons or self.pokemons[0]=="all": - self.tbot.sendMessage(chat_id=self.master, parse_mode='Markdown', - text="Caught {} CP: {}, IV: {}".format(data["pokemon"],data["cp"],data["iv"]) - ) + msg = "Caught {} CP: {}, IV: {}".format(data["pokemon"],data["cp"],data["iv"]) + else: + return + else: + return + self.tbot.sendMessage(chat_id=master, parse_mode='Markdown', text=msg)