Backup automatico script del 2026-01-11 07:00
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import html as html_lib
|
||||
import json
|
||||
@@ -10,6 +11,7 @@ import re
|
||||
import time
|
||||
from html.parser import HTMLParser
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from typing import List, Optional
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import requests
|
||||
@@ -126,17 +128,24 @@ def load_bot_token() -> str:
|
||||
|
||||
return ""
|
||||
|
||||
def telegram_send_html(message_html: str) -> bool:
|
||||
def telegram_send_html(message_html: str, chat_ids: Optional[List[str]] = None) -> bool:
|
||||
"""
|
||||
Prova a inviare il messaggio. Non solleva eccezioni.
|
||||
Ritorna True se almeno un invio ha avuto status 200.
|
||||
Importante: lo script chiama questa funzione SOLO in caso di allerte.
|
||||
|
||||
Args:
|
||||
message_html: Messaggio HTML da inviare
|
||||
chat_ids: Lista di chat IDs (default: TELEGRAM_CHAT_IDS)
|
||||
"""
|
||||
token = load_bot_token()
|
||||
if not token:
|
||||
LOGGER.warning("Token Telegram assente. Nessun invio effettuato.")
|
||||
return False
|
||||
|
||||
if chat_ids is None:
|
||||
chat_ids = TELEGRAM_CHAT_IDS
|
||||
|
||||
url = f"https://api.telegram.org/bot{token}/sendMessage"
|
||||
base_payload = {
|
||||
"text": message_html,
|
||||
@@ -146,7 +155,7 @@ def telegram_send_html(message_html: str) -> bool:
|
||||
|
||||
sent_ok = False
|
||||
with requests.Session() as s:
|
||||
for chat_id in TELEGRAM_CHAT_IDS:
|
||||
for chat_id in chat_ids:
|
||||
payload = dict(base_payload)
|
||||
payload["chat_id"] = chat_id
|
||||
try:
|
||||
@@ -322,7 +331,7 @@ def format_message(parsed: dict) -> str:
|
||||
# Main
|
||||
# =============================================================================
|
||||
|
||||
def main():
|
||||
def main(chat_ids: Optional[List[str]] = None, debug_mode: bool = False):
|
||||
LOGGER.info("--- Controllo Protezione Civile (Bollettino ufficiale) ---")
|
||||
|
||||
try:
|
||||
@@ -340,8 +349,20 @@ def main():
|
||||
LOGGER.debug("%s label=%s", k, d.get("date_label", ""))
|
||||
LOGGER.debug("%s alerts=%s", k, d.get("alerts", {}))
|
||||
|
||||
# Regola: invia Telegram SOLO se esistono allerte
|
||||
# Regola: invia Telegram SOLO se esistono allerte (tranne in debug)
|
||||
if not has_any_alert(parsed):
|
||||
if debug_mode:
|
||||
# In modalità debug, crea un messaggio informativo anche se non ci sono allerte
|
||||
LOGGER.info("[DEBUG MODE] Nessuna allerta, ma creo messaggio informativo")
|
||||
msg = format_message(parsed)
|
||||
# Aggiungi prefisso per indicare che non ci sono allerte
|
||||
msg = f"ℹ️ <b>DEBUG: Nessuna allerta attiva</b>\n\n{msg}"
|
||||
sent_ok = telegram_send_html(msg, chat_ids=chat_ids)
|
||||
if sent_ok:
|
||||
LOGGER.info("Messaggio debug inviato con successo.")
|
||||
else:
|
||||
LOGGER.warning("Invio debug non riuscito (token mancante o errore Telegram).")
|
||||
else:
|
||||
LOGGER.info("Nessuna allerta nelle zone monitorate. Nessuna notifica inviata.")
|
||||
return
|
||||
|
||||
@@ -349,13 +370,16 @@ def main():
|
||||
state = load_state()
|
||||
last_sig = state.get("last_alert_signature", "")
|
||||
|
||||
if sig == last_sig:
|
||||
# In modalità debug, bypassa controlli anti-spam
|
||||
if debug_mode:
|
||||
LOGGER.info("[DEBUG MODE] Bypass anti-spam: invio forzato")
|
||||
elif sig == last_sig:
|
||||
LOGGER.info("Allerta già notificata e invariata. Nessuna nuova notifica.")
|
||||
return
|
||||
|
||||
# A questo punto: ci sono allerte e sono nuove -> prova invio
|
||||
msg = format_message(parsed)
|
||||
sent_ok = telegram_send_html(msg)
|
||||
sent_ok = telegram_send_html(msg, chat_ids=chat_ids)
|
||||
|
||||
if sent_ok:
|
||||
LOGGER.info("Notifica allerta inviata con successo.")
|
||||
@@ -368,4 +392,11 @@ def main():
|
||||
LOGGER.warning("Invio non riuscito (token mancante o errore Telegram). Stato NON aggiornato.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
parser = argparse.ArgumentParser(description="Civil protection alert")
|
||||
parser.add_argument("--debug", action="store_true", help="Invia messaggi solo all'admin (chat ID: %s)" % TELEGRAM_CHAT_IDS[0])
|
||||
args = parser.parse_args()
|
||||
|
||||
# In modalità debug, invia solo al primo chat ID (admin) e bypassa anti-spam
|
||||
chat_ids = [TELEGRAM_CHAT_IDS[0]] if args.debug else None
|
||||
|
||||
main(chat_ids=chat_ids, debug_mode=args.debug)
|
||||
|
||||
Reference in New Issue
Block a user