Hilfe bei der Begrenzung von Benutzerposts nach Kategorie und Zeitrahmen benötigt

Hallo zusammen,

ich suche nach Anleitungen, wie ich eine bestimmte Funktionalität in Discourse erreichen kann. Ich verwalte eine Community, in der ich eine Regel implementieren muss, die Benutzer daran hindert, ein neues Thema in zwei bestimmten Kategorien zu erstellen, wenn sie in den letzten 14 Tagen bereits in einer dieser Kategorien gepostet haben. Diese Einschränkung soll auch dann gelten, wenn ihr vorheriges Thema gelöscht wurde.

Nach einiger Recherche bin ich auf das Plugin discourse-flexible-rate-limits gestoßen, das ein guter Ausgangspunkt zu sein scheint. Es ermöglicht flexible Ratenbegrenzungen basierend auf Benutzergruppen und Aktionen, konzentriert sich jedoch eher auf kurzfristige Frequenzen (Minuten, Stunden, Tage) und unterstützt nicht direkt:

  1. Die Überprüfung von Beiträgen über mehrere Kategorien hinweg.
  2. Die Durchsetzung eines Zeitrahmens von bis zu 14 Tagen.
  3. Die Berücksichtigung gelöschter Themen bei der Prüfung.

Bevor ich mich mit der Anpassung dieses Plugins oder der Erstellung von Grund auf beschäftige, wollte ich fragen:

  • Kennt jemand ein bestehendes Plugin oder eine Methode, die diese Art von Funktionalität bereits abdeckt?
  • Gibt es empfohlene Ansätze, um ein bestehendes Plugin wie discourse-flexible-rate-limits so zu modifizieren, dass eine kategorieübergreifende und längerfristige Einschränkung einbezogen wird?
  • Gibt es allgemeine Ratschläge, wie man dies effektiv umsetzen kann?

Ich würde mich über alle Einblicke oder Vorschläge aus dieser großartigen Community freuen. Wenn Interesse besteht, teile ich auch gerne Updates darüber, wie ich dies letztendlich umsetze.

Vielen Dank im Voraus für Ihre Hilfe!

Ich bin mir nicht sicher, ob ich das vollständig verstehe, aber ich glaube, Sie möchten ein Plugin, das einen Benutzer aus einer Gruppe entfernt, wenn er in einer Reihe von Kategorien postet (mithilfe eines Topic-Create-Hooks) und dann täglich einen Job ausführt, um ihn nach einer bestimmten Anzahl von Tagen seit seinem letzten Beitrag in diesen Kategorien wieder zur Gruppe hinzuzufügen.

Wahrscheinlich 3-5 Stunden Arbeit, vielleicht etwas mehr mit guten Spezifikationen/Tests.

2 „Gefällt mir“

Hallo, @pfaffman, frohe Feiertage und danke für die Antwort!

Ich habe versucht, ein Flussdiagramm zu erstellen, um es zu verdeutlichen:

flowchart TB
    A0(Benutzer versucht, ein neues Thema in Kategorie A oder B zu erstellen) --> A1{Ist der Benutzer in einer<br>befreiten Gruppe--Admin, Mod,TL3, TL4,Abonnenten?}
    A1 -- Nein --> B1(Überprüfe das letzte Thema des Benutzers in den Kategorien A, B oder C,<br>einschließlich ausgeblendeter oder gelöschter Einträge)
    A1 -- Ja --> Z1(Posten erlauben)

    B1 --> B2{Wurde das letzte Thema<br>innerhalb von 14 Tagen erstellt?}
    B2 -- Ja --> C1(Beitrag blockieren + Fehler anzeigen,<br>Cooldown anzeigen,<br>Link zu Regeln)
    C1 --> E1(Entwurf speichern +<br>Senden-Schaltfläche deaktivieren) --> Ende(Ende)
    B2 -- Nein --> D1(Beitrag erlauben)

    D1 --> Ende(Ende)
    Z1 --> Ende(Ende)
Und ich habe auch versucht, eine einfache Spezifikation zu erstellen, um die Klärung zu unterstützen
```mermaid
flowchart TB
    A0(Benutzer versucht, ein neues Thema in Kategorie A oder B zu erstellen) --> A1{Ist der Benutzer in einer<br>befreiten Gruppe--Admin, Mod,TL3, TL4,Abonnenten?}
    A1 -- Nein --> B1(Überprüfe das letzte Thema des Benutzers in den Kategorien A, B oder C,<br>einschließlich ausgeblendeter oder gelöschter Einträge)
    A1 -- Ja --> Z1(Posten erlauben)

    B1 --> B2{Wurde das letzte Thema<br>innerhalb von 14 Tagen erstellt?}
    B2 -- Ja --> C1(Beitrag blockieren + Fehler anzeigen,<br>Cooldown anzeigen,<br>Link zu Regeln)
    C1 --> E1(Entwurf speichern +<br>Senden-Schaltfläche deaktivieren) --> Ende(Ende)
    B2 -- Nein --> D1(Beitrag erlauben)

    D1 --> Ende(Ende)
    Z1 --> Ende(Ende)

Erklärung des Ablaufs

  1. A0: Ein Benutzer versucht, ein neues Thema in Kategorie A oder B zu erstellen.

  2. A1: Das System prüft, ob der Benutzer zu einer befreiten Gruppe gehört:

    • Administratoren
    • Moderatoren
    • Vertrauensstufe 3 (TL3)
    • Vertrauensstufe 4 (TL4)
    • Eine benutzerdefinierte Gruppe „Abonnenten“
    • Wenn Ja, überspringe die Cooldown-Prüfung und erlaube sofort das Posten (Z1).
    • Wenn Nein, fahre mit B1 fort.
  3. B1: Das System ruft das zuletzt vom Benutzer erstellte Thema in den Kategorien A, B oder C ab. Diese Suche muss Folgendes beinhalten:

    • Soft-gelöschte Themen (nicht dauerhaft aus der Datenbank entfernt).
    • Themen, die in ausgeblendete oder Compliance-Kategorien verschoben wurden (z. B. Kategorie C).
  4. B2: Das System prüft, ob das Erstellungsdatum des letzten Themas innerhalb der letzten 14 Tage liegt.

    • Ja → Weiter zu C1 (der Beitrag wird blockiert).
    • Nein → Weiter zu D1 (der Beitrag wird erlaubt).
  5. C1: Das System zeigt eine Fehlermeldung an, die den Benutzer darüber informiert, dass er sich noch im Cooldown befindet. Die Nachricht sollte Folgendes enthalten:

    • Eine vereinfachte Aussage, dass er noch nicht posten kann.
    • Die verbleibende Zeit in Tagen und Stunden (keine Minuten).
    • Ein Link zur Seite mit den Community-Regeln (unten angegeben).
  6. E1: Nachdem die Fehlermeldung angezeigt wurde, wird der Inhalt des Benutzers automatisch als Entwurf gespeichert und die Schaltfläche „Senden“ oder „Thema erstellen“ wird deaktiviert.

  7. D1: Wenn seit dem letzten Thema des Benutzers mehr als 14 Tage vergangen sind, erlaubt das System das Posten des neuen Themas.

  8. Z1: Der Benutzer gehört zu einer befreiten Gruppe und kann daher uneingeschränkt posten.

2. Detaillierte Spezifikation

2.1 Eingeschränkte vs. Befreite Gruppen

  • Eingeschränkte Gruppen:
    • Alle Benutzer, die nicht zu den folgenden befreiten Gruppen gehören (üblicherweise TL0, TL1, TL2).
  • Befreite Gruppen:
    1. Administratoren
    2. Moderatoren
    3. Vertrauensstufe 3 (TL3)
    4. Vertrauensstufe 4 (TL4)
    5. Abonnenten (eine benutzerdefinierte Gruppe)

Diese befreiten Gruppen überspringen die 14-Tage-Prüfung vollständig.

2.2 Betroffene Kategorien

  • Versuch, ein neues Thema zu erstellen:
    • Ausgelöst, wenn ein Benutzer (in einer eingeschränkten Gruppe) versucht, ein neues Thema in Kategorie A oder B zu erstellen.
  • Prüfung des letzten Themas:
    • Das System prüft das zuletzt vom Benutzer erstellte Thema in den Kategorien A, B oder C (wobei C die „ausgeblendete“ oder „Compliance“-Kategorie ist).

Hinweis: Kategorie C ist enthalten, um Situationen zu erfassen, in denen das Thema eines Benutzers zur Löschung/Ausblendung/Compliance verschoben wird. Wenn der Benutzer innerhalb der letzten 14 Tage ein Thema in Kategorie C erstellt hat, zählt dies ebenfalls zum Cooldown.

2.3 14-Tage-Cooldown-Logik

  • Wenn das aktuellste Thema des Benutzers (in A/B/C) innerhalb der letzten 14 Tage erstellt wurde, blockiere die Erstellung neuer Themen in A oder B.
  • Wenn mehr als 14 Tage vergangen sind, erlaube es.

Zeitberechnung

  • Zeige die verbleibende Zeit in Tagen und Stunden an (z. B. „3 Tage 12 Stunden verbleibend“).
  • Minuten oder Sekunden müssen nicht angezeigt werden.

2.4 Blockieren und Entwurfspeicherung

  • Blockierverhalten:

    • Wenn der Benutzer blockiert wird, zeige eine Fehlermeldung (C1) an.
    • Das System speichert automatisch den Inhalt des Benutzers als Entwurf.
    • Die Schaltfläche „Senden“ wird deaktiviert, damit der Benutzer nicht fortfahren kann.
    • Beispiel-Fehlermeldung (vereinfacht):

    Entschuldigung, Sie können im Moment noch kein neues Thema in dieser Kategorie erstellen.
    Ihr letztes Thema wurde vor weniger als 14 Tagen gepostet,
    und Sie haben noch {X Tage und Y Stunden} Zeit, bevor Sie wieder posten können.
    Weitere Details finden Sie in unseren Community-Regeln:
    https://community.lezismore.org/t/topic/26/2

2.5 Zukünftige Flexibilität

  1. Zusätzliche Kategorien:
    • Derzeit sind nur A, B und C konfiguriert.
    • Wenn Sie in Zukunft Kategorien zu diesem Cooldown hinzufügen oder daraus entfernen müssen, stellen Sie sicher, dass das System oder Plugin ohne größere Codeänderungen erweitert werden kann.
  2. Unterschiedliche Zeiträume:
    • Der 14-Tage-Zeitraum könnte in den Einstellungen des Plugins konfigurierbar sein (falls Sie 7 Tage, 30 Tage usw. wünschen).
  3. Dynamische Gruppenzuweisungen:
    • Zusätzliche oder weniger befreite Gruppen (z. B. wenn Sie „Abonnenten“ hinzufügen oder entfernen) sollten unterstützt werden.

3. Zusammenfassung

  1. Eingeschränkte Gruppen (TL0, TL1, TL2 oder jeder Benutzer, der keiner befreiten Gruppe angehört) unterliegen einem 14-tägigen Cooldown, bevor sie ein weiteres Thema in den Kategorien A oder B erstellen können.
  2. Befreite Gruppen (Admin, Moderator, TL3, TL4, „Abonnenten“) können ohne Einschränkungen posten.
  3. Das System prüft die aktuellste Themenspeicherung in den Kategorien A, B oder C (einschließlich Soft-Delete oder versteckter Themen). Wenn es innerhalb von 14 Tagen erstellt wurde, wird das neue Thema blockiert.
  4. Fehlermeldung: Zeigt die verbleibende Zeit in Tagen/Stunden an und verlinkt zu den Community-Regeln unter:
  5. Entwurf: Wenn blockiert, wird der Beitrag des Benutzers als Entwurf gespeichert und die Senden-Schaltfläche deaktiviert.
  6. Diese Spezifikation kann in Zukunft auf zusätzliche Kategorien oder andere Zeiträume erweitert werden.

Ich würde mich über jeden Vorschlag freuen!

1 „Gefällt mir“

Das ist ziemlich genau das, was ich auch dachte. Meine Lösung ist, sie aus der Gruppe zu entfernen, die das Posten in diesen Kategorien erlaubt, wenn sie posten. Das macht sofort klar, dass sie nicht posten können und erfordert keine spezielle Codeänderung, die die Funktionsweise des Postens verändert.

3 „Gefällt mir“

Ich verstehe jetzt Ihre Lösung. :folded_hands: Obwohl dieser Ansatz einfach erscheinen mag, mache ich mir Sorgen über Folgendes:

  1. Lese- vs. Schreibzugriff

    • Derzeit können Benutzer auf TL1 (oder höher) sowohl in den Kategorien A und B lesen als auch posten.
    • Wenn wir einen Benutzer von TL1 entfernen, sobald er die 14-Tage-Regel verletzt, verliert er auch den Lesezugriff. Wir wollen ihn aber nur am Posten hindern, nicht am Lesen.
  2. Notwendigkeit, Gruppen aufzuteilen

    • Um das Szenario „lesen, aber nicht posten“ zu lösen, müssten wir mehrere Untergruppen erstellen:
    • TL1 Limited – kann lesen und antworten, aber keine Themen in A oder B erstellen.
    • TL1 Full – kann lesen, antworten und Themen erstellen.
    • Wenn ein Benutzer die 14-Tage-Regel verletzt, müssten wir ihn von TL1 Full zu TL1 Limited verschieben. Das erscheint komplizierter.
  3. Komplexität der Automatisierung

    • Selbst mit separaten Gruppen müssten wir den Benutzer automatisch wieder in die „Full“-Gruppe verschieben, sobald seine Sperre abgelaufen ist.
    • Das bedeutet, wir müssen eine Logik implementieren (z. B. einen geplanten Job oder benutzerdefinierten Code), die berechnet, wann die 14-Tage-Frist abgelaufen ist, und den Benutzer dann von TL1 Limited zurück zu TL1 Full zuweist.
    • Als Nicht-Programmierer fühle ich mich nicht sicher genug, um eine so komplexe Automatisierung selbst zu handhaben.

Mit anderen Worten: Während das Entfernen von Benutzern aus bestimmten Gruppen die Posting-Logik nicht direkt modifizieren mag, schafft es zusätzliche Gruppen und komplexe Regeln. Wir wollen nur das Posten für 14 Tage einschränken, nicht den Lesezugriff oder andere Berechtigungen.

Vielen Dank für alle Vorschläge oder Ideen. Ich habe versucht, Dinge über Discourse APIs und Webhooks in n8n zu integrieren, aber aufgrund meines begrenzten Programmierhintergrunds war das für mich ziemlich herausfordernd.