Gamificazione di Discourse

È possibile reimpostare manualmente l’URL della classifica in qualche modo?

Ad esempio, da leaderboards/2 a leaderboards/1.

È possibile assegnare punti a un utente come ricompensa aggiuntiva? :grin:

1 Mi Piace

Potrebbe interessarti vedere:

che contiene questa richiesta curl al suo interno:

curl --location 'https://my.discourse.com/admin/plugins/gamification/score_events' \
--header 'Api-Key: \u003cyour key\u003e' \
--header 'Api-Username: \u003cyour username\u003e' \
--header 'Content-Type: application/json' \
--data '{
    "user_id": "101",
    "date": "2024-05-15",
    "points": "-141",
    "description": "Gamification point adjustment"
}'
2 Mi Piace

Ho abilitato questo plugin in admin, ma la barra delle schede non ha visualizzato automaticamente la classifica, né è apparsa quando ho aggiunto nuove classifiche. Come mai? Dove dovrei guardare queste classifiche?

Penso che tu debba aggiungerli tu stesso alla barra laterale :thinking:. Le classifiche si trovano su /leaderboard, /leaderboard/2, /leaderboard/3 ecc.

È possibile creare una classifica per una categoria o un tag specifico?

Le classifiche sono associate ai gruppi. Tuttavia, è possibile specificare quali categorie influenzano tutte le classifiche nelle impostazioni di gamification. Sembra un’idea interessante spostare questo nelle classifiche, per esempio per avere una classifica di Support qui in questa community.

3 Mi Piace

2 post sono stati divisi in un nuovo argomento: Riduzione dei punti per gli utenti segnalati

C’è un modo per escludermi dalle classifiche?

sì, aggiungiti a un nuovo gruppo (chiamalo ‘leaderboard-exclusion’ o qualcosa di simile) e poi escludi il gruppo nelle impostazioni del plugin.

modifica: questo ti permetterà anche di escludere facilmente chiunque altro se lo desideri in un secondo momento, aggiungendolo allo stesso gruppo. :slight_smile:

3 Mi Piace

Grazie mille. Ha senso.

2 Mi Piace

Dopo l’aggiornamento alla versione 2026.1.0, ho creato una classifica mensile e ho riscontrato un errore quando ho visitato il seguente percorso:

http://localhost:4200/admin/plugins/discourse-gamification/leaderboards

L’errore è il seguente:

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)

Ho individuato il file problematico come segue:

plugins/discourse-gamification/admin/assets/javascripts/discourse/controllers/admin-plugins/show/discourse-gamification-leaderboards/index.js

Codice specifico:

  @discourseComputed("model.leaderboards.@each.updatedAt")
  sortedLeaderboards(leaderboards) {
    return (
      leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || [] // riga 22
    );
  }

La causa dell’errore è:

Errore di asserzione della gestione dello stato reattivo di Ember.js (più precisamente, del sistema di tracciamento Glimmer). Il nocciolo del problema è: all’interno dello stesso ciclo di calcolo, si legge prima un valore tracked (tracciato) e successivamente si tenta di modificare tale valore. Questa operazione di “uso prima dell’aggiornamento” può causare confusione logica, bug di riverificazione infinita e problemi di prestazioni, pertanto Ember lo vieta direttamente.

Problema chiave:

  • Array.sort() modifica l’array originale sul posto, aggiornando lo stato leaderboards @tracked.

  • La proprietà calcolata (sortedLeaderboards) ha il compito di derivare un nuovo valore, non di modificare lo stato originale; dovrebbe essere una “funzione pura” (senza effetti collaterali, non modifica la sorgente di input).

Di seguito è riportata la soluzione di correzione:

  @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)) || []
    );
  }

Screenshot dopo la correzione:

E sembra che problemi simili non siano un caso isolato. Suppongo che sia un problema di incompatibilità dovuto all’aggiornamento di emberjs. Tuttavia, molte di queste parti nei plugin non sono state modificate in sincronia con l’aggiornamento, poiché questo lavoro non è semplice come sembra.

Domanda: C’è un ritardo nell’assegnazione dei punti? Ad esempio, i nuovi utenti stanno compiendo azioni che prevedono l’assegnazione di punti, come la pubblicazione di un nuovo argomento o l’assegnazione di un “mi piace”, ma i loro punteggi non vengono visualizzati. Ho incluso il livello di fiducia 0 nelle impostazioni, quindi presumo che sia solo un ritardo nell’assegnazione dei punti? In tal caso, con quale frequenza calcola e aggiorna? Grazie!

4 Mi Piace