Skip to content

1. Fixes#131

Open
pwqw wants to merge 10 commits intoPyAr:masterfrom
pwqw:fixes
Open

1. Fixes#131
pwqw wants to merge 10 commits intoPyAr:masterfrom
pwqw:fixes

Conversation

@pwqw
Copy link

@pwqw pwqw commented Feb 17, 2026

🔧 Resumen de Fixes - Rama fixes

Una guía clara de qué errores se corrigieron y cómo, enfocada en lo que el usuario experimenta en el bot.


🎯 Lo más importante primero

Commit Problema Solución
f11c886 /ver_agenda_magx crashea ✅ Pasar context en lugar de update.message
b7a96b9 ❌ Division por cero en scheduler ✅ Validar participantes y proyectos vacíos
668c545 ❌ No ve votos en proyectos sin slot ✅ Cambiar a LEFT OUTER JOIN
ad57851 ❌ Schedule no se ejecuta ✅ Agregar await a make_schedule()

📅 Cronología de Fixes

1️⃣ Optimización de base de datos

Commit: eefc83b

El problema que resolvió:

  • Cada vez que cambias cuál PyCamp estaba "activo", se hacía una actualización masiva innecesaria en la BD
  • Era ineficiente y potencialmente lento

Cómo se arregló:

  • Se añadió un chequeo: "si no hay nada para actualizar, no hagas la query"
  • Resultado: operaciones más rápidas y eficientes

2️⃣ Votos no se registraban bien

Commit: 42d6914

El problema que resolvió:

  • Al clickear un botón de votación, el bot no conseguía el nombre de usuario o el proyecto correctamente
  • Las votaciones fallaban silenciosamente

Cómo se arregló:

  • Cambiar dónde obtenía el username: ahora usa query.from_user.username (fuente correcta)
  • Cambiar dónde obtenía el nombre del proyecto: ahora usa query.message.text (fuente correcta)
  • Resultado: votaciones funcionan correctamente

3️⃣ Error en los logs de anuncios

Commit: ad60178

El problema que resolvió:

  • El comando /anuncios mostraba un error de Python porque usaba un método obsoleto
  • Método warn() no existe más en Python 3.10+

Cómo se arregló:

  • Cambiar logger.warn() por logger.warning() (el nombre correcto)
  • Resultado: los logs se escriben sin errores

4️⃣ No ves votos en nuevos proyectos

Commit: 668c545

El problema que resolvió:

  • /mis_proyectos no mostraba tus proyectos si aún no tenían horario asignado
  • Los nuevos proyectos aparecían pero sin contar los votos

Cómo se arregló:

  • Cambiar la estrategia de la query de base de datos:
    • Antes: INNER JOIN → solo proyectos con slot
    • Ahora: LEFT OUTER JOIN → todos los proyectos, con una sección "Sin asignar" para los que no tienen horario
  • Resultado: ves todos tus proyectos con sus votos, aunque no tengan horario aún

5️⃣ Schedule no se ejecutaba

Commit: ad57851

El problema que resolvió:

  • Al crear un slot horario, la función make_schedule() se llamaba pero no se esperaba completamente
  • El código asincrónico no funcionaba correctamente

Cómo se arregló:

  • Agregar await antes de make_schedule()
  • Resultado: el scheduler espera a que termine correctamente antes de continuar

6️⃣ Mensajes de error sin contexto

Commit: 5205dc2

El problema que resolvió:

  • Cuando había un error al enviar el horario de wizards, el mensaje de error no decía quién lo intentó
  • Difícil de debuggear

Cómo se arregló:

  • Incluir el username del admin en el mensaje de error
  • Resultado: logs más útiles para entender qué pasó

7️⃣ Nueva funcionalidad: Ver total de votos

Commit: 017f05c

Qué se agregó:

  • Comando /vote_count para que los admins vean cuántos votos tiene cada proyecto en total
  • Protegido: solo pueden ejecutarlo los admins

Utilidad: Los organizadores pueden monitorear el progreso de votación


8️⃣ Crash al calcular horarios ⚠️ CRÍTICO

Commit: b7a96b9

El problema que resolvió:

  • El scheduler se caía (Division by Zero) cuando:
    • No había participantes registrados
    • No había ningún proyecto aún
  • Error: max() sobre lista vacía

Cómo se arregló:

  • Cambiar total_participants por max(1, total_participants) para evitar dividir por cero
  • Si no hay vecinos (estados alternativos), retornar el estado actual en lugar de llamar a max() en lista vacía
  • Resultado: el scheduler funciona incluso con estado inicial vacío

9️⃣ Mejora: Ver solo slots futuros

Commit: ec8d90e

Qué cambió:

  • /ver_agenda_magx ahora entiende dos formas de uso:
    • /ver_agenda_magx → muestra todos los slots
    • /ver_agenda_magx futuros → solo los próximos slots
  • Usar timezone de Argentina en las comparaciones (no UTC)
  • Mensajes mejorados para agendas vacías

Experiencia: Más control sobre qué horarios ver


🔟 HOTFIX: /ver_agenda_magx crashea 🚨

Commit: f11c886

El problema que resolvió:

  • El commit anterior mejoró /ver_agenda_magx pero introdujo un bug
  • Al clickear, el comando crashea con AttributeError
  • Razón: se estaba pasando update.message en lugar de context
    • update.message no tiene atributo .args (que es donde está el parámetro "futuros")
    • Solo context tiene .args

Cómo se arregló:

  • Revertir a pasar context en lugar de update.message
  • Resultado: /ver_agenda_magx funciona de nuevo, y ahora con la funcionalidad mejorada

📊 Resumen por categoría

🐛 Bugs Críticos (Que reventaban funcionalidad)

  • b7a96b9 - Division by zero en scheduler
  • f11c886 - /ver_agenda_magx crashea
  • ad57851 - Schedule no se ejecuta

🔄 Bugs de Lógica (Datos incorrectos)

  • 42d6914 - Votos no se registraban
  • 668c545 - No veías tus proyectos en /mis_proyectos

📝 Bugs Menores (Errores de código)

  • ad60178 - Error en logging
  • 5205dc2 - Error message incompleto

✨ Mejoras

  • 017f05c - Nuevo comando /vote_count
  • ec8d90e - Mejora a /ver_agenda_magx (vista de futuros)
  • eefc83b - Optimización de BD

✅ Resultado final

Después de estos 10 commits:

✔️ Votaciones funcionan correctamente
✔️ Ves todos tus proyectos con votos (aunque no tengan horario)
✔️ El scheduler no se cae
✔️ /ver_agenda_magx muestra slots (completo o solo futuros)
✔️ Los logs son claros y útiles
✔️ Los admins pueden contar votos totales
✔️ La base de datos es más eficiente

El bot está mucho más estable y con mejor experiencia de usuario. 🎉

botON added 10 commits February 17, 2026 01:17
- Changed the implementation of the set_as_only_active method to convert the active selection into a list before processing.
- Added a conditional check to ensure bulk updates are only called if there are active instances, improving efficiency.
- Updated the method of retrieving the username from the callback query to use `query.from_user.username` for accuracy.
- Adjusted the project name retrieval to use `query.message.text` for consistency.
- Enhanced project creation logic to associate the project with the user who initiated the vote, ensuring proper ownership in the database.
… set

The query used INNER JOIN with Slot, so only projects with an assigned
slot were returned. Before running the schedule step all projects have
slot=NULL and every vote was excluded. Switched to LEFT OUTER JOIN with
Slot and handle the no-slot case by showing a "Sin asignar" section
with project name and owner.
Updated the create_slot function to await the make_schedule call, ensuring proper asynchronous execution and preventing potential issues with scheduling operations.
…ction

Updated the error message in the schedule_wizards function to include the username of the admin when a BadRequest occurs, ensuring clearer logging and debugging information.
Introduced a new command, vote_count, to tally votes and restricted access to admins using the @admin_needed decorator. This enhances the voting functionality by allowing authorized users to view the total votes cast.
…limbing

- Use max(1, total_participants) when computing most_voted_cost to prevent
  ZeroDivisionError when there are no participants.
- Return current_state when neighboors is empty so hill_climbing does not
  call max() on an empty sequence (e.g. initial state with no projects).
- Updated the `aux_resolve_show_all` function to handle an additional 'futuros' argument, allowing users to view only upcoming slots.
- Adjusted the time comparison for future slots to use Argentina's timezone, ensuring accurate scheduling.
- Improved user feedback messages for empty agendas, clarifying the options available for viewing the schedule.
- Refactored message sending logic to enhance clarity and user experience.
- Revert aux_resolve_show_all parameter to use context instead of update.message.
- The Message object does not have the args attribute that the function needs to resolve the schedule parameter (complete/futures).

- This resolves the AttributeError that occurred when running /ver_agenda_magx.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant