Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Telegram Bot in Dart

In questa lezione impareremo a realizzare un Telegram Bot nel linguaggio Dart di Flutter, sfruttando le nozioni di base apprese nella guida.
In questa lezione impareremo a realizzare un Telegram Bot nel linguaggio Dart di Flutter, sfruttando le nozioni di base apprese nella guida.
Link copiato negli appunti

Dart è un moderno linguaggio
fondato sulla programmazione orientata agli oggetti che Google ha inventato e reso noto nel 2011. Si sta diffondendo sempre di più
nel mondo professionale perché permette di sviluppare rapidamente applicazioni per qualsiasi ambiente e soprattutto
è stato scelto come principale strumento di sviluppo per Flutter,
piattaforma per la produzione di applicazioni mobile native multipiattaforma.

In questa lezione, vedremo come, tra le varie possibilità, offre anche quella di creare facilmente Telegram Bot.
L'esempio che presentiamo si basa sulla libreria TeleDart,
rapida da installare grazie al sistema di package distribuiti che Dart mette a disposizione. Per poter
provare il codice sarà necessario avere un ambiente di lavoro a disposizione. Le possibilità sono principalmente due:

  • installare il Dart SDK, disponibile per qualsiasi sistema operativo;
  • utilizzare il Dart SDK interno a Flutter se si dispone di quest'ultimo ambiente di lavoro. Infatti, una volta installato il necessario
    per eseguire applicazioni Flutter vi troveremo una cartella bin, con all'interno un'altra denominata cache: proprio lì dentro ce ne sarà
    un'altra ancora denominata dart-sdk: non avremo bisogno di altro da quel momento in poi.

Preparazione all'esempio

Realizzeremo un convertitore di valute ovvero un bot che permetterà di sapere quanti dollari americani corrispondono ad
un determinato importo in euro e viceversa. Come tasso di cambio ne imposteremo uno fisso all'interno di una costante ma si potrà
espandere l'esempio per recuperare un tasso aggiornato con non troppa difficoltà.

Il suo funzionamento sarà piuttosto semplice. Esisteranno due comandi soltanto: /EUR che sarà seguito da un importo indicante il numero di euro che
vogliamo convertire in dollari ("/EUR 150.50", ad esempio) e /USD che porterà con sé il numero di dollari da convertire in euro ("/USD 120.70", ad esempio).

Per prima cosa, dobbiamo informare Telegram che siamo interessati a creare un nuovo bot. Potremo farlo seguendo
quanto visto nell'apposita lezione e si
tratterà per lo più di:

  • collegarci al BotFather, il bot che permette di creare tutti gli altri;
  • eseguire il comando /newbot fornendo nome ed identificativo del nuovo bot;
  • memorizzare il token alfanumerico che ci verrà fornito. Sarà questa la chiave con cui il nostro bot si farà
    riconoscere da Telegram.

A questo punto con ambiente Dart e token Telegram saremo pronti per iniziare. Unica cosa che manca è la predisposizione della
dipendenza necessaria ovvero la libreria TeleDart che ci potremo procurare predisponendo un file pubspec.yaml a cui abbiamo dato
il seguente contenuto:

name: teledart_esempio
dependencies:
  path: ^1.6.0
  teledart: ^0.0.50

ed eseguire il comando pub get (offerto sempre dal Dart SDK) per fare in modo che i file richiesti siano scaricati in locale.
Le versioni qui indicate dovranno, come si immagina, essere poi adattate al proprio ambiente di lavoro.

L'esempio pratico

Per realizzare il nostro convertitore di valute abbiamo impostato il seguente codice, salvato nel file
esempio.dart:

import 'package:teledart/teledart.dart';
import 'package:teledart/telegram.dart';
import 'package:teledart/model.dart';
const RATE=1.21;
RegExp regExp = new RegExp(
  r"^\d+(\.\d{0,2})?$"
);
String convert(curr_text,to){
	var value=curr_text.split(" ")[1], result;
	if (!regExp.hasMatch(value))
		return "ERRORE: Valore non valido";
	if (to=='EUR')
	   result=double.parse(value)/RATE;
	else
	   result=double.parse(value)*RATE;
	return '${result.toStringAsFixed(2)} ${to}';
}
void main() {
  var teledart = TeleDart(Telegram('TOKEN'), Event());
  teledart.start().then((me) => print('Il BOT ${me.username} è stato avviato!'));
  teledart
      .onCommand('EUR')
      .listen(((message) => teledart.replyMessage(message, convert(message.text, "USD"))));
  teledart
      .onCommand('USD')
      .listen((message) => teledart.replyMessage(message, convert(message.text, "EUR")));
}

Il file potrà essere eseguito con il comando dart presente nel Dart SDK a nostra disposizione.
La sua struttura è basata su:

  • una parte iniziale caratterizzata da una serie di operazioni import. Sono proprio queste che mettono a disposizione
    del nostro programma le classi di TeleDart di cui abbiamo bisogno;
  • l'impostazione di una costante, chiamata RATE, con la parola chiave const che conserva il tasso di cambio tra le due valute
    che abbiamo scelto per l'esempio. Dopo la costante, vediamo la definizione di un oggetto RegExp che fissa un'espressione
    regolare con la quale potremo verificare che, a seguito dei comandi /EUR e /USD, sia effettivamente stato passato un valore numerico
    intero o in virgola con al massimo due cifre decimali;
  • la funzione convert riceve due stringhe e restituisce il messaggio di risposta che il bot invierà all'utente.
    Gli argomenti conterranno uno il messaggio che il bot ha ricevuto ("/EUR 100", per esempio) e l'altro il codice
    EUR o USD che servirà a comporre la risposta. Per il resto, la funzione contiene normali operazioni aritmetiche e di arrotondamento.
  • infine il main è la parte dove viene attivato il programma.

Proprio in quest'ultimo punto, il main, si concentrano le funzioni della libreria che abbiamo utilizzato. Si tratta per lo
più di instanziare un oggetto di classe TeleDart stando ben attenti a scrivere come argomento del costruttore il token fornito dal
BotFather lì dove noi abbiamo indicato la stringa segnaposto TOKEN.

Con il metodo start viene avviato il bot e si imposta anche un messaggio da mostrare da riga di comando in modo da accertarsi che
l'operazione di lancio sia avvenuta con successo. Successivamente, con i metodi onCommand impostiamo su quali comandi Telegram
vogliamo che si abbia una reazione e poi specifichiamo che con replyMessage restituiremo all'utente il risultato di convert come si
vede nello stralcio di codice che riportiamo qui di seguito:

teledart
      .onCommand('USD')
      .listen((message) => teledart.replyMessage(message, convert(message.text, "EUR")));
}

Otterremo quello che vediamo qui in figura, un dialogo che permetterà di chiedere una conversione di valuta al bot per
avere immediatamente una risposta:

Figura 1. Conversione di valuta (click per ingrandire)Conversione di valuta con i Telegram Bot in Dart

Personalizzare il codice per esercizio non sarà complesso. Sarà sufficiente inserire ulteriori comandi che attiveranno le funzioni
di cui abbiamo bisogno: all'occorrenza le molte librerie che mette a disposizione il mondo Dart faranno la loro parte nel fornire nuove
funzionalità.

Ti consigliamo anche