Attribuer automatiquement des titres en fonction du niveau de confiance dans Discourse

Salut tout le monde,

J’ai mis en place un système de classement avec des titres personnalisés, mais comme vous le savez, Discourse n’a pas de moyen intégré d’attribuer un titre par défaut à tous les nouveaux utilisateurs. J’ai donc créé une solution de contournement où :

  • Les nouveaux membres sont dans le Groupe 1
  • Les membres actifs sont dans le Groupe 2
  • Et ainsi de suite…

La méthode que j’ai utilisée est la suivante :

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: "عضو مبدع")

Le Problème

Je dois exécuter ces commandes manuellement à chaque fois qu’un nouvel utilisateur rejoint. Si j’exécute le script aujourd’hui et qu’un nouveau membre publie demain, il n’obtiendra pas le titre automatiquement, je devrai donc me connecter au serveur et relancer les commandes.

J’ai essayé de l’automatiser avec un script Ruby et de l’appeler via crontab, mais j’obtiens une erreur.

J’ai demandé à ChatGPT, et il m’a dit :

« Le modèle User n’est pas chargé lorsque vous exécutez le script directement avec Ruby en dehors de l’environnement Discourse. »

Le problème est que je n’ai pas la configuration config/environment appropriée à l’intérieur des fichiers Discourse.

Je l’ai ajouté, mais cela n’a pas fonctionné.

Ma Question

Existe-t-il un moyen d’automatiser cela sans utiliser crontab ? Ou comment puis-je exécuter correctement un script qui met à jour les titres des utilisateurs sans entrer manuellement dans la console Rails à chaque fois ?

Merci d’avance !

2 « J'aime »

Une aide quelconque ?

Peut-être est-il possible en créant une automatisation personnalisée pour Discourse Automation & Create custom Automations, mais je ne sais pas comment cela fonctionne.

1 « J'aime »

Vous pouvez y parvenir avec un script d’automatisation personnalisé utilisant les déclencheurs User Event et User Promoted Event. Lorsqu’un nouvel utilisateur est créé (User Event) ou que son niveau de confiance change (User Promoted Event), vous pouvez déclencher un script pour lui attribuer automatiquement un titre en fonction de son niveau de confiance.

5 « J'aime »

Merci @jahan_gagan ! une aide pour créer ce script ?

Impressionnant ! Beau piratage ! :clap:

Il semble regrettable que certains paramètres de groupe ne soient pas disponibles pour les groupes automatisés comme les niveaux de confiance. Il devrait être possible de définir le titre de l’utilisateur en fonction du groupe de niveau de confiance dans lequel il se trouve, mais ce n’est pas le cas.

Vous pourriez essayer de le faire en utilisant le système d’insignes. Créez un insigne qui est accordé lorsqu’un membre atteint le niveau de confiance que vous souhaitez, puis définissez “Autoriser l’insigne à être utilisé comme titre”.

Vous pouvez ensuite créer une automatisation à l’aide du script “Appartenance à un groupe d’utilisateurs par insigne” qui s’exécute tous les jours et met à jour le titre et le flair de l’utilisateur.

5 « J'aime »

Un composant de thème qui ajouterait ces informations à la carte de publication/utilisateur serait-il plus flexible ? De cette façon, les utilisateurs peuvent toujours utiliser le champ titre pour d’autres choses comme prévu (badges, identifiants de groupe, quelque chose de personnalisé que vous pourriez vouloir ajouter), et le fait qu’il soit ajouté par un composant de thème signifierait qu’ils ne pourraient pas le changer/le supprimer.

1 « J'aime »

Salut,

J’essaie d’implémenter cela en utilisant l’automatisation du système de badges, mais je rencontre une limitation.

Pour exécuter le script user_group_membership_through_badge, je dois spécifier un groupe. Cependant, j’utilise déjà les groupes système par défaut : Niveau de confiance 1, 2, 3, 4. Ces groupes sont intégrés et ne peuvent pas être sélectionnés dans l’outil d’automatisation.

Si je crée de nouveaux groupes à utiliser avec cette automatisation, je crains que tous les membres actuels ne soient pas automatiquement transférés — et je perdrai la correspondance exacte entre les utilisateurs et leurs niveaux de confiance.

Voici une capture d’écran montrant l’erreur lorsque le champ groupe est laissé vide :

Existe-t-il un moyen d’appliquer la mise à jour du badge au titre sans nécessiter de groupe ?
Ou existe-t-il une solution de contournement pour cibler directement les groupes de niveau de confiance dans cette automatisation ?

@xkhalid J’ai mis au point un petit plugin (c’est aussi mon premier !) qui :
<s

  • Assigne un titre aux nouveaux utilisateurs
  • Change le titre pour celui correspondant à leur niveau de confiance. Par exemple, TL1 → TL2 : les utilisateurs obtiennent le titre TL2 maintenant, au lieu du titre TL1.
    </s
  • Met à jour les titres des utilisateurs toutes les 12 heures (prévoit de rendre la fréquence configurable)

Tous les titres sont configurables via les paramètres :slightly_smiling_face:.

4 « J'aime »

Merci !

Après avoir ajouté ceci à app.yml

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

et reconstruit, j’ai rencontré une erreur 502 Bad Gateway. Une solution ?
Pour l’instant, je l’ai retiré de app.yml et tout fonctionne bien.

Bizarre. Si ma mémoire est bonne, cette erreur peut parfois apparaître après une reconstruction, mais attendre qu’elle se résolve (ou une autre reconstruction) la corrigera.

Oui, je sais — mais ce problème n’est survenu qu’après l’ajout du dépôt Git et la reconstruction. Il m’a donné cette erreur.

Cependant, je vais réessayer plus tard.


Qu’en est-il de ce problème ? Pourrait-il être lié ?

1 « J'aime »

Je vais jeter un autre coup d’œil à cela, merci de m’avoir informé.

1 « J'aime »

@xkhalid pourriez-vous essayer maintenant ? Je viens de le mettre à jour.

1 « J'aime »

Merci ! Ça fonctionne maintenant.

Mais ce n’est pas reflété pour tous les utilisateurs. Par exemple, cet utilisateur est au niveau de confiance 1 et est un nouvel utilisateur, mais aucun titre ne lui a été attribué.

Cela prendra du temps ou ?

@xkhalid J’ai poussé un correctif. Dites-moi si cela fonctionne maintenant.
Merci !

Je tiens à remercier @NateDhaliwal pour son plugin !

Il a été très utile ! et le titre se met à jour toutes les 12 heures.

1 « J'aime »

Salut, merci pour votre excellent plugin !

J’ai un besoin plus complexe :
J’aimerais définir automatiquement les titres des utilisateurs en fonction d’une combinaison de l’appartenance à un groupe (par exemple : groupe A ou groupe B) et du niveau de confiance (par exemple : TL2, TL3, etc.). Par exemple, un utilisateur du groupe A avec TL2 obtiendrait le titre « A - TL2 », et ainsi de suite.

Serait-il possible d’étendre votre plugin pour prendre en charge cette fonctionnalité, ou avez-vous des conseils sur la façon de l’implémenter ?
Je n’ai pas d’expérience en codage moi-même, donc j’apprécierais grandement toute suggestion ou aide.

Merci beaucoup !

Ces groupes sont-ils les groupes principaux de l’utilisateur ?

Oui, je veux utiliser le groupe principal de l’utilisateur pour décider du titre.