Kit de construction pour bot Discord đŸ€–

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 :wink:

2 « J'aime »

D’accord, commençons doucement. Je viens de soumettre ma premiĂšre demande de tirage sur ce dĂ©pĂŽt :smile:.

4 « J'aime »

fusionné :slight_smile: merci !

4 « J'aime »

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 !

2 « J'aime »

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 !

2 « J'aime »

Je serais vraiment curieux de savoir si c’est possible. Cela rendrait ce plugin encore plus intĂ©ressant pour moi. :smiley:

1 « J'aime »

Juste une petite question : devons-nous exécuter manuellement !discsync à chaque fois que nous voulons mettre à jour les rÎles, ou est-ce automatique ?

2 « J'aime »

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.

2 « J'aime »

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 :

  1. L’utilisateur modifie ses groupes ou son nom d’utilisateur
  2. Un webhook est déclenché vers la solution personnalisée
  3. Cette solution personnalisĂ©e interroge l’API Data Explorer via une requĂȘte personnalisĂ©e qui renvoie les serveurs de l’utilisateur
  4. Avec ce serveur, nous appelons Discord pour mettre Ă  jour les rĂŽles
2 « J'aime »

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.

2 « J'aime »

Eh bien, je ne suis pas passĂ© par là
 :sweat_smile:
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.

7 « J'aime »

@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.

5 « J'aime »

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.

9 « J'aime »

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 ?

3 « J'aime »

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.

2 « J'aime »

Une mise Ă  jour importante financĂ©e par l’équipe Discourse :tada:

FEATURES: nouvelle commande de copie automatique de messages et d’historique par merefield · Pull Request #4 ·
merefield/discourse-discord-bot (github.com)

  1. 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).

  2. 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é :
    image

  3. 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).

  4. 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 !! :pray:

Plus de choses pour le bot Ă  venir :wink: :robot:

5 « J'aime »

S’ils se connectent avec l’authentification Discourse ou toute authentification autre que l’authentification OAuth Discord, ce plugin les ignorera-t-il simplement ?

1 « J'aime »

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 »

2 « J'aime »

Les threads sont-ils pris en charge ?

4 « J'aime »

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Ă©.

2 « J'aime »