90 def _send_to_telegram(self, msg_type, chat_id, content):
91 if msg_type == "text":
92 url = f"https://api.telegram.org/bot{self.bot_token}/sendMessage"
93 payload = {
94 'chat_id': chat_id,
95 'text': content,
96 }
97 if self.parse_mode:
98 payload['parse_mode'] = self.parse_mode
99 elif msg_type == "location":
100 url = f"https://api.telegram.org/bot{self.bot_token}/sendLocation"
101 payload = {
102 'chat_id': chat_id,
103 **content
104 }
105 else:
106 logger.error("Unbekannter Nachrichtentyp.")
107 return False, True, None
108
109 try:
110 custom_delay = None
111
112 response = requests.post(url, data=payload, timeout=10)
113
114 if response.status_code == 429:
115 custom_delay = response.json().get("parameters", {}).get("retry_after", 5)
116 logger.warning(f"Rate Limit erreicht – warte {custom_delay} Sekunden.")
117 return False, False, custom_delay
118
119 if response.status_code == 400:
120 logger.error("Ungültige Parameter – Nachricht wird nicht erneut gesendet.")
121 return False, True, custom_delay
122
123 if response.status_code == 401:
124 logger.critical("Ungültiger Bot-Token – bitte prüfen!")
125 return False, True, custom_delay
126
127 response.raise_for_status()
128 logger.info(f"Erfolgreich gesendet an Chat-ID {chat_id}")
129 return True, False, custom_delay
130
131 except requests.RequestException as e:
132 logger.warning(f"Fehler beim Senden an Telegram (Chat-ID {chat_id}): {e}")
133 return False, False, custom_delay
134
135
136
137
138
139
140