Modified to properly handle non @ users and to use custom phrase

This commit is contained in:
Joan Cano
2023-05-04 14:31:50 +02:00
parent 3058a69535
commit dfbc6578b0

View File

@@ -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}")