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ù da oggi in poi (snapshot corrente)
│   ├── menu_today.json       <- snapshot del solo menù di oggi
│   ├── menu_history.json     <- storico menù passati (append-only)
│   └── 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"] --> U["scripts/smart_update.py"]
  C["DSU Toscana - Tariffe"] --> R["scripts/fetch_rates.py + fetch_combinations.py"]

  G["Cloudflare Worker<br>(Scheduler ora IT)"] -->|workflow_dispatch| H{"GitHub Actions"}

  H -->|update_menu.yml| U
  U --> B["data/menu.json<br>(solo da oggi in poi)"]
  U --> BH["data/menu_history.json<br>(append giorni passati)"]
  U --> BT["data/menu_today.json<br>(snapshot di oggi)"]

  H -->|update_rates.yml| R
  R --> D["data/rates.json"]
  R --> K["data/combinations.json"]
  R --> T["assets/img/table.png"]

  H -->|generate_images.yml| I["assets/posts/*.png"]
  B -->|input menu| I

  H -->|publish_instagram.yml| J["Instagram @cibounipibot"]
  I --> J
  B -->|caption/testi| J

  E["data/canteens.json"] -->|Dati statici mense| F["bot.py"]
  B --> F
  D --> F
  K --> 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: Aggiorna i testi dei menù da oggi in poi salvandoli in menu.json, genera menu_today.json e sposta i giorni passati in menu_history.json (append).
  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
Zigzag Concentric Circles Plus Grid Waves
Triangles 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

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors