# Besoin d'aide pour limiter les messages des utilisateurs par catégorie et période

**URL:** https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592
**Category:** Support
**Created:** [Décembre 27, 2024, 7:02 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592 "2024-12-27T19:02:06Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![mbiistscther](https://avatars.discourse-cdn.com/v4/letter/m/b5a626/32.png) [@mbiistscther](https://meta.discourse.org/u/mbiistscther)
#### Post date: [Décembre 27, 2024, 7:02 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592/1 "2024-12-27T19:02:06Z")

</div>

Salut tout le monde,

Je cherche des conseils pour réaliser une fonctionnalité spécifique dans Discourse. Je gère une communauté où je dois appliquer une règle qui empêche les utilisateurs de créer un nouveau sujet dans deux catégories spécifiques s’ils ont déjà posté dans l’une de ces catégories au cours des 14 derniers jours. Cette restriction devrait s’appliquer même si leur sujet précédent a été supprimé.

Après quelques recherches, j’ai découvert le plugin **[discourse-flexible-rate-limits](https://github.com/ryanerwin/discourse-flexible-rate-limits)**, qui semble être un bon point de départ. Il permet des limites de fréquence flexibles basées sur les groupes d’utilisateurs et les actions, mais il se concentre sur la fréquence à court terme (minutes, heures, jours) et ne prend pas directement en charge :

1. La vérification des publications dans plusieurs catégories.
2. L’application d’un délai aussi long que 14 jours.
3. L’inclusion des sujets supprimés dans la vérification.

Avant de me lancer dans la personnalisation de ce plugin ou dans la création de quelque chose à partir de zéro, je voulais demander :

- Quelqu’un connaît-il un plugin ou une méthode existante qui pourrait déjà gérer ce type de fonctionnalité ?
- Existe-t-il des approches recommandées pour modifier un plugin existant comme `discourse-flexible-rate-limits` afin d’inclure une restriction inter-catégories et à plus long terme ?
- Des conseils généraux sur la manière de mettre cela en œuvre efficacement ?

J’apprécierais toute idée ou suggestion de cette communauté formidable. Si cela vous intéresse, je serais également heureux de partager des mises à jour sur la façon dont j’aurai fini par mettre cela en œuvre.

Merci beaucoup d’avance pour votre aide !

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Décembre 28, 2024, 3:02 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592/2 "2024-12-28T15:02:34Z")

</div>

Je ne suis pas sûr de bien comprendre, mais je pense que vous voulez un plugin qui retire un utilisateur d’un groupe lorsqu’il publie dans un ensemble de catégories (en utilisant un hook de création de sujet) et qui exécute ensuite une tâche quotidienne pour le réintégrer dans le groupe après un certain nombre de jours depuis son dernier sujet dans cet ensemble de catégories.

Probablement 3 à 5 heures de travail, peut-être un peu plus avec de bonnes spécifications/tests.

---

<div class="post-metadata">

### Author: ![mbiistscther](https://avatars.discourse-cdn.com/v4/letter/m/b5a626/32.png) [@mbiistscther](https://meta.discourse.org/u/mbiistscther)
#### Post date: [Janvier 1, 2025, 11:19 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592/3 "2025-01-01T11:19:14Z")

</div>

Salut, @pfaffman, joyeuses fêtes et merci pour ta réponse !

J’ai essayé de créer un organigramme pour clarifier :

```mermaid
flowchart TB
    A0(L'utilisateur tente de créer un nouveau sujet dans la catégorie A ou B) -- --> A1{L'utilisateur fait-il partie d'un groupe exempt ?<br/>Admin, Mod, TL3, TL4, Abonnés ?}
    A1 -- Non --> B1(Vérifier le dernier sujet de l'utilisateur dans les catégories A, B ou C,<br/>y compris les enregistrements masqués ou supprimés)
    A1 -- Oui --> Z1(Autoriser la publication)

    B1 --> B2{Ce dernier sujet a-t-il été créé il y a moins de 14 jours ?}
    B2 -- Oui --> C1(Bloquer la publication + afficher une erreur,<br/>afficher le délai de récupération,<br/>lien vers les règles)
    C1 --> E1(Sauvegarder le brouillon +<br/>désactiver le bouton de soumission) ---> Fin(Fin)
    B2 -- Non --> D1(Autoriser la publication)

    D1 --> Fin(Fin)
    Z1 --> Fin(End)

```

> **Et j'ai aussi essayé de créer une spécification simple pour aider à clarifier**
>
> ````plaintext
> ```mermaid
> flowchart TB
> A0(L'utilisateur tente de créer un nouveau sujet dans la catégorie A ou B) -- --> A1{L'utilisateur fait-il partie d'un groupe exempt ?<br/>Admin, Mod, TL3, TL4, Abonnés ?}
> A1 -- Non --> B1(Vérifier le dernier sujet de l'utilisateur dans les catégories A, B ou C,<br/>y compris les enregistrements masqués ou supprimés)
> A1 -- Oui --> Z1(Autoriser la publication)
> 
> B1 --> B2{Ce dernier sujet a-t-il été créé il y a moins de 14 jours ?}
> B2 -- Oui --> C1(Bloquer la publication + afficher une erreur,<br/>afficher le délai de récupération,<br/>lien vers les règles)
> C1 --> E1(Sauvegarder le brouillon +<br/>désactiver le bouton de soumission) ---> Fin(Fin)
> B2 -- Non --> D1(Autoriser la publication)
> 
> D1 --> Fin(Fin)
> Z1 --> Fin(End)
> 
> ````
> 
> **Explication du flux**
> 
> 1. **A0** : Un utilisateur tente de créer un nouveau sujet dans la catégorie **A** ou **B**.
> 
> 2. **A1** : Le système vérifie si l’utilisateur appartient à un **groupe exempt** :
> 
> 3. **B1** : Le système récupère le dernier **sujet créé** par l’utilisateur dans les **catégories A, B ou C**. Cette recherche doit inclure :
> 
> 4. **B2** : Le système vérifie si la date de création du dernier sujet est **inférieure à 14 jours**.
> 
> 5. **C1** : Le système affiche un **message d’erreur** informant l’utilisateur qu’il est toujours sous délai de récupération. Le message doit inclure :
> 
> 6. **E1** : Après l’affichage de l’erreur, le contenu de l’utilisateur est automatiquement **enregistré comme brouillon** , et le bouton “Soumettre” ou “Créer un sujet” est **désactivé**.
> 
> 7. **D1** : Si plus de 14 jours se sont écoulés depuis le dernier sujet de l’utilisateur, le système autorise la publication du nouveau sujet.
> 
> 8. **Z1** : L’utilisateur fait partie d’un groupe exempt, il peut donc publier sans restriction.
> 
> **2. Spécification détaillée**
> 
> **2.1 Groupes restreints vs. exempts**
> 
> - **Groupes restreints** :
> - Tous les utilisateurs **ne faisant pas** partie des groupes exempts suivants (généralement TL0, TL1, TL2).
> 
> - **Groupes exempts** :
> 1. Administrateurs
> 2. Modérateurs
> 3. Niveau de confiance 3 (TL3)
> 4. Niveau de confiance 4 (TL4)
> 5. **Abonnés** (un groupe personnalisé)
> 
> Ces groupes exempts sautent complètement la vérification des 14 jours.
> 
> **2.2 Catégories concernées**
> 
> - **Tentative de nouveau sujet** :
> - Déclenché lorsqu’un utilisateur (dans un groupe restreint) tente de créer un nouveau sujet dans la **catégorie A ou B**.
> 
> - **Vérification du dernier sujet** :
> - Le système vérifie le dernier sujet créé par l’utilisateur dans les **catégories A, B ou C** (où C est la catégorie “masquée” ou “de conformité”).
> 
> **Note** : La catégorie C est incluse pour capturer les situations où le sujet d’un utilisateur est déplacé pour suppression/masquage/conformité. Si l’utilisateur a créé un sujet dans la catégorie C dans les 14 derniers jours, cela compte également pour le délai de récupération.
> 
> **2.3 Logique de délai de récupération de 14 jours**
> 
> - Si le **sujet le plus récent** de l’utilisateur (dans A/B/C) a été créé **il y a moins de 14 jours** , bloquer la création d’un nouveau sujet dans A ou B.
> - Si **plus de 14 jours** se sont écoulés, l’autoriser.
> 
> **Calcul du temps**
> 
> - Afficher le temps restant en **jours et heures** (par exemple, “3 jours 12 heures restantes”).
> - Pas besoin d’afficher les minutes ou les secondes.
> 
> **2.4 Blocage et sauvegarde de brouillon**
> 
> - **Comportement de blocage** :
> - Lorsque l’utilisateur est bloqué, afficher un message d’erreur (C1).
> - Le système **enregistre** automatiquement le contenu de l’utilisateur comme **brouillon**.
> - Le bouton “Soumettre” devient **désactivé** afin que l’utilisateur ne puisse pas continuer.
> 
> - **Exemple de message d’erreur** (simplifié) :
> 
> Désolé, vous ne pouvez pas encore créer de nouveau sujet dans cette catégorie.  
> Votre dernier sujet a été publié il y a moins de 14 jours,  
> et il vous reste {X jours et Y heures} avant de pouvoir publier à nouveau.  
> Pour plus de détails, consultez nos règles communautaires :  
> [https://community.lezismore.org/t/topic/26/2](https://community.lezismore.org/t/topic/26/2)
> 
> **2.5 Flexibilité future**
> 
> 1. **Catégories supplémentaires** :
> 
> 2. **Périodes de temps différentes** :
> 
> 3. **Attributions de groupes dynamiques** :
> 
> **3. Résumé**
> 
> 1. Les **groupes restreints** (TL0, TL1, TL2, ou tout utilisateur n’appartenant pas à un groupe exempt) sont soumis à un **délai de récupération de 14 jours** avant de créer un autre sujet dans les catégories A ou B.
> 2. Les **groupes exempts** (Admin, Modérateur, TL3, TL4, “Abonnés”) peuvent publier sans restriction.
> 3. Le système vérifie la **création du sujet le plus récent** dans les catégories **A, B ou C** (y compris les sujets supprimés logiquement ou masqués). S’il a été créé **il y a moins de 14 jours** , le nouveau sujet est bloqué.
> 4. **Message d’erreur** : Affiche le temps restant en **jours/heures** et renvoie aux règles de la communauté à l’adresse :
> - [https://community.lezismore.org/t/topic/26/2](https://community.lezismore.org/t/topic/26/2)
> 
> 5. **Brouillon** : Lorsqu’il est bloqué, la publication de l’utilisateur est enregistrée comme brouillon et le bouton de soumission est désactivé.
> 6. Cette spécification peut être étendue à des catégories supplémentaires ou à des périodes différentes à l’avenir.

J’apprécierais toute suggestion !

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Janvier 1, 2025, 11:23 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592/4 "2025-01-01T11:23:55Z")

</div>

C’est à peu près ce à quoi je pensais. Ma solution est de les retirer du groupe qui autorise la publication dans ces catégories lorsqu’ils publient. Cela indique immédiatement qu’ils ne peuvent pas publier et ne nécessite aucune modification de code spéciale qui changerait le fonctionnement de la publication.

---

<div class="post-metadata">

### Author: ![mbiistscther](https://avatars.discourse-cdn.com/v4/letter/m/b5a626/32.png) [@mbiistscther](https://meta.discourse.org/u/mbiistscther)
#### Post date: [Janvier 1, 2025, 11:37 UTC](https://meta.discourse.org/t/need-help-with-limiting-user-posts-by-category-and-time-frame/344592/5 "2025-01-01T11:37:54Z")

</div>

Oh, je comprends maintenant votre solution. 🙏 Bien que cette approche puisse sembler simple, je suis préoccupé par les points suivants :

1. **Accès en lecture vs. en publication**

2. **Besoin de diviser les groupes**

3. **Complexité de l’automatisation**

En d’autres termes, bien que le retrait des utilisateurs de certains groupes puisse éviter de modifier directement la logique de publication, cela crée **des groupes supplémentaires et des règles complexes**. Nous voulons seulement restreindre la publication pendant 14 jours, **pas** l’accès en lecture ni d’autres privilèges.

Merci beaucoup pour toutes suggestions ou idées. J’ai essayé d’intégrer les choses via les API Discourse et les webhooks dans n8n, mais compte tenu de mon expérience limitée en programmation, cela a été assez difficile pour moi.
