dont speak messages with control codes, remove min length message vor words like Ja no etc.

This commit is contained in:
duffyduck 2025-12-27 20:50:15 +01:00
parent e81f1873f7
commit b00eec263d
1 changed files with 49 additions and 21 deletions

View File

@ -752,11 +752,18 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
if self._current_chat_id:
self._save_tts_state(self._current_chat_id, msg.id)
# ════════════════════════════════════════════════════════════════
# WICHTIG: Nachrichten mit Steuercodes werden NICHT vorgelesen!
# Diese sind reine Roboter-Befehle, keine Sprache für Stefan.
# ════════════════════════════════════════════════════════════════
if self._contains_control_codes(msg.text):
logger.debug(f"TTS: Nachricht enthält Steuercodes, übersprungen")
continue
# Text für Sprache aufbereiten
speech_text = self._clean_for_speech(msg.text)
logger.debug(f"TTS: Nach Bereinigung: {len(speech_text) if speech_text else 0} Zeichen")
if speech_text and len(speech_text) > 5:
# "Claude sagt:" Prefix entfernen falls vorhanden (wird nicht vorgelesen)
tts_text = speech_text
if tts_text.lower().startswith("claude sagt:"):
@ -764,7 +771,8 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
logger.debug(f"TTS: 'Claude sagt:' entfernt, Rest: {len(tts_text)} Zeichen")
# Prüfe ob nach Entfernen noch Text übrig ist
if not tts_text or len(tts_text) < 3:
# Kein Mindestlänge-Check damit auch kurze Antworten wie "Ja!" gesprochen werden
if not tts_text:
logger.debug(f"TTS: Nach Prefix-Entfernung kein Text übrig, übersprungen")
continue
@ -778,8 +786,6 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
self.tts.speak(tts_text)
self.stats.messages_spoken += 1
logger.debug("TTS: Sprechen beendet")
else:
logger.debug(f"TTS: Text zu kurz oder leer, übersprungen")
else:
logger.debug(f"TTS: Nachricht ist nicht von Claude, übersprungen")
@ -1019,6 +1025,28 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
with self._mute_lock:
return self._muted
def _contains_control_codes(self, text: str) -> bool:
"""
Prüft ob der Text Steuercodes enthält.
Nachrichten MIT Steuercodes sind reine Roboter-Befehle
und sollen NICHT vorgelesen werden.
Steuercodes:
- [FORWARD], [BACKWARD], [LEFT], [RIGHT], [STOP] - Fahrbefehle
- [LOOK_LEFT], [LOOK_RIGHT], [LOOK_UP], [LOOK_DOWN], [LOOK_CENTER] - Kamera
- [READY], [TICK], [START] - System-Marker
"""
control_codes = [
'[FORWARD]', '[BACKWARD]', '[LEFT]', '[RIGHT]', '[STOP]',
'[LOOK_LEFT]', '[LOOK_RIGHT]', '[LOOK_UP]', '[LOOK_DOWN]', '[LOOK_CENTER]',
'[READY]', '[TICK]', '[START]'
]
for code in control_codes:
if code in text:
return True
return False
def _clean_for_speech(self, text: str) -> str:
"""
Entfernt Befehle und technische Teile aus dem Text.