Objectif de ce plugin
Ce plugin effectue plusieurs tĂąches :
-
Il vous permet dâalimenter un bot Discord Ă lâaide de votre serveur Discourse pour effectuer des actions reliant les deux systĂšmes. Forkez ce dĂ©pĂŽt et Ă©tendez-le avec du Ruby simple pour crĂ©er toutes sortes de fonctionnalitĂ©s de bot.
-
FonctionnalitĂ©s existantes servant dâexemples et dâutilitaires utiles :
- Fournit une publication automatique bidirectionnelle de contenu répondant à certains critÚres.
- Commande pour copier des messages Ă la demande vers Discourse.
- Commande pour synchroniser lâappartenance aux groupes avec lâappartenance aux rĂŽles de votre serveur Discord et votre instance Discourse.
Le plugin fournit un squelette extensible sur lequel vous pouvez construire des fonctionnalités supplémentaires. Les PR pour des ajouts généralement utiles sont les bienvenues.
ce ne sont pas les deux commandes de synchronisation, mais simplement une illustration de lâinteraction possible avec le bot. La deuxiĂšme commande de la capture dâĂ©cran a Ă©tĂ© obsolĂšte pendant le dĂ©veloppement
Sa configuration est nécessairement complexe, mais elle est idéale pour les fans des deux systÚmes qui sont désireux de consacrer du temps à comprendre le fonctionnement de chaque systÚme, au moins au niveau fonctionnel et conceptuel. Vous devez comprendre certains des fondamentaux de la gestion des utilisateurs de Discourse et de Discord pour tirer le meilleur parti de ce plugin.
Commandes du bot
Il existe quatre commandes :
- Ping!
- !disckick
- !discsync
- !disccopy
Ping!
Pour vérifier si le bot répond, tapez simplement « Ping! » et le bot devrait répondre par «
: Pong! » - magnifique, nâest-ce pas ?
(câest un peu un mĂšme, au fait !)
!disckick <min_trust_level: défaut 2>
Taper cette commande expulsera tout utilisateur qui existe sur votre Discourse mais dont le niveau de confiance est inférieur à la valeur fournie. La valeur par défaut si vous ne fournissez pas de valeur est 2.
Par exemple :
!discsync <clean up: défaut false, min_visibility: défaut 0, include automated groups: défaut false>
Cette commande tentera de copier tous les groupes vers des RĂŽles sur Discord qui correspondent aux critĂšres fournis (ou aux valeurs par dĂ©faut si non fournis). Elle tentera ensuite de peupler les rĂŽles conformĂ©ment Ă lâappartenance aux groupes sur Discourse. Il sâagit dâune synchronisation unidirectionnelle uniquement. Aucune donnĂ©e Discourse nâest jamais modifiĂ©e.
!disccopy <number_of_messages> <optional_target_category_name> <optional_target_topic_name>
Vous permet de copier lâhistorique des messages Discord vers votre instance Discourse depuis le chat Discord. Cela peut gĂ©rer des milliers de messages dâun coup (mais pour ce volume, cela prendra du temps).
Communication bidirectionnelle
Voici les paramĂštres :
- Vous pouvez dĂ©signer un canal dâannonces sur Discord dans les paramĂštres du plugin.
- Vous pouvez maintenant taper dans le canal dâannonces Discord assignĂ© et cela publiera votre message dans votre sujet Discourse assignĂ© dans les paramĂštres du plugin.
- Vous pouvez configurer une liste de catĂ©gories dans Discourse pour publier dans le canal dâannonces de votre Discord si quelquâun y publie ou ajoute un nouveau sujet (lâun, lâautre ou les deux).
- Copie automatique de chat par message, par canal vers nâimporte quelle catĂ©gorie identiquement nommĂ©e sur Discourse : si le nom du canal correspond au nom de la catĂ©gorie, le message sera copiĂ© dans Discourse.

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 si cela est utile Ă la communautĂ©).
NB : Pour tout message copiĂ© dans Discourse depuis Discord, lâutilisateur sâaffichera correctement si cet utilisateur sâest connectĂ© Ă Discourse en utilisant la connexion Discord (ainsi, le bot Discord peut faire correspondre les utilisateurs).
Ătat de ce plugin
Câest un plugin complexe Ă configurer. CâĂ©tait inĂ©vitable.
Cependant, son utilisation est un jeu dâenfant une fois quâil est entiĂšrement opĂ©rationnel.
ConsidĂ©rez le code comme Ă©tant actuellement en BĂȘta. Il a Ă©tĂ© testĂ©, mĂȘme en production, mais contient probablement des bogues. Je recommande de le tester dâabord sur un nouveau serveur Discord avant de lâappliquer Ă votre serveur Discord principal « Production », sauf si vous commencez tout juste.
Tout bug est beaucoup plus susceptible de perturber votre instance Discord que votre instance Discourse, car aucune modification nâest apportĂ©e Ă Discourse. Cependant, je lâai Ă©crit de maniĂšre Ă ce que la plupart des choses soient rĂ©cupĂ©rables et que vous puissiez gĂ©nĂ©ralement simplement rĂ©pĂ©ter une action pour rĂ©soudre un problĂšme. Discourse est utilisĂ© comme maĂźtre pour les informations dâappartenance et de groupes, et ces donnĂ©es sont utilisĂ©es pour mettre Ă jour lâappartenance et les rĂŽles sur votre serveur Discord.
Instructions de configuration
Prérequis
- Un serveur Discord sur lequel vous ĂȘtes administrateur.
- Une application Discord (voir ci-dessous).
- Un bot Discord (voir ci-dessous).
- Un accĂšs SSH root Ă votre serveur Discourse.
- Des mises Ă jour du fichier app.yml pour installer le plugin.
- Tous les utilisateurs de votre Discourse devront se connecter en utilisant la connexion OAuth Discord qui apparaßtra sur votre page de connexion une fois le plugin installé.
Application Discord
Rendez-vous ici et créez une application :
Cliquez sur « New Application ».
Vous devrez crĂ©er un bot et cela ressemblera Ă ceci (laissez-le non âpublicâ) :
Vous devrez autoriser le bot dans le navigateur, voir OAuth2 - Documentation - Discord
Une fois le bot configuré, copiez le jeton (Token). Vous devrez le saisir dans Discourse plus tard.
Modifications de app.yml
plugin
Vous nâavez besoin que dâun seul plugin maintenant que la connexion sociale Discord est native au cĆur de Discourse (ouais
)
Ensuite, Ă lâinvite, tapez ./launcher rebuild app comme dâhabitude.
Cela devrait fonctionner, pas de problĂšme.
Vous pourriez obtenir des erreurs de console et de journal indiquant un Ă©chec du bot lors de la premiĂšre construction car vous nâavez pas encore saisi les identifiants du bot dans lâinterface de configuration de Discourse. (gĂ©rer cela plus Ă©lĂ©gamment est une tĂąche Ă faire, je supprimerai cette partie lorsque cela sera fait). Cela ne fera aucun mal et Discourse lui-mĂȘme fonctionnera normalement.
Une fois dans votre zone dâadministration Discourse, allez dans ParamĂštres du plugin et remplissez ces champs :
Vous obtiendrez les ID depuis lâinterface Discord. Vous devrez activer le mode dĂ©veloppeur pour vous permettre de copier ces ID. Dans Discord, allez dans vos ParamĂštres â Apparence â AVANCĂ et activez le mode dĂ©veloppeur :
Vous pouvez ensuite obtenir les ID depuis lâinterface, par exemple :
Vous devrez Ă©galement remplir les paramĂštres OAuth Discord. LâID client et le secret proviennent de votre mĂȘme application Discord.
Une fois que vous avez défini ces paramÚtres, retournez à votre invite racine sous Linux et tapez :
./launcher restart app
Si vous avez correctement configuré vos serveurs Discord et Discourse, vous devriez voir le bot rejoindre le serveur.
Si jamais le bot plante (il passera hors ligne), vous devrez faire la mĂȘme chose pour le ramener. Une indĂ©pendance amĂ©liorĂ©e du bot par rapport au serveur cĆur de Discourse est une tĂąche Ă faire. Cela dit, jâai fait fonctionner un bot en production pendant longtemps et il nâa jamais plantĂ©.
Commandes futures ?
Si vous avez une idĂ©e pour une autre commande qui exploite le lien entre Discourse et Discord et que vous pensez ĂȘtre utile Ă la communautĂ© plus large, faites-le-moi savoir dans les rĂ©ponses et nous pourrons examiner le potentiel de mise en Ćuvre. NB : ce bot nâest pas destinĂ© Ă effectuer des tĂąches en dehors du cadre de Discourse.
Limitations
Lâobjectif principal de ce plugin Ă©tait de permettre Ă lâutilisateur de crĂ©er un bot sur son Discord alimentĂ© par son serveur Discourse et capable dâeffectuer certaines fonctions de base de gestion des membres. Il fournit Ă©galement une base pour toute interaction supplĂ©mentaire de type bot entre les deux systĂšmes pour le futur. Une partie de la motivation pour utiliser des bots est quâils sont tout simplement amusants.
Les commandes de bot sont par nature ad hoc.
ProblĂšmes connus
-
Le bot dĂ©marrera une instance de lui-mĂȘme si vous accĂ©dez Ă une session de console Rails sur le serveur. Cela fera apparaĂźtre le bot comme rĂ©pondant deux fois (mais en fait, il y a maintenant deux bots). Dans la console Rails, arrĂȘtez simplement le bot supplĂ©mentaire en tapant :Cela ne devrait plus ĂȘtre nĂ©cessaire !::DiscordBot::Bot.discord_bot.stop -
Le Robot est un peu bavard pendant les mises Ă niveau Discourse âen ligneâ car il est rĂ©activĂ© Ă plusieurs reprises pendant le processus de mise Ă niveau. Cela revient Ă trouver un bon moyen dâexĂ©cuter le bot dans un processus sĂ©parĂ© et gĂ©rĂ© au lieu dâun thread dĂ©rivĂ© du serveur web. Je crois que tout cela est inoffensif, et si la sortie des bots est uniquement vers votre canal dâadministration sur Discord, est-ce que cela vous importe vraiment ?Cela devrait ĂȘtre rĂ©solu pour la plupart maintenant, le bot sâannonçant seulement deux fois lors dâune reconstruction.
Remerciements
Plusieurs contributeurs sont Ă remercier pour ce plugin qui mâa pris beaucoup de temps pour atteindre ce stade, notamment @Wedgebert, @FoohonPie. Merci Ă Jeff pour sa gĂ©nĂ©reuse contribution. Merci Ă @angus pour tout lâencouragement et la gestion du soutien financier.
Le plugin a été inspiré par le travail de @Watercolor_Games à un stade antérieur et repose sur le plugin OAuth Discord créé par @featheredtoast.
Le plugin repose sur la bibliothĂšque Ruby discordrb semi-officielle soutenue par Discord et le travail fantastique de lâĂ©quipe Discord pour rendre leur systĂšme accessible. Merci Ă @Falco pour mâavoir aidĂ© avec une dĂ©pendance de maniĂšre extrĂȘmement rĂ©active.
De plus, bien sĂ»r, cela ne serait pas possible sans lâincroyable Ă©cosystĂšme de plugins de Discourse (ouais !)
Ătat de ces instructions
Elles seront amĂ©liorĂ©es avec le temps et jâaccueille favorablement les commentaires. Il y a des zones qui sont susceptibles dâĂȘtre obscures.











