Telegram Bot in Python (2024)

In questa lezione, realizziamo un TelegramBot in linguaggio Python. Come illustrato nelle lezioni
precedenti, i passaggi da seguire saranno questi:

  • richiederemo al BotFather l'inizializzazione di un nuovo Bot. Questo ci chiederà il nome che dovrà
    avere e l'identificativo, terminante con il suffisso bot, da associargli;
  • se tutti i dati al punto precedente saranno corretti il BotFather ci assegnerà un token che
    costituirà la chiave di autenticazione del nostro programma presso la piattaforma Telegram;
  • passando al codice, sceglieremo la libreria per interagire con le API di Telgram che vorremo
    utilizzare ed imposteremo l'impianto di comunicazione di base.

Quanto sopra per avviare il Bot ed integrarlo nell'ecosistema Telegram ma non dimentichiamo che la
parte principale sarà il software le cui funzionalità dovremo esporre attraverso il Bot. Infatti,
il Bot va visto come una sorta di API per un nostro servizio, un mezzo estremamente comodo e conosciuto
per poter offrire agli utenti interazione con esso da remoto.

Nel nostro caso, il TelegramBot esporrà le funzionalità relative ad un convertitore di valuta euro/dollaro e sarà
contenuto nel file bot_main.py. Al suo interno, vi sarà la variabile TOKEN che conterrà il codice
token che il BotFather ci ha assegnato. Nel testo che vedremo essa conterrà dei dati fasulli che dovranno essere sostituiti
con quelli validi prima dell'utilizzo del programma.

Fissato il token, il nostro bot inizierà a funzionare avviandolo come un normale script Python da
riga di comando:

$ python bot_main.py

L'aspetto più interessante è che grazie al token il nostro programma sarà rintracciato ovunque si trovi e non sarà
affatto necessario avere un server a disposizione: il nostro PC collegato in Rete sarà perfettamente idoneo per sperimentare il tutto.
La libreria che abbiamo scelto è una delle più famose per TelegramBot in Python sebbene non l'unica,
python-telegram-bot installabile
molto semplicemente tramite pip
da riga di comando:

$ pip install python-telegram-bot --upgrade

Il codice

Per svolgere le operazioni di conversione, abbiamo preparato due semplici funzioni fissando un cambio in maniera statica. Abbiamo messo
il tutto in un file chiamato exchange.py:

EXCHANGE=1.125def from_usd_to_eur(usd):return usd/EXCHANGEdef from_eur_to_usd(eur):return EXCHANGE*eur

Abbiamo due funzioni che si occupano di convertire, rispettivamente, un valore in dollari americani in euro (from_usd_to_eur)
ed un valore in euro nel suo controvalore in dollari (from_eur_to_usd). Qui abbiamo fissato il tasso di cambio in una variabile
ma nella realtà un servizio simile dovrebbe collegarsi a qualche fonte remota e scaricare in tempo reale il rapporto
aggiornato. Per gli scopi del nostro esempio va bene così e lo si potrà fare come ulteriore esercitazione.

Il nostro bot si occuperà di dialogare con la piattaforma invocando al momento necessario le funzioni che
abbiamo visto prima. Questo il codice del bot contenuto nel file bot_main.py:

from telegram.ext import Updater, CommandHandler, MessageHandler, Filtersimport exchange# IMPORTANTE: inserire il token fornito dal BotFather nella seguente stringaTOKEN="ABCDEFGH12345678"def extract_number(text): return text.split()[1].strip()def convert_usd(update, context): usd=float(extract_number(update.message.text)) eur=exchange.from_usd_to_eur(usd) print(f'Eseguita conversione da {usd} USD a {eur} EUR') update.message.reply_text(f'{eur} EUR')def convert_eur(update, context): eur=float(extract_number(update.message.text)) usd=exchange.from_eur_to_usd(eur) print(f'Eseguita conversione da {eur} EUR a {usd} USD') update.message.reply_text(f'{usd} USD')def main(): upd= Updater(TOKEN, use_context=True) disp=upd.dispatcher disp.add_handler(CommandHandler("usd", convert_usd)) disp.add_handler(CommandHandler("eur", convert_eur)) upd.start_polling() upd.idle()if __name__=='__main__': main()

Il funzionamento si basa su ciò che succede nella funzione main. Il bot resta in attesa di aggiornamenti che
gli vengono forniti ed il suo scopo è di reagire a questi. Gli aggiornamenti verranno innescati dai messaggi che riceve
via Telegram. Gli utenti intenzionati a cercare il bot potranno individuarlo nel loro client mediante nome o id e gli potranno
inviare dei messaggi.

I messaggi contengono i comandi che nel nostro caso saranno /eur o /usd seguiti dalla cifra che
vorremo convertire. Se inviamo /eur 100 vorremo sapere il corrispondente di 100 euro in dollari mentre
inviando /usd 100 saremo interessati a sapere a quanti euro equivalgono 100 dollari.

Con le righe:

disp.add_handler(CommandHandler("usd", convert_usd))disp.add_handler(CommandHandler("eur", convert_eur))

diciamo quale funzione deve essere invocata in base al comando assegnato. Se inviamo il messaggio
/eur 100 verrà riconosciuto il comando eur e, di conseguenza, invocata la funzione convert_eur.
Comportamento analogo si avrà usando il comando /usd.

Nelle funzioni convert_usd e convert_eur dovremo per prima cosa recuperare il testo del messaggio. L'aggiornamento
ricevuto sarà contenuto nell'oggetto update e tra i suoi vari dati troveremo update.message.text che conterrà l'intero comando.
Da qui dovremo estrarre il valore economico da convertire. Sarebbe opportuno eseguire controlli sul formato del comando ma
in questo caso non lo facciamo per leggibilità tuttavia si ricordi che è sempre buona prassi farlo.

Importante considerare che se invochiamo print in queste funzioni, il suo output sarà stampato
sulla console di esecuzione del bot mentre utilizzando la funzione reply_text invieremo dell'output sotto forma di messaggio Telegram
all'utente che ha contattato il bot.

In questo modo, avremo un prototipo di Bot funzionante, attivo finchè manterremo in esecuzione lo script bot_main.py.
Espanderlo non sarà affatto complicato: per iniziare, sarà sufficiente prevedere ulteriori comandi nel dispatcher e definire le
funzioni di reazione.

Il codice usato in questa lezione è disponibile a questo link.

Se vuoi aggiornamenti su su questo argomento inserisci la tua email nel box qui sotto:

Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.

Telegram Bot in Python (2024)
Top Articles
Declan Rice: Arsenal agree £105m deal to sign West Ham and England midfielder this summer
Declan Rice transfer latest as West Ham set £120m price tag on Arsenal target
Northern Counties Soccer Association Nj
Poe T4 Aisling
What to Do For Dog Upset Stomach
1970 Chevelle Ss For Sale Craigslist
Ati Capstone Orientation Video Quiz
Poe Pohx Profile
Tyrunt
Hay day: Top 6 tips, tricks, and cheats to save cash and grow your farm fast!
Jesse Mckinzie Auctioneer
Carter Joseph Hopf
Lost Pizza Nutrition
Seth Juszkiewicz Obituary
Pollen Count Central Islip
Walthampatch
Clear Fork Progress Book
Comics Valley In Hindi
Craigslist Toy Hauler For Sale By Owner
Promiseb Discontinued
Selfservice Bright Lending
Sienna
Student Portal Stvt
Dr. Nicole Arcy Dvm Married To Husband
Darktide Terrifying Barrage
Darknet Opsec Bible 2022
Kiddie Jungle Parma
United E Gift Card
Haunted Mansion Showtimes Near Cinemark Tinseltown Usa And Imax
Little Caesars Saul Kleinfeld
Bernie Platt, former Cherry Hill mayor and funeral home magnate, has died at 90
Att U Verse Outage Map
Rust Belt Revival Auctions
Orangetheory Northville Michigan
Police Academy Butler Tech
Agematch Com Member Login
Waffle House Gift Card Cvs
Hingham Police Scanner Wicked Local
Gpa Calculator Georgia Tech
Zasilacz Dell G3 15 3579
Barber Gym Quantico Hours
MSD Animal Health Hub: Nobivac® Rabies Q & A
Cl Bellingham
Tacos Diego Hugoton Ks
Wolf Of Wallstreet 123 Movies
The Machine 2023 Showtimes Near Roxy Lebanon
Adams-Buggs Funeral Services Obituaries
Dlnet Deltanet
Craigslist Pets Charleston Wv
Craigslist Sarasota Free Stuff
Fresno Craglist
Pilot Travel Center Portersville Photos
Latest Posts
Article information

Author: Greg Kuvalis

Last Updated:

Views: 5949

Rating: 4.4 / 5 (75 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Greg Kuvalis

Birthday: 1996-12-20

Address: 53157 Trantow Inlet, Townemouth, FL 92564-0267

Phone: +68218650356656

Job: IT Representative

Hobby: Knitting, Amateur radio, Skiing, Running, Mountain biking, Slacklining, Electronics

Introduction: My name is Greg Kuvalis, I am a witty, spotless, beautiful, charming, delightful, thankful, beautiful person who loves writing and wants to share my knowledge and understanding with you.