Skip to content

plumkewe/mense-unipi-bot

Repository files navigation

CiboUniPI Logo

MENSE

Un bot Telegram per consultare i menù, gli orari e le tariffe delle mense universitarie di Pisa (DSU Toscana).

Il bot supporta la ricerca inline, la navigazione giornaliera dei menù, il calcolo delle tariffe su base ISEE e la consultazione degli orari in tempo reale.

Indice

SCREENSHOT

Screenshot del bot

Struttura del progetto

(indice)

├── README.md
├── requirements.txt
├── assets/
│   ├── icons/
│   ├── img/
│   ├── logo/
│   └── posts/                <- immagini generate per i post di Instagram
├── cloudflare-worker/        <- microservizio per lo scheduler preciso (gestisce fuso orario IT)
├── data/
│   ├── canteens.json         <- dati delle mense (orari, servizi, coordinate)
│   ├── combinations.json     <- combinazioni di piatti (es. menu fisso)
│   ├── cookies.txt           <- sessione per lo scraping
│   ├── menu.json             <- menù aggiornato quotidianamente
│   └── rates.json            <- tariffe per fascia ISEE
├── bot.py                    <- entrypoint del bot Telegram
├── scripts/
│   ├── extract_menu.py       <- scraper menù da canteen.dsutoscana.cloud
│   ├── fetch_rates.py        <- scraper tariffe DSU
│   ├── generate_menu_images.py <- genera i post immagine in HTML/ststili (Playwright)
│   ├── publish_instagram.py  <- pubblica Carousel su Instagram tramite Graph API
│   └── smart_update.py       <- aggiornamento intelligente dei dati testuali
└── .github/
    └── workflows/
        ├── update_menu.yml       <- aggiornamento giornaliero menù testuale
        ├── generate_images.yml   <- crea e salva le immagini dei post
        ├── publish_instagram.yml <- invia le immagini create su IG
        └── update_rates.yml      <- aggiornamento tariffe

Flowchart

(indice)

Flusso Dati

graph LR
    A["canteen.dsutoscana.cloud"] --> B["menu.json"]
    C["DSU Toscana - Tariffe"] --> D["rates.json"]
    E["canteens.json"] -->|Dati statici mense| F["bot.py"]

    G["Cloudflare Worker<br>(Scheduler ITEsatto)"] -->|Trigger workflow| H{"GitHub Actions"}

    H -->|update_menu| B
    H -->|update_rates| D
    B -->|generate_images| I["Immagini Post (.png)"]
    H -->|publish_instagram| J["Instagram @mense.unipi"]
    I --> J

    B --> F
    D --> F
    K["combinations.json"] --> F

    F -->|"Menù / Orari / Tariffe"| L["Utente Telegram"]
    L -->|"@cibounipibot"| F
Loading

Funzionalità

(indice)

Ricerca Inline

È possibile cercare un piatto specifico (es. p:Arista) direttamente in qualsiasi chat Telegram senza aprire il bot. I risultati mostrano in quali mense e in quali giorni verrà servito il piatto cercato, con navigazione tra le date.

La ricerca inline si avvia digitando @cibounipibot seguito da uno spazio e dalla query. Senza prefisso viene mostrata direttamente la lista delle mense per vedere il menù di oggi.

Menu e Navigazione

Una volta aperto il menù di una mensa, è possibile:

  • Scorrere i giorni con i pulsanti ◀︎ e ▶︎
  • Tornare ad oggi con il pulsante ○
  • Alternare tra Pranzo e Cena
  • Filtrare per mensa specifica oppure visualizzare TUTTE le mense insieme

Per le mense TUTTE, ogni piatto disponibile solo in alcune mense viene annotato con (Solo NomeMensa).

Info e Orari

Digitando @cibounipibot i: è possibile consultare lo stato attuale di ogni mensa (aperta/chiusa), gli orari di pranzo e cena e i servizi disponibili (pizzeria, prendi e vai, menù vegetariano, gluten-free, ecc.).

Il pulsante APERTE ORA nella tastiera persistente mostra subito le mense attualmente operative.

Tariffe ISEE

Digitando @cibounipibot t: viene mostrata la tabella completa delle tariffe per fascia ISEE.

Digitando @cibounipibot t:<valore> (es. t:20000) il bot calcola automaticamente la fascia di appartenenza e mostra la tariffa personalizzata per pranzo, cena e colazione.

Automazione Social (Instagram)

Oltre al bot Telegram, il progetto include un sistema automatizzato per la pubblicazione giornaliera dei menù su Instagram. L'infrastruttura è basata su GitHub Actions suddivise in tre fasi:

  1. update_menu.yml: Scarica i testi aggiornati dei menù salvandoli in menu.json.
  2. generate_images.yml: Tramite uno script Python nativo (generate_menu_images.py), il sistema genera le grafiche ("slide") a partire da template, scrivendo testo personalizzato e uno sfondo procedurale con geometrie dinamiche e vibranti. Il design cambia dinamicamente e il sistema alterna vari colori e pattern su base settimanale e giornaliera.
  3. publish_instagram.yml: Utilizzando le Graph API di Meta, le immagini generate vengono raggruppate e pubblicate come "Carousel" sul profilo Instagram dedicato ai menù.

Pattern Generativi disponibili per i post

Dot Grid Diagonal Stripes Crosshatch Diamond Grid Hexagons
Zigzag Concentric Circles Plus Grid Waves Triangles
Squares Hollow Dots X Shapes Vertical Stripes Horizontal Stripes

Per far sì che l'esecuzione di questi workflow sia precisa e rispetti l'orario italiano (gestendo in automatico il cambio tra ora legale e solare), i comandi vengono avviati da uno scheduler configurato tramite Cloudflare Workers. Questo risolve i noti problemi di ritardo e imprecisione dei classici cron integrati nativamente in GitHub Actions.

Comandi

(indice)

Funzione Comando
Menu di Oggi
Seleziona una mensa e vedi il menù del giorno
@cibounipibot (+ spazio)
Cerca Piatto
Cerca un piatto per nome in tutte le mense e tutti i giorni
@cibounipibot p:nome piatto
Info & Orari
Stato e orari di una mensa specifica
@cibounipibot i:
Tariffe ISEE
Tabella completa delle tariffe
@cibounipibot t:
Tariffa Personalizzata
Calcola la tariffa per il tuo ISEE
@cibounipibot t:<valore>
es. t:20000
Aperte Ora
Lista mense aperte in questo momento (tastiera persistente)
Pulsante APERTE ORA
Seleziona Mensa /menu
Link Utili DSU /links
Guida all'uso /help
Benvenuto /start

Data Sources

(indice)

Tipologia Dati Fonte Principale Dettagli / Link
Menù Mense DSU Toscana — canteen.dsutoscana.cloud canteen.dsutoscana.cloud/menu — aggiornato quotidianamente via GitHub Actions
Tariffe ISEE DSU Toscana — sito istituzionale dsu.toscana.it
Dati Mense Raccolta manuale + sito DSU Orari, servizi e coordinate in canteens.json

Hostato su:

Render

Problemi noti

  • Orari mense: Gli orari sono salvati staticamente in canteens.json e potrebbero non riflettere variazioni stagionali o straordinarie.

About

Un bot Telegram per consultare i menù, gli orari e le tariffe delle mense universitarie di Pisa (DSU Toscana).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors