Création d'un système pour déplacer des sujets selon des critères donnés comme un horodatage

En référence à l’intégration du robot IA, consultez Discourse AI - AI bot - Documentation / Site Management - Discourse Meta

Version courte si vous ne voulez pas lire toute l’histoire : Je veux utiliser le robot IA pour déplacer des sujets en fonction de la « date d’expiration » en vérifiant les horodatages d’une publication.

J’ai donc réfléchi à des moyens d’améliorer la gestion pour mon cas d’utilisation de Discourse. J’anime une communauté de jeu Roblox, et nous utilisons Discourse pour que notre équipe de modération effectue des tâches de journalisation des actions de modération du jeu et des actions Discord.

Nous avons plusieurs catégories, y compris les interdictions temporaires. Lorsque nous effectuons nos journaux, ils sont faits sous forme de publication, et le modérateur remplit un format et insère les horodatages pertinents pour l’action effectuée, par exemple une interdiction de 7 jours, par exemple Durée : 2026-03-01T05:00:00Z2026-03-08T05:00:00Z (L’horodatage est ici)

Du côté de la gestion, j’ai ajouté une section Interdictions Archivées pour lorsque qu’une interdiction est terminée. Avant… vous l’avez deviné, nous le faisions à la main, en vérifiant les interdictions une fois par semaine.

L’automne dernier, j’ai créé un utilitaire python [voir ci-dessous] qui s’exécute localement, avec l’API Discourse, il ouvre un menu et je sélectionne quelle section d’interdictions je veux archiver, et il traite ces interdictions en vérifiant chaque publication pour un horodatage valide et si ce temps est passé. Cela fonctionne bien, mais je voulais m’améliorer davantage…

Et nous voici… J’espère que vous êtes toujours là, on pourrait probablement résumer tout ça, mais bon, discourse c’est une conversation n’est-ce pas ?

Je souhaite permettre à mon équipe de modération, en particulier à ceux de rang le plus élevé, d’effectuer cette tâche, sans avoir besoin d’utiliser VS ou de télécharger quoi que ce soit sur leur machine. J’ai donc tenté de créer une version plugin, ce que j’admets avoir fait en utilisant l’IA pour essayer d’y parvenir. Je ne sais pas où cela a mal tourné, j’ai essayé de parcourir la documentation, et même de donner des instructions pour suivre les processus, mais rien n’a abouti.

Mon problème avec l’intégration via un plugin a été bloqué par le fait de ne pas comprendre (ou l’IA de ne pas comprendre) comment intégrer une interface visuelle dans l’interface (pas aussi colorée que celle-ci avec la version python, mais sensible d’une manière qui pourrait être comprise) par exemple, un gros bouton qui dit Exécuter le processus d’archivage et utiliser l’API de modération (?) pour signaler ceux sans date valide ou les erreurs, etc.

Alors… nous voici à la fin de la longue version… Je veux des commentaires que je ne peux pas obtenir de quelqu’un d’autre qu’un autre humain, c’est pourquoi je suis ici.

  • Le robot IA a-t-il cette capacité ?
  • Si non, quelle solution sensée devrais-je essayer ?
  • Qu’ai-je fait de mal avec le chemin du plugin, qui a fait qu’il n’a tout simplement pas fonctionné/était pénible (comme les erreurs courantes que vous avez commises lorsque vous avez commencé dans cette communauté ?)

J’apprécie votre avis. Merci.

1 « J'aime »

Je ne pense pas que vous ayez besoin de faire appel à l’IA pour tout cela.

Lorsque vous créez ces sujets de bannissement actif, pourquoi ne pas également créer un minuteur de sujet pour le déplacer vers la catégorie correcte après qu’un certain temps se soit écoulé, ainsi ce sera automatique.

Aussi… y a-t-il une raison pour laquelle vous vous éloignez du cœur de Discourse ici, nous avons déjà des journaux pour les utilisateurs bannis, pourquoi ne pas simplement donner à vos utilisateurs de confiance l’accès à une requête Data Explorer pour consulter l’historique ?

Le forum est utilisé pour enregistrer les bannissements… C’est l’unique but. Aucun joueur n’est sur le forum… Seulement les modérateurs du jeu/Discord. Je ne pense pas qu’un minuteur de sujet fonctionnerait car les bannissements varient en durée. Je ne m’éloigne pas tant du cœur de Discourse que je l’utilise pour un cas d’utilisation spécifique. (Voir l’image)

1 « J'aime »

Cas d’utilisation intéressant !

Je pense que vous seriez mieux servi avec quelques changements :

Déplacer l’expiration de l’interdiction vers un champ de sujet personnalisé dédié

Cela vous permettra de valider que chaque interdiction a une date d’expiration lors de la création d’un nouveau sujet, et facilitera grandement la recherche des interdictions expirées.

Vous pourriez également utiliser nos Introduction des modèles de formulaire expérimentaux, qui vous donnent également un accès programmatique à des données spécifiques dans un sujet.

Ajouter des filtres personnalisés /filter

Avec le champ personnalisé ou le modèle de formulaire, il est maintenant facile d’ajouter de nouveaux filtres /filter tels que les interdictions expirées, les interdictions archivées, etc. Ceux-ci deviendraient alors vos principales listes de travail pour les modérateurs, et ils peuvent être ajoutés à la barre latérale pour plus de facilité d’utilisation.

Automatiser les interdictions dans leur ensemble ?

La dernière étape serait que Discourse crée automatiquement les interdictions sur Roblox et Discord chaque fois qu’un sujet est créé, et supprime également automatiquement les interdictions lorsqu’elles expirent.

C’est assez facile à faire avec un travail récurrent et un accès API.


Si vous avez un Configurer un environnement de développement Discourse local, vous pouvez même transmettre mon message ici comme spécification à Claude Code et il le construira en quelques minutes.

3 « J'aime »

C’est une perspective assez intéressante ! Je vais y jeter un œil ! Particulièrement les champs personnalisés et les modèles. Merci pour votre point de vue !

Plus d’informations sur mon cas d’utilisation puisque je semble vous intéresser… Et j’aime proposer des idées que d’autres communautés de jeu pourront trouver dans les années à venir…

J’ai en effet un cas d’utilisation assez unique. Nous avons utilisé Trello pendant des années, mais en raison des limitations qu’ils ont commencé à imposer, c’était devenu trop désordonné. Nous devions utiliser 10 espaces de travail pour loger toute notre équipe. (Sans oublier qu’ils ont commencé à restreindre les niveaux d’accès à une fonctionnalité payante)

Ainsi, avec la lutte continue contre les changements de modèle économique, il a été beaucoup plus facile de passer à une solution auto-hébergée. J’ai essayé d’autres logiciels de style kanban, mais avec des essais passés de Discourse, et le fait qu’il soit à la fois open source et qu’il utilise des pratiques plus modernes pour le backend, je n’ai tout simplement pas pu résister à l’utiliser, et je suis toujours étonné des réalisations et de la croissance qui continuent avec cette plateforme dans son ensemble. Septembre marque mon 2e anniversaire depuis le passage, et nous avons créé plus de 6 000 sujets !

La fonctionnalité que j’essayais d’imiter était similaire à celle de cette époque, qui était une automatisation pour passer d’une liste à une autre sur un déclencheur spécifique (pour nous, c’était la date de fin). Malheureusement, c’est une fonctionnalité premium que je ne peux même plus démontrer.

image

Je reviendrai ici une fois que j’aurai fini d’explorer et je vous dirai ce qu’il en est/ce que j’ai fait, surtout pour que d’autres personnes voyant une idée pour un cas similaire puissent en bénéficier !

2 « J'aime »

Une fois que votre plugin sera opérationnel, vous devriez également pouvoir visualiser comme vous le faisiez auparavant grâce au Kanban Board

2 « J'aime »

Me voici de retour… avec pas mal de progrès. J’ai passé environ 6,5 heures là-dessus.

J’ai commencé par quelques concepts basés sur vos suggestions, mais j’ai eu quelques inconvénients qui m’ont finalement conduit dans une autre direction, mais j’espère que le concept est toujours génial !

À l’origine, j’allais utiliser les formulaires de modèle (Template Forms), mais je n’étais pas très satisfait du rembourrage (padding) entre chaque réponse en ligne. Je cherchais plutôt un format comme celui que j’ai actuellement. Je n’étais pas non plus satisfait de devoir tout écrire manuellement dans le code, ce qui m’a rebuté.

J’ai fait porter mon script Python sur un plugin Discourse (Veuillez noter que l’IA a été utilisée pour la majorité du portage). J’ai eu quelques problèmes pour commencer, et maintenant qu’il est opérationnel, je dois encore l’affiner. Le design est un peu maladroit, et probablement quelques autres petits problèmes divers. Je ne suis pas très doué en Ruby, donc la révision à ce niveau est un effort au mieux.

Alors, à propos du plugin…

Concept/objectif : La possibilité de déplacer plus rapidement des sujets d’une catégorie à une autre par des déclencheurs spécifiques.

Il est livré avec deux modes de fonctionnement : Manuel et Automatisé (planifié).
Pour construire le déclencheur, vous pouvez sélectionner les catégories de destination/source, puis affiner en fonction de spécifications supplémentaires, par exemple des étiquettes (tags). L’appel final/le déclencheur réel, en dehors des filtres de réduction, est déclenché par l’heure/l’horodatage de fin (ou de début), Fermé, Résolu, Archivé.

Il existe également une fonctionnalité de journaux (logs) incluant le sujet déplacé, et vous pouvez décider de la durée de disponibilité des journaux.

Je n’ai pas entièrement testé les déclencheurs “fermé”, “résolu” ou “archivé” jusqu’à cette réponse.
Une fois que je l’aurai un peu plus rangé et testé davantage pour m’assurer que tout fonctionne, je le publierai volontiers pour que d’autres puissent y accéder dans la catégorie des plugins, mais pour l’instant, je vais juste le laisser sur GitHub uniquement. Je dois probablement aussi revenir en arrière et vérifier les autorisations afin que tout le monde ne puisse pas l’exécuter. Ou permettre spécifiquement que cela soit basculé.

N’hésitez pas à me faire part de vos réflexions, ou si je suis juste absolument fou de faire cela.

Source : https://github.com/jdc20181/DiscourseTopicMigrationTool