Automatisches Zuweisen von Titeln basierend auf dem Vertrauenslevel in Discourse

Hallo zusammen,

ich habe ein Rangsystem mit benutzerdefinierten Titeln eingerichtet, aber wie ihr wisst, gibt es in Discourse keine integrierte Möglichkeit, allen neuen Benutzern einen Standardtitel zuzuweisen. Daher habe ich eine Problemumgehung erstellt, bei der:

  • Neue Mitglieder in Gruppe 1 sind
  • Aktive Mitglieder in Gruppe 2 sind
  • Und so weiter…

Die von mir verwendete Methode ist wie folgt:

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

Das Problem

Ich muss diese Befehle jedes Mal manuell ausführen, wenn ein neuer Benutzer beitritt. Wenn ich das Skript heute ausführe und morgen ein neues Mitglied etwas postet, erhält es nicht automatisch den Titel, sodass ich mich beim Server anmelden und die Befehle erneut ausführen muss.

Ich habe versucht, es mit einem Ruby-Skript zu automatisieren und es über crontab aufzurufen, aber ich erhalte eine Fehlermeldung.

Ich habe ChatGPT gefragt und es sagte mir:

„Das User-Modell wird nicht geladen, wenn Sie das Skript direkt mit Ruby außerhalb der Discourse-Umgebung ausführen.“

Das Problem ist, dass ich nicht die richtige config/environment-Einrichtung innerhalb der Discourse-Dateien habe.

Ich habe es hinzugefügt, aber es hat nicht funktioniert.

Meine Frage

Gibt es eine Möglichkeit, dies ohne crontab zu automatisieren? Oder wie kann ich ein Skript, das Benutzertitel aktualisiert, ordnungsgemäß ausführen, ohne jedes Mal die Rails-Konsole manuell aufzurufen?

Vielen Dank im Voraus!

2 „Gefällt mir“

Irgendwelche Hilfe?

Vielleicht ist es möglich, indem man eine benutzerdefinierte Automatisierung für Discourse Automation & Create custom Automations erstellt, aber ich weiß nicht, wie es funktioniert.

1 „Gefällt mir“

Sie können dies mit einem benutzerdefinierten Automatisierungsskript erreichen, das die Auslöser User Event und User Promoted Event verwendet. Wenn ein neuer Benutzer erstellt wird (User Event) oder sich sein Vertrauenslevel ändert (User Promoted Event), können Sie ein Skript auslösen, um ihm automatisch einen Titel basierend auf seinem Vertrauenslevel zuzuweisen.

5 „Gefällt mir“

Danke @jahan_gagan! Gibt es Hilfe, um dieses Skript zu erstellen?

Wow! Guter Hack! :clap:

Es scheint bedauerlich, dass einige Gruppeneinstellungen für automatisierte Gruppen wie Vertrauensstufen nicht verfügbar sind. Es sollte möglich sein, den Benutzertitel basierend auf der Vertrauensstufengruppe, in der sie sich befinden, festzulegen, aber das ist nicht der Fall.

Sie könnten versuchen, dies mit dem Abzeichensystem zu tun. Erstellen Sie ein Abzeichen, das vergeben wird, wenn ein Mitglied die gewünschte Vertrauensstufe erreicht, und setzen Sie dann „Abzeichen als Titel zulassen“.

Sie können dann eine Automatisierung mit dem Skript „Benutzergruppenzugehörigkeit durch Abzeichen“ erstellen, das täglich ausgeführt wird und den Titel und das Flair des Benutzers aktualisiert.

5 „Gefällt mir“

Wäre eine Theme-Komponente, die diese Informationen zur Beitrags-/Benutzerkarte hinzufügt, flexibler? Auf diese Weise können Benutzer das Titelfeld weiterhin für andere Zwecke wie beabsichtigt verwenden (Abzeichen, Gruppenkennungen, etwas Benutzerdefiniertes, das Sie hinzufügen möchten), und wenn es von einer Theme-Komponente hinzugefügt wird, könnten sie es nicht ändern/entfernen.

1 „Gefällt mir“

Hallo,

Ich versuche, dies mit der Automatisierung des Abzeichensystems zu implementieren, stoße aber auf eine Einschränkung.

Um das Skript user_group_membership_through_badge auszuführen, muss ich eine Gruppe angeben. Ich verwende jedoch bereits die Standard-Systemgruppen: Vertrauensstufe 1, 2, 3, 4. Diese Gruppen sind integriert und können im Automatisierungstool nicht ausgewählt werden.

Wenn ich neue Gruppen erstelle, um sie mit dieser Automatisierung zu verwenden, befürchte ich, dass nicht alle aktuellen Mitglieder automatisch übernommen werden – und ich die genaue Zuordnung von Benutzern zu ihren Vertrauensstufen verliere.

Hier ist ein Screenshot, der den Fehler zeigt, wenn das Gruppenfeld leer gelassen wird:

Gibt es eine Möglichkeit, das Update von Abzeichen zu Titeln anzuwenden, ohne eine Gruppe zu benötigen?
Oder gibt es eine Problemumgehung, um die Vertrauensstufengruppen direkt in dieser Automatisierung anzusprechen?

@xkhalid Ich habe ein kleines Plugin (auch mein erstes!) zusammengestellt, das:

  • Neuen Benutzern einen Titel zuweist
  • Den Titel auf den entsprechenden Titel ihrer Vertrauensstufe ändert. Z.B. TL1 → TL2: Benutzer erhalten jetzt den TL2-Titel anstelle des TL1-Titels.
  • Aktualisiert Benutzertitel alle 12 Stunden (Pläne, die Häufigkeit konfigurierbar zu machen)

Alle Titel sind über die Einstellungen konfigurierbar :slightly_smiling_face:.

4 „Gefällt mir“

Danke!

Nachdem ich dies zu app.yml hinzugefügt habe

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

und neu kompiliert habe, trat ein 502 Bad Gateway-Fehler auf. Gibt es eine Lösung?
Fürs Erste habe ich es aus app.yml entfernt und alles funktioniert wieder gut.

Hm, seltsam. Soweit ich weiß, kann dieser Fehler manchmal nach einem Rebuild auftreten, aber wenn man wartet, löst er sich von selbst (oder durch einen weiteren Rebuild).

Ja, ich weiß – aber dieses Problem trat erst auf, nachdem ich das Git-Repository hinzugefügt und neu kompiliert hatte. Es gab mir diesen Fehler.

Ich werde es jedoch später noch einmal versuchen.


Was ist mit diesem Problem? Könnte es damit zusammenhängen?

1 „Gefällt mir“

Ich werde mir das noch einmal ansehen, danke für die Information.

1 „Gefällt mir“

@xkhalid Könntest du es jetzt versuchen? Habe es gerade aktualisiert.

1 „Gefällt mir“

Danke! Es funktioniert jetzt.

Aber es spiegelt sich nicht für alle Benutzer wider. Zum Beispiel hat dieser Benutzer Vertrauensstufe 1 und ist ein neuer Benutzer, aber es wurde kein Titel zugewiesen.

Es wird Zeit dauern oder?

@xkhalid Ich habe einen Fix hochgeladen. Bitte sag mir, ob es jetzt funktioniert.
Danke!

Ich möchte @NateDhaliwal für sein Plugin danken!

Es war sehr hilfreich! und der Titel aktualisiert sich alle 12 Stunden.

1 „Gefällt mir“

Hallo, vielen Dank für Ihr großartiges Plugin!

Ich habe einen komplexeren Bedarf:
Ich möchte Benutzertitel automatisch basierend auf einer Kombination aus Gruppenzugehörigkeit (z. B. Gruppe A oder Gruppe B) und Vertrauensstufe (z. B. TL2, TL3 usw.) festlegen. Ein Benutzer in Gruppe A mit TL2 würde beispielsweise den Titel „A - TL2“ erhalten und so weiter.

Wäre es möglich, Ihr Plugin um diese Funktion zu erweitern, oder haben Sie Ratschläge zur Implementierung?
Ich habe selbst keine Programmiererfahrung und würde mich über jeden Vorschlag oder jede Hilfe sehr freuen.

Vielen Dank!

Sind diese Gruppen die primären Gruppen des Benutzers?

Ja, ich möchte die primäre Gruppe des Benutzers für die Entscheidung des Titels verwenden.