¿Es posible restablecer manualmente la URL de la tabla de clasificación?
Por ejemplo, de leaderboards/2 a leaderboards/1.
¿Es posible restablecer manualmente la URL de la tabla de clasificación?
Por ejemplo, de leaderboards/2 a leaderboards/1.
¿Es posible asignar puntos a un usuario como recompensa adicional? ![]()
Quizás quieras ver:
que tiene esta solicitud curl dentro:
curl --location 'https://my.discourse.com/admin/plugins/gamification/score_events' \
--header 'Api-Key: <tu clave>' \
--header 'Api-Username: <tu nombre de usuario>' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "101",
"date": "2024-05-15",
"points": "-141",
"description": "Ajuste de puntos de gamificación"
}'
Habilité este plugin en el administrador, pero la pestaña “Leaderboard” no apareció automáticamente. Tampoco apareció cuando agregué nuevas tablas de clasificación. ¿Por qué sucede esto? ¿Dónde puedo ver estas tablas de clasificación?
Creo que tienes que añadirlos tú mismo a la barra lateral
. Las tablas de clasificación están en /leaderboard, /leaderboard/2, /leaderboard/3, etc.
¿Es posible crear una tabla de clasificación para una categoría o etiqueta específica?
Las tablas de clasificación están vinculadas a grupos. Pero puedes especificar qué categorías afectan a todas las tablas de clasificación en la configuración de gamificación. Parece una idea interesante mover eso a la tabla de clasificación, para tener, por ejemplo, una tabla de clasificación de #soporte aquí en esta comunidad.
2 publicaciones se dividieron en un nuevo tema: Reducción de puntos para usuarios marcados
¿Hay alguna manera de excluirme de las clasificaciones?
sí, añádete a un nuevo grupo (llámalo ‘leaderboard-exclusion’ o algo así) y luego excluye el grupo en la configuración del complemento.
edición: esto también te permitirá excluir fácilmente a cualquier otra persona si lo deseas en algún momento, añadiéndola al mismo grupo. ![]()
Muchas gracias. Eso tiene sentido.
Actualicé a la versión 2026.1.0, luego creé una tabla de clasificación mensual y al acceder a la siguiente ruta se produjo un error:
http://localhost:4200/admin/plugins/discourse-gamification/leaderboards
El error es el siguiente:
assert.js:40
Uncaught (in promise) Error: Assertion Failed: You attempted to update `_value` on `TrackedStorageImpl`, but it had already been used previously in the same computation. Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.
`_value` was first used:
- While rendering:
{{outlet}} for -top-level
-top-level
{{outlet}} for application
application
DiscourseRoot
{{outlet}} for admin
admin
{{outlet}} for adminPlugins
admin-plugins
{{outlet}} for adminPlugins.show
show
AdminPluginConfigPage
AdminPluginConfigArea
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards
adminPlugins.show.discourse-gamification-leaderboards
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards.index
discourse-gamification-leaderboards
DPageSubheader
(result of a `unknown` helper)
Stack trace for the update:
at TrackedArray._dirtyCollection2 (array.ts:163:13)
at Object.set (array.ts:126:15)
at Proxy.sort (<anonymous>)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.sortedLeaderboards (index.js:23:1)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.<anonymous> (handle-descriptor.js:67:17)
Luego identifiqué el archivo problemático como:
plugins/discourse-gamification/admin/assets/javascripts/discourse/controllers/admin-plugins/show/discourse-gamification-leaderboards/index.js
Código específico:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || [] // línea 22
);
}
La razón del error es:
Error de aserción del sistema de gestión de estado reactivo de Ember.js (más precisamente, Glimmer), la causa principal es: dentro del mismo ciclo de computación, primero se lee un valor tracked (rastreado) y luego se intenta modificar ese valor. Esta operación de “usar primero y actualizar después” puede causar confusión lógica, bucles infinitos o problemas de rendimiento, por lo que Ember lo prohíbe directamente.
Problema clave:
Array.sort() modifica el array original in situ, lo que actualiza el estado leaderboards @tracked.
La función computada (sortedLeaderboards) tiene el propósito de derivar un nuevo valor, no de modificar el estado original; en sí misma debería ser una “función pura” (sin efectos secundarios, no modifica la fuente de entrada).
A continuación se muestra la solución de reparación:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
//leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
leaderboards?.slice().sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
);
}
Captura después de la corrección:
Luego, este tipo de problema no parece ser un caso aislado. Supongo que es un problema de incompatibilidad causado por la actualización de emberjs. Y muchos lugares en los complementos no se modificaron en consecuencia con la actualización, después de todo, este trabajo no es tan simple como parece.
Pregunta: ¿Hay un retraso en la asignación de puntos? Por ejemplo, los nuevos usuarios están realizando acciones que otorgan puntos, como publicar un nuevo tema o dar un “me gusta”, pero sus puntuaciones no aparecen. Tengo el nivel de confianza 0 incluido en la configuración, así que supongo que es solo un retraso en la asignación de puntos. Si es así, ¿con qué frecuencia se calcula y actualiza? ¡Gracias!