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.
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?
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.
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.
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.
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 .
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.
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.