From dfbc6578b03447bb007f2246558aecfc774340f6 Mon Sep 17 00:00:00 2001 From: Joan Cano Date: Thu, 4 May 2023 14:31:50 +0200 Subject: [PATCH] Modified to properly handle non @ users and to use custom phrase --- tesla-raffle/tesla-raffle.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/tesla-raffle/tesla-raffle.py b/tesla-raffle/tesla-raffle.py index ff01e3d..597709e 100644 --- a/tesla-raffle/tesla-raffle.py +++ b/tesla-raffle/tesla-raffle.py @@ -41,8 +41,8 @@ async def finaliza_sorteo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> if "participantes" in context.chat_data: if len(context.chat_data["participantes"]) > 0: ganador = random.choice(context.chat_data["participantes"]) - logging.info(f"Ganador: @{ganador}") - await context.bot.send_message(chat_id=update.effective_chat.id, text=f"¡Felicidades @{ganador}! Eres el ganador del sorteo.") + logging.info(f"Ganador: {ganador}") + await context.bot.send_message(chat_id=update.effective_chat.id, text=f"¡Felicidades {ganador}! Eres el ganador del sorteo.") else: logging.info("Nadie ha participado.") await context.bot.send_message(chat_id=update.effective_chat.id, text="Nadie ha participado en el sorteo.") @@ -52,6 +52,7 @@ async def finaliza_sorteo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> # Se borra la lista de participantes para la próxima if "participantes" in context.chat_data: del context.chat_data["participantes"] + del context.chat_data["frase"] async def sorteo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: # Solo hacemos caso si el usuario es válido @@ -60,31 +61,39 @@ async def sorteo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: return logging.info("Empezando sorteo") + frase = update.message.text.split("/sorteo ")[1] global SORTEO_ACTIVO # Empezamos a leer mensajes SORTEO_ACTIVO = True # Si ya existía una lista de participantes, nos aseguramos de borrarla if "participantes" in context.chat_data: del context.chat_data["participantes"] + del context.chat_data["frase"] + logging.info(f"Frase activada: {frase}") + context.chat_data["frase"] logging.info("Sorteo activo, leyendo mensajes") - await context.bot.send_message(chat_id=update.effective_chat.id, text="¡Empieza el sorteo! Escribe 'Tengo un Tesla y quiero un referido' para participar.") + await context.bot.send_message(chat_id=update.effective_chat.id, text=f"¡Empieza el sorteo! Escribe '{frase}' para participar.") async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: global SORTEO_ACTIVO # Leemos mensajes solo si el sorteo está activo if SORTEO_ACTIVO: - logging.info(f"Mensaje recibido de '@{update.message.from_user.username}' con el siguiente texto: '{update.message.text}'") + if update.message.from_user.username is None: + nombre_participante = update.message.from_user.first_name + else: + nombre_participante = f"@{update.message.from_user.username}" + logging.info(f"Mensaje recibido de '{nombre_participante}' con el siguiente texto: '{update.message.text}'") # Inicializamos lista de participantes vacía if "participantes" not in context.chat_data: context.chat_data["participantes"] = [] # Solo le hacemos caso a los mensajes que contengan la frase del concurso - if "tengo un tesla y quiero un referido" in update.message.text.lower(): + if context.chat_data["frase"].lower() in update.message.text.lower(): # Si el usuario ya está participando, no lo volvemos a añadir - if update.message.from_user.username not in context.chat_data["participantes"]: - context.chat_data["participantes"].append(update.message.from_user.username) - await update.message.reply_text(f"¡@{update.message.from_user.username} has sido añadido al sorteo!") + if nombre_participante not in context.chat_data["participantes"]: + context.chat_data["participantes"].append(nombre_participante) + await update.message.reply_text(f"¡{nombre_participante} has sido añadido al sorteo!") else: - await update.message.reply_text(f"¡@{update.message.from_user.username} ya estabas añadido en el sorteo!") + await update.message.reply_text(f"¡{nombre_participante} ya estabas añadido en el sorteo!") async def id(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: logging.info(f"@{update.message.from_user.username} : {update.message.from_user.id}")