Skip to content

Commit

Permalink
add: stazioni and info handlers (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
notdodo authored Sep 24, 2024
1 parent cbea9de commit f685cce
Show file tree
Hide file tree
Showing 2 changed files with 297 additions and 4 deletions.
266 changes: 266 additions & 0 deletions app/erfiume/apis.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,272 @@

UNKNOWN_VALUE = -9999.0

KNOWN_STATIONS = [
"S. Zeno",
"Spessa Po",
"Parma S. Siro",
"Mercato Saraceno",
"Fiorenzuola d'Arda",
"Fiscaglia Monte",
"Navicello",
"Camposanto",
"Fidenza SIAP",
"Codigoro",
"Casoni",
"Ponte Ronca",
"Gallo",
"Castenaso",
"Correcchio Sillaro",
"Beccara Nuova Reno",
"Salsominore",
"Vigoleno",
"Lonza",
"Morciano di Romagna",
"Pievepelago idro",
"Casse Espansione Enza monte",
"S. Secondo",
"Cassa Crostolo SIAP",
"Tornolo",
"Parma Ovest",
"Rasponi",
"Castel San Pietro",
"Ponte dell'Olio",
"Arcoveggio",
"S. Sofia",
"Lugo SIAP",
"Pieve Cesato",
"Cardinala Idice",
"Ciriano",
"Fossalta",
"Fiorano",
"Puianello",
"Borgo Visignolo",
"Cusercoli Idro",
"Colorno AIPO",
"Ficarolo",
"Fusignano",
"Foscaglia Panaro",
"Teodorano",
"Ponte Sant'Ambrogio",
"Saletto",
"Ponte Val di Sasso",
"Case Bonini",
"Capoponte",
"Ponte Valenza Po",
"Secondo Salto",
"Ponte Vico",
"Sermide",
"Ponte Verucchio",
"Battiferro Bypass",
"Calcara",
"Casalmaggiore",
"Diga di Ridracoli",
"Pontelagoscuro",
"Fiscaglia Valle",
"Molato Diga Monte",
"S. Antonio",
"Ponte Lamberti",
"Linaro",
"Montanaro",
"Lugo",
"Cremona",
"Forcelli",
"S. Agata",
"Modena Naviglio",
"Casalecchio canale",
"Ponte Samone",
"Bagnetto Reno",
"Ponte Alto",
"Ponte Messa",
"Dosso",
"Loiano Ponte Savena",
"S. Carlo",
"Ponte Braldo",
"Vergato",
"Mordano",
"Castiglione",
"Pracchia",
"Ponte Becca Po",
"Ongina",
"Rivergaro",
"Vignola SIAP",
"S. Zaccaria",
"Alseno",
"Ramiola",
"Savignano",
"Strada Casale",
"Rocca San Casciano",
"S. Marco",
"Bobbio",
"Casola Valsenio",
"Fornovo SIAP",
"Pioppa",
"Chiavicone Idice",
"Ponte Veggia",
"La Dozza",
"Fanano",
"Cadelbosco",
"Sostegno Reno",
"S. Bartolo",
"Correcchio canale",
"Canonica Valle",
"Mezzano",
"Saliceto",
"Ponte Nibbiano",
"Gandazzolo Reno",
"S. Ruffillo Savena",
"Farini",
"Ostia Parmense",
"Bova",
"Palesio",
"Modigliana",
"Paltrone Samoggia",
"Ponte Cavola",
"Rimini Ausa",
"Ponte Bacchello",
"Sesto Imolese",
"Pontenure",
"Chiavica Bastia Sillaro",
"Silla",
"Ongina Po",
"Sorbolo",
"Isola S.Antonio PO",
"Chiavicone Reno",
"Parma Ponte Nuovo",
"Rossenna",
"Castellina di Soragna",
"Pontelagoscuro idrometro Boicelli",
"S. Vittoria",
"Sarna",
"Casale Monferrato Po",
"Imola",
"Mignano Diga",
"Polesella SIAP",
"Vetto",
"Borello",
"Ponte Calanca",
"Rivalta RE",
"Opera Reno Panfilia",
"Tebano",
"Parma cassa invaso CAE",
"Bazzano",
"Alfonsine",
"Forli'",
"Casalecchio tiro a volo",
"Matellica",
"Pianoro",
"Porretta Terme",
"Selvanizza",
"Compiano",
"Corniglio",
"Lavino di Sotto",
"Calisese",
"Castell'Arquato Canale",
"Bentivoglio",
"Ponte Felisio",
"S. Bernardino",
"Ponte Dolo",
"Borgoforte",
"Luretta",
"Marzocchina",
"Trebbia Valsigiara",
"S. Donnino",
"Casse Espansione Enza SIAP",
"Bondeno Panaro",
"Carignano Po",
"Borgo Tossignano",
"Accursi Idice",
"Isola Pescaroli SIAP",
"Ravone Via del Chiu",
"Anzola Ghironda",
"Ponte Locatello",
"Villanova",
"Coccolia",
"Sasso Marconi",
"Santarcangelo di Romagna",
"Ponte degli Alpini",
"Centonara",
"Bevano Adriatica",
"Castrocaro",
"Codrignano",
"S. Ilario d'Enza",
"Salsomaggiore sul Ghiara",
"Berceto Baganza",
"Veggiola",
"Vigolo Marchese",
"Cesena",
"Castelmaggiore",
"Casei Gerola Po",
"Suviana",
"Invaso",
"Brocchetti",
"Bonconvento",
"Cento",
"Burana",
"Savio",
"Fornovo",
"Ponte Uso",
"S. Cesario SIAP",
"Piacenza",
"Rubiera casse monte",
"Pianello Val Tidone idro",
"Conca Diga",
"Cavanella SIAP",
"Ponte Bastia",
"Spilamberto",
"Ariano",
"S. Maria Nova",
"Gatta",
"Boretto",
"Marsaglia",
"Gorzano",
"Rimini SS16",
"Lavino di Sopra",
"Castell'Arquato",
"Cotignola",
"Parma Ponte Verdi",
"Ca' de Caroli",
"Fiumalbo",
"Rivalta RA",
"Cedogno",
"Ravone",
"Castelbolognese",
"Ponte Nibbiano Tidoncello",
"Meldola",
"Pizzocalvo",
"Ponte Motta",
"Quarto",
"Ponteceno",
"Noceto",
"Gandazzolo Savena",
"Crescentino Po",
"Rubiera casse valle",
"Monte Cerignone",
"Impianto Forcelli Lavino",
"Bondanello",
"Firenzuola idro",
"Ronco",
"Rottofreno",
"Ferriere Idro",
"Bomporto",
"Pradella",
"Toccalmatto",
"Langhirano idro",
"Ponte Dattaro",
"Marzolara",
"Rubiera Tresinaro",
"Massarolo",
"Opera Po",
"Concordia sulla Secchia",
"Rubiera SS9",
"Marradi",
"Casalecchio chiusa",
"Reda",
"Cabanne",
"Faenza",
"Portonovo",
]


@dataclass
class Stazione:
Expand Down
35 changes: 31 additions & 4 deletions app/erfiume/tgbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

from aws_lambda_powertools.utilities import parameters

from .apis import KNOWN_STATIONS
from .logging import logger
from .storage import AsyncDynamoDB

Expand Down Expand Up @@ -110,7 +111,7 @@ async def start(update: Update, _: ContextTypes.DEFAULT_TYPE | None) -> None:
and update.message
):
user = update.effective_user
message = rf"Ciao {user.mention_html()}! Scrivi il nome di una stazione da monitorare per iniziare (e.g. <b>Cesena</b> o <b>/S. Carlo</b>)"
message = rf"Ciao {user.mention_html()}! Scrivi il nome di una stazione da monitorare per iniziare (e.g. <b>Cesena</b> o <b>/S. Carlo</b>) o cercane una con /stazioni" # noqa: E501
await update.message.reply_html(message)
elif (
is_from_user(update)
Expand All @@ -119,7 +120,7 @@ async def start(update: Update, _: ContextTypes.DEFAULT_TYPE | None) -> None:
and update.message
):
chat = update.effective_chat
message = rf"Ciao {chat.title}! Per iniziare scrivete il nome di una stazione da monitorare (e.g. <b>/Cesena</b> o <b>/S. Carlo</b>)"
message = rf"Ciao {chat.title}! Per iniziare scrivete il nome di una stazione da monitorare (e.g. <b>/Cesena</b> o <b>/S. Carlo</b>) o cercane una con /stazioni" # noqa: E501
await update.message.reply_html(message)


Expand All @@ -136,6 +137,28 @@ async def cesena(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
)


async def list_stations(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
"""Send a message when the command /cesena is issued."""
if update.message:
await update.message.reply_html("\n".join(KNOWN_STATIONS))


async def info(update: Update, _: ContextTypes.DEFAULT_TYPE) -> None:
"""Send a message when the command /cesena is issued."""
message = cleandoc(
"""
Bot Telegram che permette di leggere i livelli idrometrici dei fiumi dell'Emilia Romagna.
I dati idrometrici sono ottenuti dalle API messe a disposizione da allertameteo.regione.emilia-romagna.it.
Il progetto è completamente open-source (https://github.com/notdodo/erfiume_bot).
Per donazioni per mantenere il servizio attivo: buymeacoffee.com/d0d0
Inizia con /start o /stazioni
"""
)
if update.message:
await update.message.reply_html(message, disable_web_page_preview=True)


async def handle_private_message(
update: Update, context: ContextTypes.DEFAULT_TYPE
) -> None:
Expand All @@ -146,7 +169,8 @@ async def handle_private_message(
message = cleandoc(
"""Stazione non trovata!
Inserisci esattamente il nome che vedi dalla pagina https://allertameteo.regione.emilia-romagna.it/livello-idrometrico
Ad esempio 'Cesena', 'Lavino di Sopra' o 'S. Carlo'"""
Ad esempio 'Cesena', 'Lavino di Sopra' o 'S. Carlo'.
Se non sai quale cercare prova con /stazioni"""
)
if update.message and update.effective_chat and update.message.text:
logger.info("Received private message: %s", update.message.text)
Expand All @@ -173,7 +197,8 @@ async def handle_group_message(
message = cleandoc(
"""Stazione non trovata!
Inserisci esattamente il nome che vedi dalla pagina https://allertameteo.regione.emilia-romagna.it/livello-idrometrico
Ad esempio '/Cesena', '/Lavino di Sopra' o '/S. Carlo'"""
Ad esempio '/Cesena', '/Lavino di Sopra' o '/S. Carlo'.
Se non sai quale cercare prova con /stazioni"""
)
if update.message and update.effective_chat and update.message.text:
logger.info("Received group message: %s", update.message.text)
Expand All @@ -199,6 +224,8 @@ async def bot(event: dict[str, Any], _context: LambdaContext) -> None:

application.add_handler(CommandHandler("start", start))
application.add_handler(CommandHandler("cesena", cesena))
application.add_handler(CommandHandler("stazioni", list_stations))
application.add_handler(CommandHandler("info", info))
application.add_handler(
MessageHandler(
filters.ChatType.PRIVATE & (filters.TEXT | filters.COMMAND),
Expand Down

0 comments on commit f685cce

Please sign in to comment.