Desafíos diarios de Discourse

:information_source: Resumen Ejecute desafíos con límite de tiempo, tablas de clasificación, publicaciones automatizadas y otorgamiento de insignias.
:hammer_and_wrench: Enlace al Repositorio GitHub - R23DPrinting/discourse-daily-challenge · GitHub
:open_book: 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

:white_check_mark: 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.

:bar_chart: 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”).

:robot: 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.

:sports_medal: 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.

:card_index_dividers: 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.

:file_folder: 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.

:hammer_and_wrench: Gestión de Registros por Administradores
Los administradores pueden agregar o eliminar registros manualmente: útil para recuperar publicaciones perdidas o resolver disputas.

:pushpin: 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.

:police_officer: 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.

:card_index_dividers: 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

  1. Un miembro publica una respuesta en el tema del desafío.
  2. La publicación debe contener el hashtag configurado o un archivo adjunto de foto.
  3. 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).
  4. Si no, el registro se guarda y la tabla de clasificación se actualiza.
  5. 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íos
  • daily_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/dashboard y /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íadaily_challenge_mod_access_enabled y daily_challenge_category_mod_access_enabled se 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.

:link: GitHub - R23DPrinting/discourse-daily-challenge · GitHub

15 Me gusta

Esto es genial, gracias por compartir. En cuanto a las funciones, podría sernos útil si fuera posible especificar el intervalo del desafío como algo distinto de diario, es decir, elegir un registro semanal en lugar de diario a lo largo del desafío. También sería excelente si los moderadores/moderadores de categoría pudieran crear desafíos para que no solo el administrador configure las cosas.

1 me gusta

Permítame asegurarme de que entiendo las solicitudes:

Entonces, ¿te gustaría configurar el desafío para, digamos, 1 mes (del 1 al 30 de abril), pero especificar que solo cuente 1 entrada por semana en lugar de 1 entrada por día? ¿Querrías que fuera una semana de domingo a sábado o cada 7 días?

Esta es una buena idea. Honestamente, no tengo ningún moderador en mi comunidad, así que no sé cómo se ve el panel de administración para ellos. Dejaré que cree una cuenta de moderador en mi entorno de desarrollo y juegue con ella.

1 me gusta

Sí, exactamente. Nuestra comunidad tiene un desafío de 52 en 52 donde hay un desafío semanal durante un año, por lo que los registros no diarios darían más flexibilidad para diferentes tipos de desafíos.

Discourse Calendar (and Event) permite al administrador configurar el inicio de la semana en sábado, domingo o lunes, así que si quieres planificar la compatibilidad con ese complemento en el futuro (como generar eventos de calendario para registros o fechas de inicio/fin), podría seguir cómo Calendar establece la semana. Para mi comunidad en particular, no creo que importe.

Los moderadores de categoría además de los moderadores habituales serían realmente geniales: tenemos pequeños grupos de interés que tienen sus propias subcategorías, y sería bueno permitir que esos moderadores de categoría ejecuten desafíos separados sin convertirlos en moderadores completos.

1 me gusta

Estas son excelentes ideas. ¡Gracias por compartirlas! Veré qué puedo hacer para implementarlas.

1 me gusta

¿Este complemento requiere que el complemento de #gamificación esté habilitado, o seleccionó la etiqueta porque su complemento es para gamificación en general?

2 Me gusta

No requiere el complemento. Solo seleccioné la etiqueta. Disculpa por eso.

2 Me gusta

¡v1.2.0 ya está disponible!

Novedades en esta versión:

  • Intervalo de check-in configurable — ejecuta desafíos diarios o semanales
  • Configuración del inicio de la semana — para desafíos semanales, elige 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 (“racha semanal” vs “racha diaria”)
  • Acceso de moderador — los moderadores completos del sitio ahora pueden crear, editar y gestionar desafíos a través de una sección dedicada en la barra lateral. Esto se puede habilitar o deshabilitar en Administración → Configuración → Plugins (daily_challenge_mod_access_enabled), de modo que las comunidades que prefieran mantener la gestión de desafíos solo para administradores puedan hacerlo.
  • Renombrado a “Discourse Challenges” en la interfaz de administración
Capturas de pantalla

Formulario de desafío — Intervalo de check-in

Panel de control — Inicio de la semana

Acceso de moderador en la barra lateral

Nota: Esta versión requiere ejecutar ./launcher rebuild app para aplicar las migraciones de la base de datos; el botón de Actualizar en el panel no funcionará para esta versión.


En cuanto al acceso de moderadores por categoría: esto es algo en lo que estamos trabajando activamente. El desafío es que Discourse no otorga el estado de personal a los moderadores de categorías, lo que significa que no pueden acceder a las rutas de /admin en absoluto, independientemente de lo que haga el plugin. Estamos explorando una ruta no administrativa separada específicamente para moderadores de categorías que les daría acceso limitado a los desafíos en sus categorías. Esperamos lanzar esto en la versión 1.3.0.

1 me gusta

No puedo crear un desafío, devuelve un error 500 para cualquier acción.

Eso es extraño. Lo estoy ejecutando en 2 foros diferentes sin problemas y he realizado muchas pruebas. ¿Qué versión de Discourse estás usando? ¿Estás usando la última versión del plugin (1.2.0)?

¿Puedes conectarte por SSH a tu servidor, ejecutar algunos comandos y publicar los resultados?

Primero, verifica el número de versión del plugin:

./launcher enter app
cat /var/www/discourse/plugins/discourse-daily-challenge/plugin.rb | grep version

A continuación, intenta crear un desafío. Cuando obtengas el error 500, ejecuta inmediatamente esto en la sesión SSH:

./launcher enter app
tail -50 /var/www/discourse/log/production.log

Házmelo saber los resultados y podemos intentar resolverlo.

Discourse 2026.3.0-latest.1 - https://github.com/discourse/discourse version f2781e1455274ea2c011fd1d161ac2ad9fde72bd

# version: 1.2.0
# required_version: 2.7.0
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:05 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "2", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar\",\"action\":\"reply                                                                                        \",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\                                                                                        "composerTime\":25298,\"typingTime\":3900,\"locale\":\"\"}", "owner" => "fee91ce                                                                                        037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.1ms)
Started GET "/t/os-melhores-blogs-de-games-no-brasil/15399?__cf_chl_rt_tk=5M6_rd                                                                                        _fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYR                                                                                        CQNnUboE4.po6L1TFk1E" for 164.52.120.12 at 2026-03-26 20:49:06 +0000
Processing by TopicsController#show as */*
  Parameters: {"__cf_chl_rt_tk" => "5M6_rd_fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-                                                                                        1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYRCQNnUboE4.po6L1TFk1E", "slug" => "os-m                                                                                        elhores-blogs-de-games-no-brasil", "topic_id" => "15399"}
  Rendered layout layouts/application.html.erb (Duration: 107.3ms | GC: 1.4ms)
Completed 200 OK in 192ms (Views: 109.0ms | ActiveRecord: 0.0ms (0 queries, 0 ca                                                                                        ched) | GC: 2.4ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:11 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "3", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\                                                                                        ",\"metaData\":null,\"composerTime\":31344,\"typingTime\":4600,\"locale\":\"\"}"                                                                                        , "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard" for 2804:1e68:c201:632a:1161:4504:ea4d:9983 at 2026-0                                                                                        3-26 20:49:15 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
Completed 200 OK in 30ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:16 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "4", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         das outras pessoas \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"arche                                                                                        typeId\":\"regular\",\"metaData\":null,\"composerTime\":36481,\"typingTime\":510                                                                                        0,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save"                                                                                         => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard/6?period=daily" for 2804:1e68:c201:632a:1161:4504:ea4d                                                                                        :9983 at 2026-03-26 20:49:19 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
  Parameters: {"period" => "daily", "id" => "6"}
Completed 200 OK in 20ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by UserAvatarsController#show as PNG
  Parameters: {"hostname" => "segredin.com", "username" => "mary", "size" => "28                                                                                        8", "version" => "8962_2"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)
Sent file /var/www/discourse/public/uploads/default/optimized/2X/8/86ba5981dfff7                                                                                        6df7de0f2141a1a87ad805e2c5c_2_288x288.jpeg (0.2ms)
Started GET "/latest.json" for 2804:79d4:f008:68f:fd8c:855b:db16:bbee at 2026-03                                                                                        -26 20:49:23 +0000
Processing by ListController#latest as JSON
Completed 200 OK in 143ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 6.8ms)
Started GET "/t/17746/1.json?track_visit=true&forceLoad=true" for 2804:79d4:f008                                                                                        :68f:fd8c:855b:db16:bbee at 2026-03-26 20:49:31 +0000
Processing by TopicsController#show as JSON
  Parameters: {"track_visit" => "true", "forceLoad" => "true", "topic_id" => "17                                                                                        746", "post_number" => "1"}
Completed 200 OK in 114ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 1.8ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:32 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "5", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo k\",\"action\":\"reply\",\"ca                                                                                        tegoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"compos                                                                                        erTime\":46059,\"typingTime\":8500,\"locale\":\"\"}", "owner" => "fee91ce037e64e                                                                                        c297a500af13091165", "force_save" => "false"}
Completed 200 OK in 13ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:36 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "6", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":50400,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:37 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "7", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":51596,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by TopicsController#timings as */*
  Parameters: {"timings" => {"1" => "59036"}, "topic_time" => "59036", "topic_id                                                                                        " => "17746"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)

Hmmmm. Esos registros no muestran el error 500. ¿Cuándo ocurre exactamente el error? ¿Ves algún error en la pantalla o solo el mensaje genérico «Algo salió mal»? ¿Te aseguras de rellenar todos los campos? ¿Especialmente el ID del tema?

¿Puedes intentar crear un desafío de nuevo y ejecutar esto en cuanto veas el error 500? Aumentaremos un poco el tamaño:

./launcher enter app
tail -100 /var/www/discourse/log/production.log | grep -A 30 "500\|Error\|exception"

(publicación eliminada por el autor)

Espera, lo volveré a habilitar.

Ahhh. Creo que veo el problema. El nombre de la insignia debería extraerse del título del tema, pero creo que lo estropeé en mi última actualización. ¿Podrías intentar rellenar el campo del nombre de la insignia y ver si funciona? También lanzaré una actualización para solucionarlo en cuanto llegue a casa.

2 Me gusta

¿Algo nuevo? Me actualicé aquí y aún no hay nada

Hola. Lo siento. Olvidé actualizar este post anoche. Sí empujé una actualización que incluía la corrección para las insignias (junto con algunas otras mejoras). Si vas a Admin > Actualizar Discourse, deberías ver que hay una actualización disponible.

Haré un post completo con los cambios en un momento.

2 Me gusta

Estoy seguro de que lo estoy haciendo de la manera incorrecta.

Primera duda: ¿el ID del tema puede existir o necesito crear uno nuevo?
Entendí que la etiqueta no lleva #.

¿El inicio y el fin podrían ser un par de días o semanas, o puedo establecerlo hasta diciembre, por ejemplo?

De todos modos, esperaré a sus explicaciones porque me gusta este plugin y estoy aquí para proporcionar comentarios.

Debe ser un ID de tema existente al que su cuenta pueda acceder (asumo que es administrador, por lo que eso no debería ser un problema). Ejemplo: si la URL del tema es:

https://community.com/t/test-formatting/722

El ID de tema que debe ingresar es: 722

Al escribir el número, el nombre del tema debería aparecer debajo para confirmar que ingresó el ID correcto.

Tiene razón. Ingrese el hashtag sin el #. Si desea usar #testtag, simplemente escriba testtag en el cuadro.

Las fechas de inicio y fin pueden ser las que usted desee.

activerecord (8.0.5) lib/active_record/inheritance.rb:76:in 'ActiveRecord::Inheritance::ClassMethods#new'
plugins/discourse-daily-challenge/app/controllers/discourse_daily_challenge/admin_daily_challenges_controller.rb:26:in 'DiscourseDailyChallenge::AdminDailyChallengesController#create'

mi primera configuración

Y mis registros recientes