Informabot

Informabot (ospitato su GitHub) è il bot Telegram che assiste gli studenti del DISI. Puoi scrivergli da qui.

Dipendenze

È richiesto Go 1.21+.

Per la formattazione del codice JSON è richiesto Prettier @latest.

Compilazione

Per compilare il bot dalla cartella radice del progetto, usare:

go build

Esecuzione

In vista della prima esecuzione, bisogna popolare il sottomodulo che incorpora csunibo/config:

git submodule update --init --recursive

Per lanciare il bot dalla cartella radice del progetto, usare:

TOKEN=123:A4b5C6 go run .

usando il codice di autorizzazione ricevuto da BotFather anziché 123:A4b5C6.

Configurazione

Quando configuri il bot con BotFather, ti sarà chiesto di mandare la lista dei comandi del tuo bot. Puoi incollare il risultato del comando /help_botfather di Informabot (a differenza di /help, questo comando non fa uso di / nel risultato).

Aggiungere nuovi comandi

Azioni

Le azioni sono salvate in json/actions.json. Ogni chiave è il nome comando del comando che innesca l’azione, mentre ogni valore è un oggetto descritto da diversi attributi:

  • type specifica la logica del comando. I tipi disponibili sono descritti sotto;
  • data offre dati aggiuntivi, tutti dipendenti dal tipo di azione. Tutti gli attributi descritti sotto sono da intendersi come appartenenti a questo campo;
  • description (opzionale) riassume l’obiettivo dell’azione.

message

Il bot risponde con un messaggio statico, specificato dall’attributo text.

list

Il bot risponde con una lista automaticamente generata, preceduta da header. Ogni elemento della lista è generato sostituendo i segnaposto di template con gli elementi di un diverso vettore dall’attributo matrice items.

help

Il bot risponde elencando ogni coppia comando-descrizione. Se un comando è privo di descrizione, viene tralasciato. L’attributo slashes specifica se i prefissi / per i comandi dovrebbero essere usati (come di consueto) o tralasciati (come richiesto da BotFather).

luck

Mette alla prova la tua fortuna.

alias

Questi comandi sono sinonimi di altri. L’attributo command specifica a quale comando questo alias si riferisca. Si faccia attenzione ai cicli di alias, che causano stack overflow dovuti a ricorsione infinita.

lookingFor

Il bot aggiunge l’utente alla lista di persone in cerca di compagne e compagni di gruppo in questa chat, e risponde con la lista aggiornata. singularText, pluralText e chatError sono usati come messaggi personalizzati per comunicare con l’utente.

notLookingFor

Il bot rimuove l’utente dalla lista di persone in cerca di compagne e compagni di gruppo in questa chat. chatError e nonFoundError sono usati per comunicare con l’utente.

yearly

Proprio come un alias che ha abc come valore dell’attributo command lancia l’azione abc, così un’azione di tipo yearly che ha abc come valore del suo attributo command potrebbe eseguire abc1, abc2 o abc3 a seconda della chat in cui è invocato. Il bot ispeziona il titolo della chat, e tenta di intuire l’anno di corso appropriato. Se il bot non riesce a indovinare alcun anno di corso, il valore dell’attributo noyear è usato come risposta predefinita.

buttonsLecture

Crea un percorso a step di selezione per le lezioni dei corsi di laurea (triennali e magistrali) descritti in csunibo/config/timetables.json. Per prima cosa richiede la selezione del CdL e dell’anno, infine la selezione di un giorno a partire da quello odierno fino ai 6 giorni successivi. Gli step funzionano grazie alle callback. Usa come intestazione del messaggio il titolo descritto in title. In caso di fallimento fallbackText viene usato come risposta.

issue

Il bot risponde taggando i mantainer di Informabot che sono presenti nel gruppo. In caso non ci sia alcun mantainer all’interno del gruppo consiglia di portare all’attenzione dei mantainer nel gruppo csunibo il problema riscontrato.

buttonsRepresentatives

Crea un percorso a step di selezione per i rappresentanti dei corsi di laurea (triennali e magistrali) descritti in ‘csunibo/config/representatives.json. Il comando chiede prima di selezionare il Cdl e restituisce l'elenco delle mail dei rappresentanti. Gli step funzionano grazie alle [callback](https://core.telegram.org/bots/api#callbackquery). Usa come intestazione del messaggio il titolo descritto in title. In caso di fallimento fallbackText` viene usato come risposta.

Insegnamenti e corsi di laurea

Insegnamenti e corsi di laurea sono prelevati dal sottomodulo csunibo/config collocato in json/condig/.

Memi

I memi sono memorizzati in json/memes.json. Ogni chiave è il nome del comando che innesca il meme, mentre ogni valore è il contenuto della risposta del bot (un semplice messaggio statico).

Prima di contribuire

Dopo aver applicato le proprie modifiche, lanciare dalla cartella radice del progetto:

go test -v ./...           # esegue i test
go fmt ./...               # formatta il codice Go
prettier --write **/*.json # formatta i file JSON

Questo assicura che i controlli automatici passino una volta aperta la PR.

Ringraziamenti

Informabot nasce da un frammento JavaScript consegnato dalla coorte 2019/20 a quella 2020/21. I ringraziamenti degli studenti vanno al nostro collega @Wifino, che ha manutenuto ed espanso il progetto originale per lungo tempo.

Modifica questa pagina

CSUnibo
CSUnibo

Comunità volontaria di chi studia presso il Dipartimento di Informatica - Scienza e Ingegneria dell’Università di Bologna