In questa pagina descriviamo brevemente come utilizzare Java per realizzare un semplice Bot su Telegram. In particolare, le istruzioni vi spiegano come avviare il bot di esempio, che poi potrete modificare a piacere.

Registrare il proprio bot

Su telegram, iniziare una chat con il bot @BotFather. Dare il comando /newbot e rispondere alle domande che vi vengono poste, ovvero fornire prima un nome per il bot e poi una username. Nel mio caso ho usato CLEII-Prog1 come nome e CLEIIProg1bot come username. Il sistema vi fornirà un token che dovete conservare in luogo sicuro, perché è una sorta di password per manipolare il bot.

Una volta finita la creazione del bot, potete già mandare messaggi al bot che avete creato (@<nome bot>) ma non avrete risposta perché non c'è nessun programma che lo governa.

Il bot di esempio

Per scrivere un programma Java che controlla un bot Telegram è possibile utilizzare la libreria di classi TelegramBots. Tuttavia, l'uso diretto di questa libreria non è immediato, perché si basa su una metodologia di programmazione chiamata programmazione ad eventi che non abbiamo ancora studiato e che comunque non siamo pronti ad utilizzare. Pertanto, ho realizzato un paio di classi Java che consentono di scrivere un bot come se fosse una applicazione testuale per terminale (l'unico tipo di programmi che al momento siamo in grado di scrivere). Non sono assolutamente da utilizzare se si vuole scrivere un bot professionale, ma vanno bene per i nostri semplici esperimenti.

Potete scaricare un template Java per chatbot Telegram. Scomprimete il file, e vi verrà creata una cartella denominata TemplateBot. Dentro la cartella trovare questi file:

  • pom.xml: si tratta di un file XML che contiene la descrizione del progetto (posizione dei file sorgente, librerie utilizzate, etc...) nel formato del sistema di building Maven. Per i programmi che scriviamo normalmente a lezione non abbiamo bisogno di un progetto, perché non usiamo nessuna libreria specifica. Ma, se ci fate caso, un file pom.xml si trova invece nei compiti a casa. Per questa esercitazione lo usiamo poiché ci rende più semplice usare la libreria TelegramBots.
  • src/main/resources/config.properties: è il file di configurazione usato dalle classi di interfacciamento con Telegram. Dovete modificare questo file rimpiazzando <username> e <token> con i valori generati durante la creazione del bot;
  • src/main/java/it/unich/easytelegram: è uno strato di interfacciamento con la libreria TelegramBots che consente di scrivere bot come se fossero applicazioni per terminali di testo. Se volete potete darci un'occhiata, ma non è di facile comprensione e non è qui che dovete lavorare;
  • src/main/java contiene due bot di esempio, QuadratoBot e SommaBot. Il primo accetta un numero e genera un quadrato di asterischi con lato pari al numero dato, il secondo implementa la somma di due numeri. Sono due esempi di sempici programmi che abbiamo già visto a lezione, solo che sono scritti per operare come bot Telegram.

Per lanciare uno dei due bot di esempio, prima di tutto dovete modificare il file src/main/resources/config.properties come descritto sopra, poi è sufficiente eseguire uno dei due programmi QuadratoBot e SommaBot. Nella finestra Terminale di VSCode appariranno dei misteriosi messaggi:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Non è però qui che avviene l'interazione: se provate adesso ad inviare un messaggio al bot che avete creato, "sveglierete" il programma di controllo che inizierà a chiedervi di immettere dei numeri (ovviamente l'interazione cambia a seconda di quale dei due programmi avete lanciato). Il bot è attivo fintanto che il programma di controllo è attivo. Se terminate il programma, il bot smette di rispondere.

Come scrivere un bot

Per scrivere un vostro bot potete usare come punto di partenza uno dei due bot di esempio. A differenza che nei programmi standard che abbiamo scritto fin'ora, il codice non va dentro il metodo main (che deve contenere la sola invocazione del metodo BotController.launch) ma nel metodo run. Il programma si scrive esattamente come abbiamo fatto fin'ora, con la differenza che:

  • per l'output, non si usa il metodo System.out.println, ma il metodo chat.print (dove chat è il nome del parametro del metodo run);
  • per l'input non si usa la classe Scanner, ma i metodi nextInt, nextDouble e simili si applicano all'oggetto chat (chat.nextInt(), chat.nextDouble() e simili).

Alcune cose a cui prestare attenzione

  1. Quando provate a lanciare un nuovo programma bot, dovete sempre avere l'accortezza di interrompere il precedente (cliccando sul quadrato nella barra di controllo in alto in VSCode). I programmi in esecuzione infatti non vengono chiusi automaticament, e finché il vecchio programma ha il controllo del bot, quello nuovo non potrà fare nulla.
Last modified: Monday, 14 November 2022, 5:45 PM