Assegnazione automatica dei titoli in base al livello di fiducia in Discourse

Ciao a tutti,

Ho impostato un sistema di ranking con titoli personalizzati, ma come sapete, Discourse non ha un modo integrato per assegnare un titolo predefinito a tutti i nuovi utenti. Quindi, ho creato una soluzione alternativa in cui:

  • I nuovi membri sono nel Gruppo 1
  • I membri attivi sono nel Gruppo 2
  • E così via…

Il metodo che ho utilizzato è il seguente:

cd /var/discourse
./launcher enter app
rails c

User.where(trust_level: 0).update_all(title: "عضو جديد")
User.where(trust_level: 1).update_all(title: "عضو جديد")
User.where(trust_level: 2).update_all(title: "عضو مشارك")
User.where(trust_level: 3).update_all(title: "عضو مبدع")

Il Problema

Devo eseguire questi comandi manualmente ogni volta che un nuovo utente si unisce. Se eseguo lo script oggi e un nuovo membro pubblica domani, non otterrà il titolo automaticamente, quindi devo accedere al server ed eseguire nuovamente i comandi.

Ho provato ad automatizzarlo con uno script Ruby e a chiamarlo tramite crontab, ma ottengo un errore.

Ho chiesto a ChatGPT e mi ha detto:

“Il modello User non viene caricato quando si esegue lo script direttamente con Ruby al di fuori dell’ambiente Discourse.”

Il problema è che non ho la corretta configurazione di config/environment all’interno dei file di Discourse.

L’ho aggiunto, ma non ha funzionato.

La Mia Domanda

C’è un modo per automatizzare questo senza usare crontab? Oppure come posso eseguire correttamente uno script che aggiorni i titoli degli utenti senza accedere manualmente alla console Rails ogni volta?

Grazie in anticipo!

2 Mi Piace

Qualsiasi aiuto?

Forse è possibile creando automazioni personalizzate per Discourse Automation e Create custom Automations, ma non so come funziona.

1 Mi Piace

Puoi ottenerlo con uno script di automazione personalizzato che utilizza i trigger User Event e User Promoted Event. Quando viene creato un nuovo utente (User Event) o il suo livello di fiducia cambia (User Promoted Event), puoi attivare uno script per assegnargli automaticamente un titolo in base al suo livello di fiducia.

5 Mi Piace

Grazie @jahan_gagan! qualche aiuto per realizzare questo script?

Wow! Bel jailbreak! :clap:

Sembra sfortunato che alcune impostazioni di gruppo non siano disponibili per i gruppi automatizzati come i livelli di fiducia. Dovrebbe essere possibile impostare il titolo dell’utente in base al gruppo di livelli di fiducia in cui si trova, ma non lo è.

Potresti provare a farlo usando il sistema di badge. Crea un badge che viene concesso quando un membro raggiunge il livello di fiducia desiderato e quindi imposta “Consenti l’uso del badge come titolo”.

Puoi quindi creare un’automazione utilizzando lo script “Appartenenza al gruppo utente tramite badge” che viene eseguito ogni giorno e aggiorna il titolo e il flair dell’utente.

5 Mi Piace

Un componente tematico che aggiungesse queste informazioni alla scheda del post/utente sarebbe più flessibile? In questo modo gli utenti potrebbero ancora usare il campo del titolo per altre cose come previsto (badge, identificatori di gruppo, qualcosa di personalizzato che potresti voler aggiungere), e averlo aggiunto da un componente tematico significherebbe che non potrebbero cambiarlo/rimuoverlo.

1 Mi Piace

Ciao,

Sto cercando di implementare questo utilizzando l’automazione del sistema di badge, ma sto riscontrando una limitazione.

Per eseguire lo script user_group_membership_through_badge, devo specificare un gruppo. Tuttavia, utilizzo già i gruppi di sistema predefiniti: Livello di fiducia 1, 2, 3, 4. Questi gruppi sono integrati e non possono essere selezionati nello strumento di automazione.

Se creo nuovi gruppi da utilizzare con questa automazione, temo che tutti i membri attuali non verranno trasferiti automaticamente e perderò la mappatura accurata degli utenti ai loro livelli di fiducia.

Ecco uno screenshot che mostra l’errore quando il campo gruppo viene lasciato vuoto:

C’è un modo per applicare l’aggiornamento badge-to-title senza richiedere un gruppo?
O esiste una soluzione alternativa per indirizzare direttamente i gruppi di Livello di fiducia all’interno di questa automazione?

@xkhalid Ho creato un piccolo plugin (anche il mio primo!) che:

  • Assegna un titolo ai nuovi utenti
  • Cambia il titolo in quello corrispondente al loro Livello di Fiducia. Ad esempio, TL1 → TL2: gli utenti ottengono il titolo TL2 ora, invece del titolo TL1.
  • Aggiorna i titoli degli utenti ogni 12 ore (si prevede di rendere la frequenza configurabile)

Tutti i titoli configurabili tramite impostazioni :slightly_smiling_face:.

4 Mi Piace

Grazie!

Dopo aver aggiunto questo ad app.yml

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

e ricostruito, ho riscontrato un errore 502 Bad Gateway. Ci sono soluzioni?
Per ora, l’ho rimosso da app.yml e tutto funziona bene.

Strano, a quanto ricordo quell’errore a volte può comparire dopo una ricompilazione, ma aspettando si risolve (o con un’altra ricompilazione).

Sì, lo so, ma questo problema si è verificato solo dopo aver aggiunto il repository Git e ricompilato. Mi ha dato questo errore.

Tuttavia, ci riproverò più tardi.


E questo problema? Potrebbe essere correlato?

1 Mi Piace

Ci darò un’altra occhiata, grazie per avermi informato.

1 Mi Piace

@xkhalid potresti provare ora? L’ho appena aggiornato.

1 Mi Piace

Grazie! Ora funziona.

Ma non si riflette per tutti gli utenti. Ad esempio, questo utente è al livello di fiducia 1 ed è un nuovo utente, ma non gli è stato assegnato alcun titolo.

Ci vorrà tempo o?

@xkhalid Ho caricato una correzione. Per favore, dimmi se ora funziona.
Grazie!

Voglio ringraziare @NateDhaliwal per il suo plugin!

È stato molto utile! e il titolo si aggiorna ogni 12 ore.

1 Mi Piace

Ciao, grazie per il tuo ottimo plugin!

Ho un’esigenza più complessa:
Vorrei impostare automaticamente i titoli degli utenti in base a una combinazione di appartenenza a gruppi (ad esempio: gruppo A o gruppo B) e livello di fiducia (ad esempio: TL2, TL3, ecc.). Ad esempio, un utente nel gruppo A con TL2 otterrebbe il titolo “A - TL2”, e così via.

Sarebbe possibile estendere il tuo plugin per supportare questa funzionalità, o hai qualche consiglio su come implementarla?
Non ho esperienza di programmazione, quindi apprezzerei molto qualsiasi suggerimento o aiuto.

Grazie mille!

Questi gruppi sono i gruppi primari dell’utente?

Sì, voglio usare il gruppo primario dell’utente per decidere il titolo.