From 283cb3e8efe03d5ae22f4e8f6dbb522de2b3c897 Mon Sep 17 00:00:00 2001 From: Stuart Travers Date: Tue, 6 Sep 2016 14:55:24 +1000 Subject: [PATCH] Revert "Persist UIDs received from Telegram" --- .../event_handlers/telegram_handler.py | 79 ++----------------- 1 file changed, 8 insertions(+), 71 deletions(-) mode change 100644 => 100755 pokemongo_bot/event_handlers/telegram_handler.py diff --git a/pokemongo_bot/event_handlers/telegram_handler.py b/pokemongo_bot/event_handlers/telegram_handler.py old mode 100644 new mode 100755 index 4614850ff1..328a79847f --- a/pokemongo_bot/event_handlers/telegram_handler.py +++ b/pokemongo_bot/event_handlers/telegram_handler.py @@ -7,8 +7,6 @@ import telegram import thread import re -from pokemongo_bot.datastore import Datastore - DEBUG_ON = False @@ -21,36 +19,7 @@ class TelegramClass: def __init__(self, bot, master, pokemons, config): self.bot = bot - with self.bot.database as conn: - # initialize the DB table if it does not exist yet - cur = conn.cursor() - try: - cur.executescript(""" - create table if not exists telegram_uids(uid text constraint upk primary key, username text not null); - create index if not exists tuids_username on telegram_uids(username); - """) - except sqlite3.Error as e: - self.bot.logger.warn("An error occurred while initializing Telegram UID table: {}".format(e.args[0])) - - - # if master is not numeric, try to fetch it from the database - if re.match(r'^[0-9]+$', str(master)): # master is numeric - self.master = master - self.bot.logger.info("Telegram master is valid (numeric): {}".format(master)) - else: - self.bot.logger.info("Telegram master is not numeric: {}".format(master)) - c = conn.cursor() - # do we already have a user id? - srchmaster = re.sub(r'^@', '', master) - c.execute("SELECT uid from telegram_uids where username in ('{}', '@{}')".format(srchmaster, srchmaster)) - results = c.fetchall() - if len(results) > 0: # woohoo, we already saw a message from this master and therefore have a uid - self.bot.logger.info("Telegram master UID from datastore: {}".format(results[0][0])) - self.master = results[0][0] - else: # uid not known yet - self.bot.logger.info("Telegram master UID not in datastore yet") - self.master = master - + self.master = master self.pokemons = pokemons self._tbot = None self.config = config @@ -115,36 +84,27 @@ def send_player_stats_to_chat(self, chat_id): self.sendLocation(chat_id=chat_id, latitude=self.bot.api._position_lat, longitude=self.bot.api._position_lng) else: self.sendMessage(chat_id=chat_id, parse_mode='Markdown', text="Stats not loaded yet\n") - def grab_uid(self, update): - with self.bot.database as conn: - conn.execute("replace into telegram_uids (uid, username) values (?, ?)", (update.message.chat_id, update.message.from_user.username)) - conn.commit() - def run(self): time.sleep(1) while True: for update in self._tbot.getUpdates(offset=self.update_id, timeout=10): self.update_id = update.update_id+1 if update.message: - self.bot.logger.info("Telegram message from {} ({}): {}".format(update.message.from_user.username, update.message.from_user.id, update.message.text)) + self.bot.logger.info("message from {} ({}): {}".format(update.message.from_user.username, update.message.from_user.id, update.message.text)) if not self.master: # Reject message if no master defined in config - outMessage = "Telegram bot setup not yet complete (master = null). Please enter your userid ({}) or your username (@{}) as master in bot configuration file (config section of TelegramTask).".format(update.message.from_user.id) + outMessage = "Telegram bot setup not yet complete (master = null). Please enter your userid {} into bot configuration file.".format(update.message.from_user.id) self.bot.logger.warn(outMessage) continue - if str(self.master) not in [str(update.message.from_user.id), "@{}".format(update.message.from_user.username), update.message.from_user.username]: + if self.master not in [update.message.from_user.id, "@{}".format(update.message.from_user.username)]: # Reject message if sender does not match defined master in config - outMessage = "Telegram message received from unknown sender. If this was you, please enter your userid ({}) or your username (@{}) as master in bot configuration file (config section of TelegramTask); current value there: {}.".format(update.message.from_user.id, update.message.from_user.username, self.master) + outMessage = "Telegram message received from unknown sender. If this was you, please enter your userid {} as master in bot configuration file.".format(update.message.from_user.id) self.bot.logger.warn(outMessage) continue if self.master and not re.match(r'^[0-9]+$', str(self.master)): - outMessage = "Telegram message received from correct user, but master is not numeric, updating datastore." - self.bot.logger.warn(outMessage) # the "master" is not numeric, set self.master to update.message.chat_id and re-instantiate the handler newconfig = self.config newconfig['master'] = update.message.chat_id - # insert chat id into database - self.grab_uid(update) # remove old handler self.bot.event_manager._handlers = filter(lambda x: not isinstance(x, TelegramHandler), self.bot.event_manager._handlers) # add new handler (passing newconfig as parameter) @@ -164,57 +124,34 @@ class TelegramHandler(EventHandler): def __init__(self, bot, config): self.bot = bot self.tbot = None - master = config.get('master', None) + self.master = config.get('master', None) self.pokemons = config.get('alert_catch', {}) self.whoami = "TelegramHandler" self.config = config - if master == None: - self.master = None - return - - with self.bot.database as conn: - # if master is not numeric, try to fetch it from the database - if not re.match(r'^[0-9]+$', str(master)): # master is numeric - self.bot.logger.info("Telegram master is not numeric: {}".format(master)) - c = conn.cursor() - # do we already have a user id? - srchmaster = re.sub(r'^@', '', master) - c.execute("SELECT uid from telegram_uids where username in ('{}', '@{}')".format(srchmaster, srchmaster)) - results = c.fetchall() - if len(results) > 0: # woohoo, we already saw a message from this master and therefore have a uid - self.bot.logger.info("Telegram master UID from datastore: {}".format(results[0][0])) - self.master = results[0][0] - else: # uid not known yet - self.bot.logger.info("Telegram master UID not in datastore yet") - self.master = master def handle_event(self, event, sender, level, formatted_msg, data): if self.tbot is None: try: - self.bot.logger.info("Telegram bot not running, trying to spin it up") self.tbot = TelegramClass(self.bot, self.master, self.pokemons, self.config) self.tbot.connect() thread.start_new_thread(self.tbot.run) except Exception as inst: self.tbot = None - self.bot.logger.error("Unable to spin Telegram bot; master: {}".format(self.master)) return if self.master: if not re.match(r'^[0-9]+$', str(self.master)): - # master not numeric?... - self.bot.logger.info("Telegram master not numeric: {}".format(self.master, type(self.master))) return master = self.master if event == 'level_up': msg = "level up ({})".format(data["current_level"]) elif event == 'pokemon_caught': - if isinstance(self.pokemons, list): # alert_catch is a plain list + if isinstance(self.pokemons, list): if data["pokemon"] in self.pokemons or "all" in self.pokemons: msg = "Caught {} CP: {}, IV: {}".format(data["pokemon"], data["cp"], data["iv"]) else: return - else: # alert_catch is a dict + else: if data["pokemon"] in self.pokemons: trigger = self.pokemons[data["pokemon"]] elif "all" in self.pokemons: