def borrar_busqueda(self, update, context): gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id opciones = [] if(gestorBBDD.existeUsuario(id_telegram)): print(f"[TELEGRAM] Usuario {id_telegram} quiere borrar búsquedas. ") try: busquedas = gestorBBDD.recuperarBusquedasUsuario(id_telegram) if(len(busquedas) > 0): texto = "¿Qué busqueda quieres borrar?" contador = 1 for busqueda in busquedas: texto+=f"\n[{contador}] - {busqueda.keywords} [{busqueda.precio_min},{busqueda.precio_max}]" opciones.append([f"Borrar {contador}"]) contador+=1 texto+=f"\n Utiliza /cancelar_borrar_busqueda para cancelar el borrado. " keyboard = ReplyKeyboardMarkup(opciones, one_time_keyboard=True) update.message.reply_text(texto, reply_markup=keyboard) return self.STATUS1 else: update.message.reply_text("No tienes ninguna búsqueda guardada.") except: update.message.reply_text("No tienes ninguna búsqueda guardada.") else: update.message.reply_text("No estás registrado. Escribe /registrarse. ") return ConversationHandler.END
def iniciar(self, update, context): id_telegram = update.message.from_user.id print(f"[TELEGRAM] Usuario {id_telegram} lanza /iniciar. ") gestorBBDD = GestorBBDD() if(gestorBBDD.existeUsuario(id_telegram) and len(gestorBBDD.recuperarBusquedasUsuario(id_telegram)) > 0): if(self.diccionario_scrapers.get(id_telegram) == None): usuario = gestorBBDD.recuperarUsuario(id_telegram) busquedas_usuario = gestorBBDD.recuperarBusquedasUsuario(id_telegram) for busqueda in busquedas_usuario: # Si está activada la autocomparación, borro artículos anteriores # y relleno con los nuevos desde scraperwallapop, de forma que # solo se van comparando los artículos nuevos subidos. if(busqueda.comparar_automaticamente == True): print(f"[TELEGRAM] Borro artículos previos de la búsqueda {busqueda.keywords} del usuario {id_telegram} porque tiene autocomparación. ") gestorBBDD.borrarArticulosBusqueda(busqueda.id_busqueda) notificador = Notificador(self.TOKEN) tarea = TareaPeriodica(10, ScraperWallapop, usuario, notificador, ejecucion_en_background=False) update.message.reply_text("Iniciando scrapeo. ") self.diccionario_scrapers[id_telegram] = tarea tarea.start() else: update.message.reply_text("Ya se está scrapeando, utiliza /detener para detener el scrapeo.") else: update.message.reply_text("Debes tener una cuenta y al menos una búsqueda para iniciar el scrapeo. ")
def iniciar_registro(self, update, context): # Si ya tiene cuenta, no dejo que se registre. gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id if(gestorBBDD.existeUsuario(id_telegram)): update.message.reply_text("Ya tienes una cuenta, no puedes añadir otra. Puedes borrar la previamente introducida con /borrar_cuenta. ") return ConversationHandler.END # Si no, pido código de invitación. else: print(f"[TELEGRAM] usuario {id_telegram} empieza a registrarse.") update.message.reply_text("Introduce código de invitación o usa /cancelar_registro en cualquier momento para cancelar el registro: ", reply_markup=ForceReply()) return self.STATUS1
def start(self, update, context): id_telegram = update.message.from_user.id nombre_usuario = update.message.from_user.username print(f"[TELEGRAM] Usuario {id_telegram} lanza /start. ") gestorBBDD = GestorBBDD() context.user_data["tiene_cuenta"] = gestorBBDD.existeUsuario(update.message.from_user.id) context.user_data["email"] = "" context.user_data["password"] = "" context.user_data["mensaje"] = "" context.user_data["codigo_postal"] = "" bienvenida = f'¡Hola {nombre_usuario}! Soy un bot para actualizarte con los nuevos anuncios que se suban en Wallapop. Utiliza /ayuda para ver los comandos disponibles.' update.message.reply_text(bienvenida)
def borrar_cuenta(self, update, context): gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id print(f"[TELEGRAM] Usuario {id_telegram} va a borrar su cuenta. ") if (gestorBBDD.existeUsuario(id_telegram)): texto = "Se borrará tu cuenta y todas las búsquedas y artículos guardados asociados. Esta acción no se puede deshacer. ¿Estás seguro de que quieres continuar?" reply_keyboard = [["Si"], ["No"]] keyboard = ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True) update.message.reply_text(texto, reply_markup=keyboard) return self.STATUS1 else: update.message.reply_text( "Debes haberte registrado para poder borrar tu cuenta.") return ConversationHandler.END
def add_busqueda(self, update, context): gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id if (gestorBBDD.existeUsuario(id_telegram)): print( f"[TELEGRAM] Usuario {id_telegram} comienza a registrar búsqueda. " ) self.iniciar_diccionario_busqueda(update, context) update.message.reply_text( "Introduce las keywords de tu búsqueda o utiliza en cualquier momento /cancelar_add_busqueda para cancelar.", reply_markup=ForceReply()) return self.STATUS1 else: update.message.reply_text( "Necesitas registrarte para poder añadir una búsqueda. Usa /registrarse ." )
def recoge_codigo_postal_probar_credenciales(self, update, context): codigo_postal = update.message.text id_telegram = update.message.from_user.id correcto = False print(f"[TELEGRAM] Usuario {id_telegram} mete codigo postal: {codigo_postal}.") try: ccaa = int(codigo_postal[:2]) if(ccaa in range(1,53) and len(codigo_postal) == 5): correcto = True except: pass if(not(correcto)): update.message.reply_text("Código postal incorrecto. Registro cancelado. ") return ConversationHandler.END else: context.user_data["codigo_postal"] = codigo_postal # Si introduce cuenta de wp, pruebo credenciales. if(context.user_data["tiene_cuenta"]): texto = "Código postal guardado. Vamos a probar tu cuenta. Esto puede durar unos segundos..." update.message.reply_text(texto) usuario = Usuario(update.message.from_user.id, context.user_data["email"], context.user_data["pass_wallapop"], context.user_data["codigo_postal"], context.user_data["mensaje_wallapop"]) bot = TestCredenciales(usuario, ejecucion_en_background=True) if(bot.probarCredenciales()): # Registro al usuario en la BBDD gestorBBDD = GestorBBDD() gestorBBDD.insertarUsuario(usuario) # Muestro datos guardados. texto = f"""Credenciales correctos. Cuenta guardada: - Email: {context.user_data["email"]} - Password: {context.user_data["pass_wallapop"]} - Mensaje automático: {context.user_data["mensaje_wallapop"]} - Código postal: {context.user_data["codigo_postal"]} """ update.message.reply_text(texto) # Logueo id_telegram = update.message.from_user.id if(gestorBBDD.existeUsuario(usuario.id_telegram)): print(f"[TELEGRAM] Usuario {id_telegram} registrado con éxito.") else: update.message.reply_text("Credenciales erróneos. Registro cancelado y datos borrados. ") self.limpiar_datos(context) # Si no tiene cuenta else: # Solo le inserto en la bbdd usuario = Usuario(update.message.from_user.id, None, None, context.user_data["codigo_postal"], None) gestorBBDD = GestorBBDD() gestorBBDD.insertarUsuario(usuario) update.message.reply_text("Registrado como usuario sin cuenta en la BBDD.") print(f"[TELEGRAM] Usuario {id_telegram} registrado como usuario sin cuenta con éxito.") return ConversationHandler.END