Necessita aiuto per limitare i messaggi degli utenti per categoria e intervallo di tempo

Ciao a tutti,

Sto cercando una guida per implementare una funzionalità specifica in Discourse. Gestisco una community in cui devo applicare una regola che impedisca agli utenti di creare un nuovo argomento in due categorie specifiche se hanno già pubblicato in una di quelle categorie negli ultimi 14 giorni. Questa restrizione dovrebbe applicarsi anche se il loro precedente argomento è stato eliminato.

Dopo alcune ricerche, mi sono imbattuto nel plugin discourse-flexible-rate-limits, che sembra un buon punto di partenza. Consente limiti di frequenza flessibili basati su gruppi di utenti e azioni, ma sembra concentrarsi sulla frequenza a breve termine (minuti, ore, giorni) e non supporta direttamente:

  1. Il controllo dei post in più categorie.
  2. L’applicazione di un intervallo di tempo di 14 giorni.
  3. L’inclusione di argomenti eliminati nel controllo.

Prima di addentrarmi nella personalizzazione di questo plugin o nella creazione di qualcosa da zero, volevo chiedere:

  • Qualcuno conosce un plugin o un metodo esistente che possa già gestire questo tipo di funzionalità?
  • Ci sono approcci consigliati per modificare un plugin esistente come discourse-flexible-rate-limits per includere una restrizione inter-categoria e a lungo termine?
  • Qualsiasi consiglio generale su come implementare questo in modo efficace?

Apprezzerei qualsiasi intuizione o suggerimento da questa fantastica community. Se c’è interesse, sarei felice di condividere aggiornamenti su come finirò per implementarlo.

Grazie mille in anticipo per il vostro aiuto!

Non sono sicuro di capire appieno, ma penso che tu voglia un plugin che rimuova un utente da un gruppo quando pubblica in una serie di categorie (utilizzando un hook di creazione di argomenti) e quindi esegua un’attività giornaliera per riaggiungerlo al gruppo dopo un certo numero di giorni dall’ultimo argomento in quella serie di categorie.

Probabilmente 3-5 ore di lavoro, forse un po’ di più con buone specifiche/test.

2 Mi Piace

Ciao, @pfaffman, buone feste e grazie per la risposta!

Ho provato a creare un diagramma di flusso per chiarire:

flowchart TB
    A0(L'utente tenta di creare un nuovo argomento nella Categoria A o B) --> A1{L'utente fa parte di un gruppo esente<br>- Admin, Mod, TL3, TL4, Iscritti?}
    A1 -- No --> B1(Controlla l'ultimo argomento dell'utente nelle Categorie A, B o C,<br>inclusi record nascosti o eliminati)
    A1 -- Sì --> Z1(Consenti la pubblicazione)

    B1 --> B2{L'ultimo argomento è stato<br>creato entro 14 giorni?}
    B2 -- Sì --> C1(Blocca post + mostra errore,<br>visualizza cooldown,<br>link alle regole)
    C1 --> E1(Salva bozza +<br>disabilita pulsante invio) ---> End(Fine)
    B2 -- No --> D1(Consenti post)

    D1 --> End(Fine)
    Z1 --> End(Fine)
E ho anche provato a creare una semplice specifica per aiutare a chiarire
```mermaid
flowchart TB
    A0(L'utente tenta di creare un nuovo argomento nella Categoria A o B) --> A1{L'utente fa parte di un gruppo esente<br>- Admin, Mod, TL3, TL4, Iscritti?}
    A1 -- No --> B1(Controlla l'ultimo argomento dell'utente nelle Categorie A, B o C,<br>inclusi record nascosti o eliminati)
    A1 -- Sì --> Z1(Consenti la pubblicazione)

    B1 --> B2{L'ultimo argomento è stato<br>creato entro 14 giorni?}
    B2 -- Sì --> C1(Blocca post + mostra errore,<br>visualizza cooldown,<br>link alle regole)
    C1 --> E1(Salva bozza +<br>disabilita pulsante invio) ---> End(Fine)
    B2 -- No --> D1(Consenti post)

    D1 --> End(Fine)
    Z1 --> End(Fine)

Spiegazione del Flusso

  1. A0: Un utente tenta di creare un nuovo argomento nella Categoria A o B.

  2. A1: Il sistema verifica se l’utente appartiene a un gruppo esente:
    • Amministratori
    • Moderatori
    • Livello di Fiducia 3 (TL3)
    • Livello di Fiducia 4 (TL4)
    • Un gruppo personalizzato “Iscritti”
    • Se , salta il controllo del cooldown e consenti immediatamente la pubblicazione (Z1).
    • Se No, procedi a B1.

  3. B1: Il sistema recupera l’ultimo argomento creato dall’utente nelle Categorie A, B o C. Questa ricerca deve includere:
    • Argomenti eliminati in modo “soft” (non rimossi permanentemente dal database).
    • Argomenti spostati in categorie nascoste o di conformità (ad es. Categoria C).

  4. B2: Il sistema verifica se la data di creazione dell’ultimo argomento rientra negli ultimi 14 giorni.
    → Continua a C1 (il post viene bloccato).
    No → Procedi a D1 (consenti il post).

  5. C1: Il sistema mostra un messaggio di errore che informa l’utente che è ancora in cooldown. Il messaggio dovrebbe includere:
    • Un’affermazione semplificata che non può ancora pubblicare.
    • Il tempo rimanente in giorni e ore (nessun minuto).
    • Un link alla pagina delle regole della community (fornita di seguito).

  6. E1: Dopo aver mostrato l’errore, il contenuto dell’utente viene salvato automaticamente come bozza e il pulsante “Invia” o “Crea Argomento” viene disabilitato.

  7. D1: Se sono trascorsi più di 14 giorni dall’ultimo argomento dell’utente, il sistema consente la pubblicazione del nuovo argomento.

  8. Z1: L’utente fa parte di un gruppo esente, quindi può pubblicare senza restrizioni.

2. Specifica Dettagliata

2.1 Gruppi Ristretti vs. Gruppi Esenti

Gruppi Ristretti:
• Tutti gli utenti non appartenenti ai seguenti gruppi esenti (comunemente TL0, TL1, TL2).
Gruppi Esenti:

  1. Amministratori
  2. Moderatori
  3. Livello di Fiducia 3 (TL3)
  4. Livello di Fiducia 4 (TL4)
  5. Iscritti (un gruppo personalizzato)

Questi gruppi esenti saltano del tutto il controllo dei 14 giorni.

2.2 Categorie Coinvolte

Tentativo di Nuovo Argomento:
• Attivato quando un utente (in un gruppo ristretto) tenta di creare un nuovo argomento nella Categoria A o B.

Controllo Ultimo Argomento:
• Il sistema controlla l’ultimo argomento creato dall’utente nelle Categorie A, B o C (dove C è la categoria “nascosta” o di “conformità”).

Nota: La Categoria C è inclusa per catturare situazioni in cui l’argomento di un utente viene spostato per eliminazione/nascondimento/conformità. Se l’utente ha creato un argomento nella Categoria C negli ultimi 14 giorni, conta anche per il cooldown.

2.3 Logica del Cooldown di 14 Giorni

• Se l’argomento più recente dell’utente (in A/B/C) è stato creato entro 14 giorni, blocca la creazione di nuovi argomenti in A o B.

• Se sono trascorsi più di 14 giorni, consentila.

Calcolo del Tempo

• Visualizza il tempo rimanente in giorni e ore (ad es. “3 giorni e 12 ore rimanenti”).
• Non è necessario mostrare minuti o secondi.

2.4 Blocco e Salvataggio Bozze

Comportamento di Blocco:
• Quando l’utente viene bloccato, mostra un messaggio di errore (C1).
• Il sistema salva automaticamente il contenuto dell’utente come bozza.
• Il pulsante “Invia” diventa disabilitato in modo che l’utente non possa procedere.
Messaggio di Errore di Esempio (semplificato):

Mi dispiace, non puoi ancora creare un nuovo argomento in questa categoria.
Il tuo ultimo argomento è stato pubblicato meno di 14 giorni fa,
e ti rimangono {X giorni e Y ore} prima di poter pubblicare di nuovo.
Per maggiori dettagli, consulta le nostre regole della community:
https://community.lezismore.org/t/topic/26/2

2.5 Flessibilità Futura

  1. Categorie Aggiuntive:
    • Attualmente sono configurate solo A, B e C.
    • Se è necessario aggiungere o rimuovere categorie da questo cooldown in futuro, assicurarsi che il sistema o il plugin possano essere estesi senza modifiche significative al codice.

  2. Periodi di Tempo Diversi:
    • Il periodo di 14 giorni potrebbe essere configurabile nelle impostazioni del plugin (nel caso in cui si desiderino 7 giorni, 30 giorni, ecc.).

  3. Assegnazioni Dinamiche di Gruppi:
    • Dovrebbero essere supportati gruppi aggiuntivi o meno (ad es. se si aggiungono “Iscritti” o li si rimuovono).

3. Riepilogo

  1. Gruppi Ristretti (TL0, TL1, TL2, o qualsiasi utente non in un gruppo esente) sono soggetti a un cooldown di 14 giorni prima di creare un altro argomento nelle Categorie A o B.

  2. Gruppi Esenti (Admin, Moderatore, TL3, TL4, “Iscritti”) possono pubblicare senza restrizioni.

  3. Il sistema controlla la creazione dell’argomento più recente nelle Categorie A, B o C (inclusi quelli eliminati in modo “soft” o nascosti). Se è stato creato entro 14 giorni, il nuovo argomento viene bloccato.

  4. Messaggio di Errore: Visualizza il tempo rimanente in giorni/ore e link alle regole della community su:

    https://community.lezismore.org/t/topic/26/2

  5. Bozza: Quando bloccato, il post dell’utente viene salvato come bozza e il pulsante di invio viene disabilitato.

  6. Questa specifica può essere estesa a categorie aggiuntive o a periodi di tempo diversi in futuro.

Apprezzerei qualsiasi suggerimento!

1 Mi Piace

È praticamente quello che stavo pensando. La mia soluzione è rimuoverli dal gruppo che consente la pubblicazione in quelle categorie quando pubblicano. Questo chiarisce immediatamente che non possono pubblicare e non richiede alcuna modifica speciale al codice che alteri il funzionamento della pubblicazione.

3 Mi Piace

Ora capisco la tua soluzione. :folded_hands: Sebbene quell’approccio possa sembrare semplice, sono preoccupato per quanto segue:

  1. Accesso in lettura vs. pubblicazione

    • Attualmente, gli utenti a TL1 (o superiori) possono sia leggere che pubblicare nelle Categorie A e B.
    • Se rimuoviamo l’utente da TL1 ogni volta che viola la regola dei 14 giorni, perderà anche l’accesso in lettura. Ma vogliamo solo bloccarlo dalla pubblicazione, non dalla lettura.
  2. Necessità di dividere i gruppi

    • Per risolvere lo scenario “leggere ma non poter pubblicare”, dovremmo creare più sottogruppi:
    • TL1 limitato – può leggere e rispondere, ma non creare argomenti in A o B.
    • TL1 completo – può leggere, rispondere e creare argomenti.
    • Se un utente viola la regola dei 14 giorni, lo sposteremmo da TL1 completo a TL1 limitato. Questo sembra più complicato.
  3. Complessità dell’automazione

    • Anche con gruppi separati, dovremmo spostare automaticamente l’utente indietro al gruppo “completo” una volta scaduto il periodo di attesa.
    • Ciò significa che dobbiamo implementare una logica (ad esempio, un processo pianificato o codice personalizzato) che calcoli quando il periodo di 14 giorni è terminato e quindi riassegni l’utente da TL1 limitato a TL1 completo.
    • Come non programmatore, non mi sento sicuro nel gestire da solo un’automazione così complessa.

In altre parole, mentre la rimozione degli utenti da determinati gruppi potrebbe evitare di modificare direttamente la logica di pubblicazione, crea gruppi aggiuntivi e regole complesse. Vogliamo solo limitare la pubblicazione per 14 giorni, non l’accesso in lettura o altri privilegi.

Grazie mille per qualsiasi suggerimento o idea. Ho provato a integrare le cose tramite le API di Discourse e i webhook in n8n, ma dato il mio background di programmazione limitato, è stato piuttosto impegnativo per me.