| Resumen | Ejecute desafíos con límite de tiempo, tablas de clasificación, publicaciones automatizadas y otorgamiento de insignias. | |
| Enlace al Repositorio | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| Guía de Instalación | Cómo instalar plugins en Discourse |
Versión Actual: 1.3.0 (actualizado el 27/03/2026)
Licencia: MIT
La Historia
Administro una comunidad de salud y bienestar que migró recientemente de Discord a Discourse. En Discord, había creado un bot personalizado para ejecutar desafíos mensuales de fitness: los miembros publicaban sus entrenamientos diarios, el bot registraba las comprobaciones, publicaba tablas de clasificación semanales y anunciaba a los ganadores al final de cada mes. Era una de nuestras funciones más populares.
Después de la migración a Discourse, los miembros comenzaron a pedir que los desafíos volvieran. Busqué un plugin existente pero no encontré ninguno. Así que lo construí yo mismo.
Lo que comenzó como una solución rápida se convirtió en un sistema de desafíos completo que, honestamente, funciona mejor que el bot original de Discord. Dado que podría ser útil para otras comunidades, lo comparto aquí.
Qué Hace
discourse-daily-challenge le permite ejecutar desafíos estructurados con límite de tiempo directamente en Discourse. Los miembros se registran publicando en un tema designado con un hashtag o una foto. El plugin registra todo automáticamente.
Características Principales
Comprobaciones Flexibles
Los miembros se registran publicando en el tema del desafío con el hashtag configurado o un archivo adjunto de foto. Los desafíos pueden configurarse para comprobaciones diarias o semanales. La ventana de registro se evalúa en la zona horaria configurada del desafío, por lo que las comunidades globales funcionan correctamente.
Tabla de Clasificación en Tiempo Real y Rachas
El panel de administración muestra la clasificación en tiempo real, incluyendo el total de registros, rachas actuales y porcentaje de finalización para cada participante. Las etiquetas de racha reflejan automáticamente el intervalo del desafío (“Racha de días” vs “Racha de semanas”).
Publicaciones Automatizadas de la Tabla de Clasificación
Establezca un día y una hora para una publicación semanal automatizada de la tabla de clasificación directamente en el tema del desafío. También se genera automáticamente una publicación de resultados finales al día siguiente de que termine el desafío.
Insignias Personalizadas
Defina un número mínimo de registros necesarios para “completar” el desafío. Los participantes elegibles reciben automáticamente una insignia personalizada de Discourse cuando termina el desafío. El nombre de la insignia se rellena automáticamente desde el título del tema.
Múltiples Desafíos Simultáneos
Ejecute tantos desafíos como desee al mismo tiempo. Cada desafío tiene su propio tema, horario, zona horaria, insignia y tabla de clasificación.
Desafíos Archivados
Los desafíos completados se conservan en una vista de acordeón archivada en el panel de administración, para que pueda revisar los resultados históricos.
Gestión de Registros por Administradores
Los administradores pueden agregar o eliminar registros manualmente: útil para recuperar publicaciones perdidas o resolver disputas.
Activación Manual de la Tabla de Clasificación
Un botón “Publicar Tabla de Clasificación Ahora” permite a los administradores publicar una actualización de la tabla de clasificación bajo demanda, fuera de la ventana programada.
Acceso de Moderadores
Los moderadores completos del sitio pueden crear, editar y gestionar desafíos a través de una sección dedicada en la barra lateral. Puede activarse o desactivarse mediante la configuración del sitio.
Acceso de Moderadores de Categoría
Los moderadores de categoría pueden gestionar los desafíos asignados a sus categorías asignadas a través de una ruta dedicada /challenges — no se requiere acceso de administrador. Puede activarse o desactivarse de forma independiente mediante la configuración del sitio.
Instalación
Agregue lo siguiente a su containers/app.yml bajo hooks > after_code > exec > cmd:
- git clone https://github.com/R23DPrinting/discourse-daily-challenge.git
Luego reconstruya:
cd /var/discourse && ./launcher rebuild app
Después de la instalación inicial, las actualizaciones futuras se pueden aplicar mediante el botón Actualizar en el panel, a menos que se indique lo contrario en el registro de cambios.
Configuración
Crear un Desafío
Navegue a Admin → Plugins → Desafíos → Desafíos de Discourse y haga clic en Nuevo Desafío.
| Campo | Descripción |
|---|---|
| ID del Tema | El tema de Discourse donde los miembros se registrarán. El título del tema rellenará automáticamente el campo del nombre de la insignia. |
| Disparador de Hashtag | Hashtag obligatorio para los registros (sin #, por ejemplo, workout) |
| Intervalo de Registro | Modo de registro diario o semanal |
| Inicio de Semana | Para desafíos semanales: qué día comienza la semana (domingo, lunes o sábado) |
| Fecha de Inicio | Primer día del desafío (inclusive) |
| Fecha de Fin | Último día del desafío (inclusive) |
| Zona Horaria del Desafío | Zona horaria para evaluar la ventana de registro (opcional, por defecto UTC) |
| Registros Necesarios | Número mínimo de registros para obtener la insignia de finalización |
| Descripción | Descripción opcional del desafío |
| Habilitar Publicación Semanal de la Tabla de Clasificación | Activar/desactivar publicaciones automatizadas semanales de la tabla de clasificación |
| Día de la Semana de Publicación | Día de la semana para la publicación automatizada de la tabla de clasificación |
| Hora de Publicación | Hora (0–23, en la zona horaria del desafío) para la publicación automatizada de la tabla de clasificación |
| Otorgar Insignia de Finalización | Activar/desactivar el otorgamiento automático de la insignia al final del desafío |
| Nombre de la Insignia | Nombre de la insignia a crear y otorgar — se rellena automáticamente desde el título del tema |
Configuración del Sitio
| Configuración | Predeterminado | Descripción |
|---|---|---|
daily_challenge_enabled |
true |
Habilitar o deshabilitar globalmente el plugin |
daily_challenge_mod_access_enabled |
true |
Permitir que los moderadores completos del sitio gestionen los desafíos |
daily_challenge_category_mod_access_enabled |
true |
Permitir que los moderadores de categoría gestionen los desafíos en sus categorías asignadas |
Cómo Funcionan los Registros
- Un miembro publica una respuesta en el tema del desafío.
- La publicación debe contener el hashtag configurado o un archivo adjunto de foto.
- El plugin verifica si el miembro ya se registró durante el período actual (día o semana, según el intervalo del desafío).
- Si no, el registro se guarda y la tabla de clasificación se actualiza.
- Se permite un registro por miembro por período.
Los administradores pueden ver y gestionar todos los registros desde el panel de administración.
Acceso de Moderadores y Moderadores de Categoría
Los moderadores completos del sitio pueden acceder a la gestión de desafíos a través de una sección DESAFÍOS en la barra lateral principal (si daily_challenge_mod_access_enabled está activado).
Los moderadores de categoría pueden acceder a una versión específica en /challenges/dashboard y /challenges/challenges — solo pueden ver y gestionar desafíos vinculados a temas en sus categorías asignadas. Esto requiere que daily_challenge_category_mod_access_enabled esté activado y que el usuario esté asignado como moderador de categoría a través de Admin → Categorías → [Categoría] → Moderación.
Publicaciones Automatizadas
Tabla de Clasificación Semanal
El plugin ejecuta un trabajo en segundo plano cada hora que verifica si es hora de publicar la tabla de clasificación semanal. Cuando llega el día y la hora configurados (en la zona horaria del desafío), crea una publicación formateada en el tema del desafío mostrando la clasificación actual.
Publicación de Resultados Finales
Al día siguiente de que termine el desafío, se publica automáticamente una publicación de resultados finales. Enumera a todos los participantes, sus registros totales, el estado de finalización y felicita a quienes obtuvieron la insignia.
Tablas de la Base de Datos
daily_challenges— Definiciones de desafíosdaily_check_ins— Registros individuales de registros por usuario, por desafío, por período
Compatibilidad
- Discourse 3.x+
- Probado en instalaciones autohospedadas
- Ruby 3.x, Rails 7.x+
Hoja de Ruta (v1.4.0)
- @ChallengeBot comandos de mención — los miembros pueden mencionar la cuenta del bot @ChallengeBot en temas de desafío para obtener estadísticas personales por mensaje directo (
status,leaderboard,streak,help) - Confirmación de registro por mensaje directo — mensaje automático después de cada registro exitoso con información de la racha actual
- Recordatorios por mensaje directo — configuración opcional por desafío; los desafíos diarios envían un recordatorio después de 2 o más días perdidos, y los desafíos semanales envían un recordatorio el último día de la semana si aún no se ha registrado
Registro de Cambios
v1.3.0
- Acceso de moderadores de categoría — los moderadores de categoría pueden crear, editar, eliminar y gestionar registros para desafíos en sus categorías asignadas a través de
/challenges/dashboardy/challenges/challenges— no se requiere acceso de administrador - Relleno automático del nombre de la insignia — el campo del nombre de la insignia se rellena automáticamente desde el título del tema al ingresar un ID de tema
- Validación del nombre de la insignia — el nombre de la insignia es obligatorio cuando “Otorgar insignia de finalización” está habilitado; devuelve un error adecuado en lugar de un 500
- Conmutadores separados para moderador/moderador de categoría —
daily_challenge_mod_access_enabledydaily_challenge_category_mod_access_enabledse pueden activar o desactivar de forma independiente
v1.2.0
- Intervalo de registro configurable — ejecutar desafíos diarios o semanales
- Configuración de inicio de semana — para desafíos semanales, elegir si las semanas comienzan el domingo, lunes o sábado
- Rachas conscientes del intervalo — las etiquetas y cálculos de rachas ahora reflejan el intervalo del desafío
- Acceso de moderadores — los moderadores completos del sitio pueden gestionar desafíos a través de una sección dedicada en la barra lateral
- Renombrado a “Desafíos de Discourse” en la interfaz de administración
v1.1.1
- Panel de control de múltiples desafíos que muestra todos los desafíos activos simultáneamente
- Acordeón de desafíos archivados que muestra resultados históricos
v1.1.0
- Soporte de zona horaria por desafío
- Horario de publicación semanal ahora por desafío (día, hora, activar/desactivar)
v1.0.0
- Versión inicial
Comentarios y Contribuciones
Este plugin fue construido para resolver una necesidad real en nuestra comunidad, y lo comparto por si ayuda a la suya. Se bienvenidos los problemas, las solicitudes de extracción (PRs) y las solicitudes de características en GitHub.
Si administra una comunidad donde la responsabilidad y la consistencia son importantes — fitness, aprendizaje de idiomas, escritura, hábitos creativos — los desafíos diarios pueden ser una herramienta de participación genuinamente poderosa. Espero que este plugin facilite llevar eso a su comunidad de Discourse.




