Super. Au fait, je serais ravi dâenvisager toute amĂ©lioration gĂ©nĂ©rique utile pour ce plugin, au cas oĂč tu dĂ©ciderais de te remettre au code ![]()
Dâaccord, commençons doucement. Je viens de soumettre ma premiĂšre demande de tirage sur ce dĂ©pĂŽt
.
fusionné
merci !
Salut ! Jâessaie de trouver un plugin qui attribue aux utilisateurs de Discord un rĂŽle en fonction des badges prĂ©sents sur leur profil Discourse. Est-ce que câest possible avec votre plugin ? Sinon, est-ce que câest mĂȘme possible ? Merci !
Pas pour le moment, mais rien ne vous empĂȘche de le forker et dâajouter une commande appropriĂ©e pour implĂ©menter cela !
Si câest bien implĂ©mentĂ©, je considĂ©rerais fusionner une PR. Cependant, cela pourrait ĂȘtre un peu trop spĂ©cifique pour une utilisation gĂ©nĂ©rale, car vous devriez probablement maintenir une sorte de mappage, sauf si les noms des badges sont identiques aux noms des rĂŽles ? Dans tous les cas, vous devriez filtrer la plupart dâentre eux ? Cela pourrait devenir compliquĂ© pour une utilisation gĂ©nĂ©rale. Si vous trouvez un moyen vraiment propre de gĂ©rer cela qui fonctionnerait pour les utilisateurs gĂ©nĂ©raux du plugin, faites-le-moi savoir.
Mais forkz sans hésiter, amusez-vous bien !
Je serais vraiment curieux de savoir si câest possible. Cela rendrait ce plugin encore plus intĂ©ressant pour moi. ![]()
Juste une petite question : devons-nous exécuter manuellement !discsync à chaque fois que nous voulons mettre à jour les rÎles, ou est-ce automatique ?
Malheureusement, oui. Ce serait une belle amĂ©lioration dâajouter un paramĂštre « rĂ©pĂ©ter dans x heures » (une PR est la bienvenue, ou engagez-moi pour lâimplĂ©menter), mais comme je lâai dĂ©jĂ mentionnĂ© dans ce sujet, il vaudrait mieux quâune personne crĂ©e un nouveau plugin en utilisant leur API et mette en place des jobs Sidekiq planifiĂ©s pour cela. Un bot est une solution amusante, mais pas la meilleure architecture pour une synchronisation planifiĂ©e.
Ah, merci quand mĂȘme. Oui, nous avons dĂ©jĂ rĂ©flĂ©chi Ă une alternative possibleâŠ
Nous souhaitions synchroniser les groupes Discourse avec les rĂŽles Discord, mais il semble quâil nâexiste pas de solution parfaite qui convienne.
Nous allons maintenant mettre en place une sorte de bot utilisant des webhooks : Discourse dĂ©clenchera un webhook lorsquâun groupe dâun utilisateur sera mis Ă jour (ou en cas de changement de nom dâutilisateur) vers une solution personnalisĂ©e, qui assignera ensuite les rĂŽles dans Discord. Nous continuerons dâutiliser le choix de lâauthentification OAuth de Discord pour obtenir les serveurs, et en crĂ©ant une requĂȘte personnalisĂ©e dans Data Explorer, nous pourrons rĂ©cupĂ©rer ces serveurs via lâAPI.
Cela se déroulerait comme suit :
- Lâutilisateur modifie ses groupes ou son nom dâutilisateur
- Un webhook est déclenché vers la solution personnalisée
- Cette solution personnalisĂ©e interroge lâAPI Data Explorer via une requĂȘte personnalisĂ©e qui renvoie les serveurs de lâutilisateur
- Avec ce serveur, nous appelons Discord pour mettre Ă jour les rĂŽles
Un traitement par lot appropriĂ© serait prĂ©fĂ©rable afin de ne pas compromettre lâintĂ©gritĂ© des donnĂ©es en raison de dysfonctionnements ponctuels. Les deux solutions seraient parfaites.
Eh bien, je ne suis pas passé par là ⊠![]()
Jâai forkĂ© votre dĂ©pĂŽt et créé un nouveau plugin qui correspond Ă nos besoins :
Il synchronise essentiellement tous les groupes avec les rĂŽles Discord, mais automatiquement. Lorsquâun utilisateur est ajoutĂ© ou retirĂ© dâun groupe, une tĂąche de synchronisation sâexĂ©cute et met Ă jour ses rĂŽles en fonction des groupes publics. De plus, jâai ajoutĂ© un paramĂštre pour marquer un « rĂŽle vĂ©rifiĂ© », qui sera attribuĂ© Ă tous les utilisateurs disposant dâun compte Discourse. Il prend Ă©galement en charge lâajout dâune liste de rĂŽles sĂ»rs, que le bot ignorera lors de la synchronisation des utilisateurs (utile, par exemple, si lâon souhaite dĂ©finir des administrateurs et des modĂ©rateurs diffĂ©rents sur le serveur par rapport au forum).
Jâai Ă©galement ajoutĂ© un synchroniseur de pseudo-nom dâutilisateur. Il peut imposer aux utilisateurs dâavoir le mĂȘme pseudo sur le serveur que leur nom dâutilisateur sur le forum.
Jâouvrirai un sujet #plugin aprĂšs avoir nettoyĂ© quelques Ă©lĂ©ments, au cas oĂč cela pourrait ĂȘtre utile Ă quelquâun.
@barreeeiroo ce qui Ă©tait vraiment intĂ©ressant dans votre fork, câest lâutilisation des hooks DiscourseEvents.
Jâavais supposĂ© que ce nâĂ©tait pas possible car le bot sâexĂ©cute dans un thread sĂ©parĂ©. Mais comme vous lâavez dĂ©couvert, il semble que nous puissions agir sur les Ă©vĂ©nements et influencer le bot. Merci donc pour cela, câest une perspective vraiment importante que nous pouvons dĂ©velopper Ă lâavenir.
Jâai donc commencĂ© Ă adopter cette technique dans le dĂ©pĂŽt principal, en commençant par la possibilitĂ© de dĂ©finir certaines surveillances sur les nouveaux messages ou sujets qui seront annoncĂ©s dans le canal dâadministration de Discord.
La fonctionnalitĂ© peut ĂȘtre peu utile telle quâelle est actuellement, mais elle dĂ©montre le concept pour que dâautres puissent lâexploiter.
OK, jâai dĂ©veloppĂ© un peu plus le plugin et jâai maintenant une preuve de concept (POC) pour une communication bidirectionnelle qui fonctionne :
Voici les nouveaux paramĂštres
-
Vous pouvez dĂ©signer un canal dâannonces sur Discord dans les paramĂštres du plugin.
-
Vous pouvez dĂ©sormais taper dans le canal dâannonces Discord assignĂ©, ce qui publiera votre message dans le sujet Discourse assignĂ© dans les paramĂštres du plugin.
-
Vous pouvez configurer une liste de catĂ©gories sur Discourse pour poster dans le canal dâannonces de votre Discord si quelquâun y publie ou crĂ©e un nouveau sujet (lâun, lâautre ou les deux).
De plus, jâai ajoutĂ© un nouveau fichier pour gĂ©rer les Ă©vĂ©nements Discord pris en charge par lâAPI discordrb, la logique des annonces Ă©tant le premier exemple (nâhĂ©sitez pas Ă en dĂ©velopper de nouveaux et Ă soumettre une PR sâils sont utiles Ă la communautĂ© en gĂ©nĂ©ral).
Jâai Ă©galement supprimĂ© les modifications nĂ©cessaires dans app.yml pour installer libsodium-dev, car cela est dĂ©sormais optionnel aprĂšs la mise Ă jour des dĂ©pendances et nâest pas requis pour le plugin pour le moment (pas besoin de gĂ©rer la voix). Cela rendra lâinstallation beaucoup plus simple.
Jâai suivi les instructions dâinstallation et tout sâest dĂ©roulĂ© sans problĂšme jusquâau redĂ©marrage. Le bot nâa pas rejoint la salle, jâai donc vĂ©rifiĂ© /logs :
Cela fait-il rĂ©fĂ©rence au discord_bot_token ? Il est renseignĂ© et jâai vĂ©rifiĂ© la valeur. Des pistes ?
Mark, dĂ©solĂ©, jâai ratĂ© ça.\n\nAvez-vous dĂ©couvert le problĂšme ?\n\nPouvez-vous sâil vous plaĂźt mettre Ă jour et essayer la nouvelle version et nous aviserons ensuite.
Une mise Ă jour importante financĂ©e par lâĂ©quipe Discourse ![]()
-
Une nouvelle commande
!disccopy <nombre-de-messages> <nom-de-catĂ©gorie-cible-optionnel> <nom-de-sujet-cible-optionnel>qui vous permet de copier lâhistorique des messages Discord (dans ce canal) vers votre instance Discourse depuis le chat Discord. Cela peut gĂ©rer en toute sĂ©curitĂ© des milliers de messages en une seule fois (mais pour ce volume, cela prendra du temps). -
Copie automatique de chat par message, par canal vers toute Catégorie de nom identique sur Discourse : si le nom du canal correspond au nom de la Catégorie, il copiera le message dans Discourse si ceci est activé :

-
Pour tout message copiĂ© dans Discourse depuis Discord, lâUtilisateur sâaffichera dĂ©sormais correctement si cet utilisateur sâest connectĂ© Ă Discourse en utilisant la connexion Discord (le Bot Discord est ainsi capable de faire correspondre les comptes utilisateurs).
-
Prise en charge de la localisation ajoutée pour de nombreuses fonctionnalités.
Merci Ă @erlend_sh & lâĂ©quipe Discourse dâavoir spĂ©cifiĂ© et sponsorisĂ© ce travail !! ![]()
Plus de choses pour le bot Ă venir
![]()
Sâils se connectent avec lâauthentification Discourse ou toute authentification autre que lâauthentification OAuth Discord, ce plugin les ignorera-t-il simplement ?
Il ne les ignore pas, il est juste incapable de faire correspondre lâutilisateur avec la personne sur lâautre systĂšme. Par consĂ©quent, les messages copiĂ©s sembleront provenir du « systĂšme »
Les threads sont-ils pris en charge ?
Pas encore, Klaus, mais câest potentiellement en cours. En attente de la mise Ă jour de lâAPI Ruby (bloqueur), puis dâun sponsor pour ajouter cette fonctionnalitĂ©.


