Dall'idea alla realizzazione, la storia del bot "PyPi Package Updates" con qualche piccolo dettaglio su quali tecnologie ho adoperato

Il bot Telegram per controllare gli aggiornamenti dei package Python

30-08-2024

Avevo voglia di creare un bot Telegram, è un tipo di “applicazione” che mi piace sviluppare perchè solitamente dall’idea al prodotto finito passa relativamente poco tempo. In poche ore o giorni di lavoro si può raggiungere il risultato desiderato dato che il testing è molto veloce e non c’è il bisogno di sviluppare un frontend perchè sarà Telegram stesso a fare da GUI .

Oltre al fatto che uso moltissimo Telegram, è quasi la mia app di messaggistica istantanea principale, avere a disposizione un bot integrato in un’app che già uso quotidianamente senza utilizzare app o siti web esterni fa comodo.

Ti lascio subito il link al bot e ti spiego il suo funzionamento: PyPi Package Updates

PyPi Package Updates pagina profilo
(click per ingrandire)

L’idea

Sviluppo quotidianamente codice in Python e mi capita spesso di utilizzare dei package esterni.

Mi piaceva l’idea di avere uno strumento che mi segnala l’aggiornamento di un package per avere anche una lista degli aggiornamenti delle librerie che seguo in un unico posto (così posso monitorare anche la frequenza degli aggiornamenti).

Ho fatto qualche ricerca nell’app e su Google e non ho trovato un progetto simile su Telegram quindi mi sono detto: «Ok, ci penso io!».

In un gruppo mi hanno detto:

È tipo un dependabot dei povery praticamente 🤣

Si, fondamentalmente dependabot e PyPi Package Updates hanno la stessa utilità.

Ma ci sono alcune piccole differenze:

  • PyPi Package Updates segnala gli aggiornamenti direttamente nella sua chat Telegram creando anche una sorta di storico
  • PyPi Package Updates posso seguire tutte le librerie che voglio, non solo quelle di un unico progetto
  • dependabot è uno strumento del repository (Gitlab, GitHub, etc.) ed analizza solo i package di uno specifico progetto una volta attivato
  • da quel che so in dependabot non è possibile interrompere il monitoraggio di un package

 

Funzioni

/start: viene invocato automaticamente all’avvio del bot e restituisce un messaggio di presentazione sempre identico  

PyPi Package Updates comando /start
(click per ingrandire)

/track: inizia a seguire un package su PyPi, ti verrà chiesto di inviare l’url del package che vuoi seguire ed è fatto  

PyPi Package Updates comando /track
(click per ingrandire)

/list: lista dei package che stai seguendo, se non sei più interessato a uno specifico package, cliccando su un elemento della lista puoi scegliere di smettere di ricevere notifiche  

PyPi Package Updates comando /list
(click per ingrandire)

Implementazione

Ovviamente il bot è stato scritto in Python con l’ausilio della libreria: python-telegram-bot

Per controllare periodicamente gli aggiornamenti ho utilizzato la funzione job-queue integrata nello stesso package.

Il database è un piccolo e semplice SQLite con sole 2 tabelle:

  • una per memorizzare gli id utenti che utilizzano il bot
  • una per salvare i package collegati agli utenti

Disclaimer: l’id utente deve essere salvato per avere un “riferimento” e inviare il messaggio quando una libreria si aggiorna. Non effettuo statistiche, non faccio profilazione (e credo non sia nemmeno possibile), non posso farci cose strane dato che ci sono dei limiti di sicurezza imposti da Telegram.

Puoi utilizzare il bot senza nessuna preoccupazione.

Come ho gestito la persistenza

Come ti dicevo, ho memorizzato tutto in un piccolo database SQLite.

Avrei potuto utilizzare una funzionalità di python-telegram-bot, che implementa già al suo interno un sistema per memorizzare dei metadati associati agli utenti del bot. Ho abbandonato subito questa idea perchè ho pensato che poteva tornarmi scomodo quando dovevo interrogare “il db” durante il controllo degli aggiornamenti.

Allo stesso tempo però avevo voglia di provare qualcosa di esotico ed ho scelto di non utilizzare SQLAlchemy . Ho utilizzato l'ORM di Django!

Quindi hai usato Django?

Ni.

Ho trovato un gist che permette, con qualche martellata, di estrarre l’ORM da Django ed utilizzarlo in un progetto “non Django”.

Utilizzo Django in molti progetti e riuscire a sfruttare il suo ORM in semplici scriptini o mini app può essere comodo.

Questo bot mi ha dato modo di testare questo metodo per capire se è una soluzione che può funzionare, se è stabile e quali sono gli eventuali problemi che si potrebbero verificare.

Il tutto in meno di 250 linee di codice

La logica del bot è molto semplice ed il codice lo è di conseguenza.

Il tutto in meno di 250 linee di codice
(click per ingrandire)

Vuoi creare il tuo bot Telegram ma non sai da dove partire?

Se vuoi dare vita alla tua idea posso darti una mano nella realizzazione 🙂 contattami e spiegami cosa hai in mente.

AP

 

Antonio Porcelli @progressify

Antonio Porcelli

@progressify

Commenta l'articolo

Se non visualizzi il blocco dei commenti è perchè non hai accettato i cookies.
Cancella le preferenze del tuo browser per questo sito, aggiorna la pagina ed accetta i cookies.