Bot della comunità
di Discord

Faccio parte di una comunità su Discord, una piattaforma di messaggistica divisa in server che tra le sue caratteristiche permette di creare dei “bot”, dei programmi che servono a gestire ed intrattenere i membri o il server stesso.

Durante i primi giorni del 2022 abbiamo ricevuto la terribile notizia che un amato membro della nostra comunità aveva deciso di togliersi la vita. Questa persona aveva generosamente creato e mantenuto da anni il bot usato nella comunità con decine di funzioni non banali da sviluppare.

Spinti dall’affetto abbiamo deciso di sviluppare una nuova versione del bot e dedicandolo a lui dandoli il nome della sua mascot Twiggy.

Tecnologie comprese nel progetto

È stato scelto Typescript come linguaggio per la facilità di apprendimento pur sempre avendo un buon type system per favorire l’integrazione dei vari membri della comunità variano di livello, da senior developer a hobbyists e che provengono da linguaggi di programmazione molto diversi, da C++ a Kotlin a JavaScript a Python.

Discordx, una library che estende Discord.js ma in typescript, che ci permette di interfacciarci con l’API di Discord.

Usiamo Prisma per la persistenza dei dati che vengono conservati in SQLite, una piccolo ma veloce e affidabile library completa di tutte le funzionalità di un database SQL.

I logo di Typescript, Node Js, Prisma, e Discord.js

Alcune delle funzionalità che ho aggiunto

Streaming now visibility: il bot si abbona ad un web hook dell’API di Discord e assegna o rimuove un ruolo ad un membro che ha iniziato o concluso un livestream in modo che appaiano in una categoria con una visibilità elevata nella lista dei membri rendendo così più facile notare il loro canale.

Timeout e sudoku: due comandi che permettono di rimuovere a determinati utenti la possibilità di interagire con gli altri per un determinato lasso di tempo il quale è impossibile senza l’aiuto di un bot. /timeout è dedicato ai moderatori. Con /sudoku (un gioco di parole con seppuku) invece ti metti fuori gioco da solo per un tempo a caso il che viene usato frequentemente quando si vuole andare a letto evitando la tentazione di continuare a chattare.

Rock-paper-scissors: un comando per sfidarsi a sasso carta forbici, utilizza le allora nuovi pulsanti e interazioni effimere di Discord per far si che si possa esprimere la propria scelta in segreto.

Quali conoscenze ho acquisito durante l’esperienza

Ho imparato come lavorare in un gruppo di developer ad un vero e proprio progretto Open Source.

Mi hanno insegnato qual è il workflow giusto per contribuire, dal creare un fork con una mia feature branch al poi aprire una pull request.

Ho poi fatto esperienza nell’analizzare una pull request di qualcun altro e dare a mia volta consigli in modo da migliorare il codice perché poi venga approvata.

Sono infinitamente grato dell’esperienza fatta perché, a mio modo di vedere, mi ha reso un developer migliore