Scopo di questo plugin
Questo plugin svolge diverse funzioni:
-
Consente di far funzionare un bot Discord utilizzando il tuo server Discourse per collegare i due sistemi. Forka questo repository ed espandilo con semplici script Ruby per creare tutte le funzionalitĂ di bot possibili.
-
FunzionalitĂ esistenti da utilizzare come esempi e utility utili:
- Fornisce una pubblicazione automatica bidirezionale di contenuti che soddisfano determinati criteri.
- Comando per copiare messaggi ad hoc su Discourse.
- Comando per sincronizzare lâappartenenza ai gruppi con lâassegnazione dei ruoli sul tuo server Discord e la tua istanza Discourse.
Il plugin offre una struttura estensibile su cui puoi costruire funzionalitĂ aggiuntive. Le PR per aggiunte generalmente utili sono benvenute.
questi non sono i due comandi di sincronizzazione, ma solo unâillustrazione dellâinterazione del bot possibile. Il secondo comando nello screenshot è stato deprecato durante lo sviluppo
La configurazione è necessariamente complessa, ma è ottima per gli appassionati di entrambi i sistemi che sono disposti a dedicare tempo a comprendere il funzionamento di ciascun sistema, almeno a livello funzionale e concettuale. Per ottenere il massimo da questo plugin, è necessario comprendere alcuni fondamenti del funzionamento della gestione degli utenti di Discourse e Discord.
Comandi del Bot
Ci sono quattro comandi:
- Ping!
- !disckick
- !discsync
- !disccopy
Ping!
Per verificare se il bot risponde, digita semplicemente âPing!â e il bot dovrebbe rispondere con â
: Pong!â - meraviglioso, vero?
(a proposito, questo è un meme!)
!disckick <min_trust_level: default 2>
Digitando questo comando, verrai espulso qualsiasi utente che esiste sul tuo Discourse ma con un Livello di Fiducia inferiore al valore fornito. Il valore predefinito, se non ne fornisci uno, è 2.
ad esempio:
!discsync <clean up: default false, min_visibility: default 0, include automated groups: default false>
Questo comando tenterĂ di copiare tutti i gruppi nei Ruoli di Discord che corrispondono ai criteri forniti (o ai valori predefiniti se non forniti). Successivamente, tenterĂ di popolare i ruoli in base allâappartenenza ai Gruppi su Discourse. Ă una sincronizzazione unidirezionale. Nessun dato di Discourse viene mai modificato.
!disccopy <number_of_messages> <optional_target_category_name> <optional_target_topic_name>
Consente di copiare la cronologia dei messaggi di Discord nella tua istanza Discourse direttamente dalla chat di Discord. Può gestire migliaia di messaggi in una sola volta (ma per tale volume richiederà del tempo).
Comunicazione bidirezionale
Ecco le impostazioni
- Puoi designare un Canale Annunci su Discord nelle impostazioni del plugin.
- Ora puoi digitare nel Canale Annunci di Discord assegnato e questo invierĂ il tuo messaggio al tuo Argomento Discourse assegnato nelle impostazioni del plugin.
- Puoi impostare un elenco di Categorie su Discourse per pubblicare nel canale Annunci del tuo Discord se qualcuno pubblica lĂŹ o aggiunge un nuovo Argomento (uno o entrambi).
- Copia automatica della chat per messaggio, da canale a qualsiasi Categoria con lo stesso nome su Discourse: se il nome del canale corrisponde al nome della Categoria, il messaggio verrĂ copiato su Discourse.

Inoltre, ho aggiunto un nuovo file per gestire gli eventi di Discord supportati dallâAPI discordrb, con la logica degli Annunci come primo esempio (sentiti libero di svilupparne di nuovi e inviare una PR se sono utili in generale alla comunitĂ ).
NB Per qualsiasi messaggio copiato su Discourse da Discord, lâUtente verrĂ mostrato correttamente se quellâutente ha effettuato lâaccesso a Discourse utilizzando lâaccesso con Discord (quindi il Bot Discord è in grado di abbinare gli utenti).
Stato di questo plugin
Questo è un plugin complesso da configurare. Era quasi inevitabile.
Tuttavia, è un gioco da ragazzi usarlo una volta che è tutto attivo e funzionante.
Considera il codice attualmente in Beta. Ă stato testato, anche in Produzione, ma potrebbe contenere bug. Consiglio di testarlo prima su un nuovo server Discord prima di applicarlo al tuo server Discord principale âProduzioneâ, a meno che tu non stia appena iniziando.
Qualsiasi bug è molto piĂš probabile che disturbi la tua istanza Discord rispetto a quella di Discourse, poichĂŠ non vengono apportate modifiche a Discourse. Tuttavia, lâho scritto in modo che la maggior parte delle cose sia recuperabile e puoi semplicemente ripetere unâazione per risolvere un problema, di solito. Discourse viene utilizzato come master per le informazioni di appartenenza e di gruppo e questi dati vengono utilizzati per aggiornare lâappartenenza e i Ruoli sul tuo server Discord.
Istruzioni per la configurazione
Prerequisiti
- Un server Discord su cui sei Amministratore
- Unâapp Discord (vedi sotto)
- Un bot Discord (vedi sotto)
- Accesso SSH root al tuo server Discourse
- Aggiornamenti a app.yml per installare il plugin
- Tutti gli utenti del tuo Discourse dovranno effettuare lâaccesso utilizzando il login OAuth di Discord che apparirĂ sulla tua pagina di accesso una volta installato il plugin.
App Discord
Vai qui e crea unâapp:
Clicca su âNew Applicationâ
Dovrai creare un Bot e avrĂ un aspetto simile a questo (lascialo non âpubblicoâ):
Dovrai autorizzare il bot nel browser, vedi OAuth2 - Documentation - Discord
Una volta configurato il bot, copia il Token. Dovrai inserirlo in Discourse in seguito.
Modifiche a app.yml
plugin
Ora ti serve un solo plugin, dato che il Social Login di Discord è ora nativo nel core di Discourse (wooo
)
Quindi al prompt esegui ./launcher rebuild app come al solito.
Questo dovrebbe funzionare, nessun problema.
Potresti ricevere alcuni errori nella console e nei log che indicano un fallimento del bot al primo build, poichĂŠ non hai ancora inserito le credenziali del bot nellâinterfaccia delle impostazioni di Discourse. (gestire questo in modo piĂš elegante è un compito da fare, cancellerò questa parte quando sarĂ completato). Tuttavia, non farĂ alcun danno e Discourse stesso funzionerĂ normalmente.
Una volta nellâarea di amministrazione di Discourse, vai alle Impostazioni del Plugin e compila questi campi:
Otterrai gli ID dallâinterfaccia di Discord. Dovrai attivare la ModalitĂ Sviluppatore per permetterti di copiare questi ID. In Discord, vai alle tue Impostazioni â Aspetto â AVANZATO e abilita la ModalitĂ Sviluppatore:
Puoi quindi ottenere gli ID dallâinterfaccia, ad esempio:
Dovrai anche compilare le Impostazioni OAuth di Discord. LâID Client e il Segreto provengono dalla tua stessa App Discord.
Una volta impostati questi, torna al prompt root in Linux e digita:
./launcher restart app
Se hai configurato correttamente i tuoi server Discord e Discourse, dovresti vedere il bot unirsi al server.
Se mai il bot si blocca (andrà offline), dovrai fare la stessa cosa per farlo tornare. Una maggiore indipendenza del bot dal server core di Discourse è un compito da fare. Detto questo, ho eseguito un bot in Produzione per molto tempo e non si è mai bloccato.
Comandi futuri?
Se hai unâidea per un altro comando che sfrutta il collegamento tra Discourse e Discord e che ritieni utile per la comunitĂ piĂš ampia, fammelo sapere nelle risposte e possiamo valutare la possibilitĂ di implementarlo. NB questo bot non è inteso per eseguire attivitĂ al di fuori dellâambito di Discourse.
Limitazioni
Lâobiettivo principale di questo plugin era consentire allâutente di creare un bot sul proprio Discord che fosse alimentato dal proprio server Discourse e in grado di eseguire alcune funzioni di base di gestione dellâappartenenza. Fornisce anche una base per eventuali interazioni aggiuntive simili a bot tra i due sistemi per il futuro. Parte della motivazione per lâuso dei bot è che sono semplicemente divertenti.
I comandi del bot sono per loro natura ad hoc.
Problemi noti
-
Il bot avvierĂ unâistanza di se stesso se entri in una sessione di console rails sul server. Questo farĂ sĂŹ che il bot sembri rispondere due volte (ma in realtĂ ora ci sono due bot). Nella console rails, fermare semplicemente il bot aggiuntivo digitando:Ora non dovrebbe piĂš essere necessario!::DiscordBot::Bot.discord_bot.stop -
Il Robot è un poâ loquace durante gli aggiornamenti di Discourse âonlineâ poichĂŠ continua a essere riattivato durante il processo di aggiornamento. Questo porta a trovare un buon modo per eseguire il bot in un processo separato e gestito invece che in un thread diramato dal webserver. Credo che tutto ciò sia innocuo, e se lâoutput dei bot è solo sul tuo canale amministrativo su Discord, ti importa davvero?Questo dovrebbe essere quasi risolto ora, con il bot che si annuncia solo due volte durante una ricostruzione.
Ringraziamenti
Ci sono diversi sostenitori da ringraziare per questo plugin, che mi ha richiesto molto tempo per arrivare a questo stadio, inclusi @Wedgebert, @FoohonPie. Grazie a Jeff per il suo generoso contributo. Grazie a @angus per tutto lâincoraggiamento e per aver gestito il supporto finanziario.
Il plugin è stato ispirato dal lavoro di @Watercolor_Games in una fase precedente e si basa sul plugin OAuth di Discord creato da @featheredtoast.
Il plugin si basa su la libreria Ruby discordrb semi-ufficiale supportata da Discord e sul lavoro fantastico svolto dal team di Discord per rendere il loro sistema accessibile. Grazie a @Falco per avermi aiutato con una dipendenza in modo estremamente reattivo.
Inoltre, naturalmente, questo non sarebbe stato possibile senza lâincredibile ecosistema di plugin di Discourse (woo!)
Stato di queste istruzioni
Saranno migliorate nel tempo e accolgo con favore i feedback. Ci sono aree che potrebbero risultare poco chiare.











