Développement d'un plugin Discourse pour limiter le nombre de posts par jour par personne

Bonjour,

Suite à l’idée de @cuckooland ( Questions, critiques & réponses récurrentes - #11 par inso ) , je lance un crowdfunding pour rémunérer le développement d’un plugin permettant de limiter le vitesse de discussion sur le forum. Ceci permettra à chacun de le suivre à un rythme humainement tenable, et d’éviter on l’espère les discussions qui tournent en boucle ou chacun répond dans la seconde.

https://gannonce.duniter.org/#/announce/eaa44121-cbd5-469d-b2e3-4994c1a79266

@tuxmain avait l’air motivé, mais tout développeur intéressé peut se faire connaitre ! :slight_smile:

3 « J'aime »

On a 2 possibilités :

  • Soit c’est un programme extérieur qui a un accès administrateur et qui communique via l’API du forum, dans ce cas on peut le faire en n’importe quel langage (je partirai sur du Python)
  • Soit c’est vraiment en plugin Discourse, dans ce cas il faut le faire en Rails (j’ai l’impression).

Vous préférez quoi ? (question surtout pour ceux qui s’occupent du serveur)

La première est probablement plus simple à programmer mais la seconde est probablement plus fiable et propre.

Je suis ! C’est une pure idée qui soulagera la tâche ingrate des modos et évitera les discussions stériles : on ne peut pas en vouloir à un robot d’appliquer les règles.

Ok oui mais attentions aux seuils décidés.

Pour ma part, je me souviens avoir posé beaucoup de questions et avoir essayé d’approfondir des incompréhensions, à l’époque sur le forum Duniter.

Les échanges étaient longs, argumentés, et m’ont permis de comprendre beaucoup d’aspects que je n’avais pas saisis au premier abord.

J’imagine bien que le seuil pourra être amélioré, mais attention tout de même à laisser la possibilité de discuter vraiment du fond, et certains (comme moi) ont besoin de beaucoup de détails pour avancer dans une réflexion.

Sinon,

@poka @cgeek

3 « J'aime »

Pour les seuils dans l’idéal ça sera paramétrable par les admins, avec plusieurs paramètres de blocage (je reviens dans l’algo le plus simple pour commencer), qu’on pourra ordonner dans des conditions.

Par exemple, on pourrait interdire de dépasser un seuil pour la moyenne de mots par seconde depuis le dernier message sur le même fil, si cette limite a déjà été dépassée n fois sur ce même fil, depuis un temps t.

Si on veut qu’un tel bot nous soulage, il faut accepter qu’il nous prive de certaines personnes. Oui, on perdra peut-être des Paulart, c’est chiant (je dis « peut-être », car je ne vois pas en quoi ce serait une certitude).

Pour contre-balancer ton témoignage, voici le mien :

Tu l’évoques toi aussi, des détails me chiffonnaient. J’aurais assurément gagné du temps à poser des questions, mais cela aurait été au détriment du temps des autres (c’est-à-dire au détriment de Stéphane, il n’y avait pas de forum à l’époque). Je me suis donc astreint à avancer tout seul. Ce fut long, et la frustration fut parfois douloureuse.

Je pense qu’il y a moyen de trouver un juste milieu, entre nos deux témoignages.

Utiliser l’API me semble plus simple si elle permet d’accéder à toutes les states (et je pense que c’est le cas) et d’agir sur le statut des users (c’est le cas aussi).

Faire un plugin en ruby, si parmi vous vous connaissez le ruby et la mécanique de discourse, go

Côté avantage d’un plugin ruby, on pourra le configurer via l’interface admin du forum, et n’importe quel admin pourra le voir et l’ajuster via son pannel admin.

Sinon il faut songer en second temps à une interface graphique séparé juste pour l’api.


C’est vrai que le forum est devenu infernal, je n’ai plus le temps que pour lire 10% de ce qui s’y passe …

On peut aussi ajuster les limitations en fonction du niveau de confiance Discourse, attribué automatiquement en fonction de l’usage du forum.

Actuellement:

Niveau 0: 40 Personnes

Niveau 1: 1000 Personnes

Niveau 2: 183 personnes

Niveau 3: 33 Personnes

Limiter les niveaux de confiance inférieurs permettrait d’inciter les gens à passer plus de temps à lire du contenu pour justement monter en niveau, et avoir le droit de s’exprimer un peu plus

Mais bon je ne suis pas sûr que ce soit pertinent, à vous de voir.

De la même manière, on peut ne pas limiter les messages dans les sous-catégories de Goupes Locaux Ğ1, car ce n’est pas ici que les passions posent problèmes ^^

1 « J'aime »

C’est vrai que ça serait utile dans certains cas, mais il ne faut pas non plus faire comme StackOverflow (où on gagne des droits dans le forum grâce à l’ancienneté et aux j’aime reçus).

Je vais commencer en Python, ça aura aussi l’avantage pour moi que je puisse le tester sans avoir à compiler Discourse en local.

Edit: Un inconvénient à faire un bot distant est qu’il ne pourra pas modérer a priori (en affichant une alerte avant la publication ou en empêchant de publier), mais uniquement a posteriori, et il devra envoyer régulièrement des requêtes pour vérifier l’existence de nouveaux messages.

1 « J'aime »

Dans la même veine (mais sans ce niveau de confiance un peu trop vague à mon goût), j’ai l’impression qu’un bot pourrait facilement déterminer, pour un contributeur donné :

  • la quantité de messages postés récemment ;
  • le « temps de lecture récent » (je me demande comment discourse calcule ça) ;

et le cas échéant, ce bot pourrait dire « Tu as beaucoup parlé, il est temps maintenant d’écouter ».

Là aussi, je crois que cette idée s’appuie sur un principe de symétrie difficilement contestable. Ce qui est plus discutable, c’est d’estimer « l’écoute » en se basant sur le « temps de lecture récent », mais faute de mieux…

Là encore, la difficulté semble surtout dans la détermination des seuils (qui passera probablement par une phase d’essais de différents seuils).

Ne pourrait-on pas se baser justement sur les statistiques des profils des personnes auxquelles on doit la reflexion sur la mise en place d’un tel outil ?

Avant d’essayer une configuration en vrai, on peut déjà se faire une idée de son effet en simulant son application sur les messages déjà postés. On pourrait alors voir quels messages auraient été bloqués, et régler les seuils. On a assez de données pour cela.

3 « J'aime »

En fait je pense que c’est un avantage. In fine, c’est la modération qui tranchera.

Scénario :

  • La personne atteint un premier seuil : le bot l’averti par mp
  • Elle continue et atteint un deuxième seuil : le bot fait un signalement de modération
  • La modération intervient et décide de la sanction à appliquer si nécessaire
4 « J'aime »

Il y a une bibliothèque Python pour Discourse ! (et avec une doc) :smiley:

Je crée un compte pour le bot (pour éviter de faire des bêtises sur mon compte en testant). Pour l’instant, ça sera @modbot (comme bot de modération) , mais si quelqu’un a une meilleure idée…

2 « J'aime »

Pourquoi faire ? Si la personne a été prévenue deux fois, et qu’elle n’en tient pas compte, tant pis pour elle, c’est même pas la peine de faire intervenir un humain. C’est pour soulager les modos, non ?

J’aime bien la règle de trois, ça laisse deux chances, c’est bien déjà.

Je me dis qu’il peut y avoir des cas ou l’action humaine peut être nécessaire. Mais peut-être pas, effectivement. Dans ce cas le scénario serait :

La personne atteint un premier seuil : le bot l’averti par mp
Elle continue et atteint un deuxième seuil : le bot l'averti qu'au prochain post, c'est la mise sous silence
Elle recommence : mise sous silence de 2-3 jours
3 « J'aime »

Pour utiliser l’API de Discourse il faut générer une clé API, et seuls les administrateurs semblent pouvoir gérer ça. Sur le forum technique où j’ai des droits admin, je n’ai pas pu accéder à ces fonctions, je suppose qu’elles sont désactivées dans les paramètres de l’instance.

Un peu de doc :

@poka pourrait peut-être nous aiguiller…

1 « J'aime »

@tuxmain je t’envoi par mp ta clé d’api :slight_smile:

2 « J'aime »

Et hop, on commence tranquillement, pour l’instant le client sait reconnaître les nouveaux messages :

5 « J'aime »

L’API est une horreur sur le plan de l’organisation des données (beaucoup de redondance, et parfois on identifie un objet par son nom, parfois par son ID), mais ça avance :

J’arrive à détecter les nouveaux posts, à savoir lesquels il faut modérer (en fonction d’un âge maximum en paramètre), à lister les utilisateurs et à leur envoyer des messages privés.

Prochaines étapes :

  • Détecter un message d’une longueur supérieure à un seuil
  • Détecter un paragraphe d’une longueur supérieure à un seuil
  • Détecter un manque de ponctuation (par rapport à un seuil)
  • Détecter un multi-post trop rapide
  • Compter les dépassements de seuil par utilisateur par topic
  • Paramétrer et exécuter les actions pour les dépassements de seuil
    • Signalement
    • Suspension
  • Remise à zéro au bout d’un certain temps
  • Remise à zéro manuelle par un modo (en cas de faux positif)
5 « J'aime »