- Santiago Abella
- Rodrigo García
- Rodrigo Quincke
- Gerónimo Sosa
Sistema de recomendaciones implementado como chatbot de Discord. El sistema permite registrar usuarios, gestionar un catálogo de contenido, registrar interacciones, definir preferencias, guardar contenido, consultar historial y generar recomendaciones personalizadas usando distintas estrategias.
El motor de recomendación está desacoplado del dominio, trabajando con abstracciones (IContent, IRecommendationStrategy, IRecommendationFilter, IRecommendationSorter) para que pueda reutilizarse con cualquier tipo de contenido sin modificaciones. El punto de entrada único al sistema es SystemFacade, implementado como Singleton.
En esta última entrega se integró el bot de Discord al core que ya teníamos y se completó el sistema. El foco estuvo en conectar los comandos del bot con la fachada, agregar el patrón Singleton a SystemFacade, y dejar todo funcionando junto.
Las funcionalidades incluidas son:
- Registro e inicio de sesión de usuarios.
- Definición de preferencias y exclusiones.
- Visualización de recomendaciones ordenadas.
- Recomendaciones por historial, preferencias, popularidad, usuarios similares y contenido relacionado.
- Registro de interacciones del usuario.
- Valoraciones de contenido como "me gusta" y "no me gusta".
- Consulta de historial de consumo.
- Guardado de contenido para consumir más tarde.
- Exclusión de contenido ya consumido.
- Eliminación lógica de contenido por parte de un administrador.
- Bot de Discord funcional con comandos prefijados con
!.
El desafío más grande de esta entrega fue integrar el bot de Discord con el sistema. Teníamos el motor funcionando bien desde la entrega anterior, pero conectarlo con Discord.NET fue un desafío extra: tuvimos que entender cómo funciona la biblioteca, cómo se registran los comandos y cómo pasarle la información del usuario al sistema. Las primeras pruebas en el servidor tuvieron alguna que otra complicación al principio.
Por último, documentar con Doxygen llevó más tiempo del que esperábamos. No porque sea difícil técnicamente, sino porque los comentarios XML tienen que justificar las decisiones de diseño con patrones GRASP y SOLID, y eso exige tener bien claro por qué cada clase tiene la responsabilidad que tiene.
El aprendizaje nuevo de esta entrega final fue la implementación del bot en Discord. Si bien ya teníamos bastante claro cómo funciona un bot por detrás, todavía nos faltaba la parte práctica: entender cómo se implementa concretamente en Discord.NET, conectar los comandos con el sistema y hacer que todo fluyera bien entre Discord y la fachada.
En general, el proyecto nos mostró bastante bien cómo las decisiones de diseño de las primeras entregas afectan todo lo que viene después. Haber separado bien las responsabilidades desde el principio nos facilitó mucho agregar el bot sin tener que tocar el core.
- Documentación oficial de Discord.NET para entender cómo armar el bot y manejar comandos.
- El repositorio de ejemplo del curso como punto de partida para la integración con Discord.
- Las guías de diseño del curso para justificar responsabilidades con GRASP y SOLID en los comentarios de documentación.
- Claude (IA) para revisar algunos métodos que no teníamos del todo claro como implementarlos.