dont speak messages with control codes, remove min length message vor words like Ja no etc.
This commit is contained in:
parent
e81f1873f7
commit
b00eec263d
|
|
@ -752,34 +752,40 @@ 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:"):
|
||||
tts_text = tts_text[12:].strip()
|
||||
logger.debug(f"TTS: 'Claude sagt:' entfernt, Rest: {len(tts_text)} Zeichen")
|
||||
# "Claude sagt:" Prefix entfernen falls vorhanden (wird nicht vorgelesen)
|
||||
tts_text = speech_text
|
||||
if tts_text.lower().startswith("claude sagt:"):
|
||||
tts_text = tts_text[12:].strip()
|
||||
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:
|
||||
logger.debug(f"TTS: Nach Prefix-Entfernung kein Text übrig, übersprungen")
|
||||
continue
|
||||
# Prüfe ob nach Entfernen noch Text übrig ist
|
||||
# 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
|
||||
|
||||
# In Konsole anzeigen (ohne Prefix)
|
||||
console.print(f"\n[bold blue]Claude:[/bold blue] {tts_text[:200]}")
|
||||
if len(tts_text) > 200:
|
||||
console.print(f"[dim]...({len(tts_text)} Zeichen)[/dim]")
|
||||
# In Konsole anzeigen (ohne Prefix)
|
||||
console.print(f"\n[bold blue]Claude:[/bold blue] {tts_text[:200]}")
|
||||
if len(tts_text) > 200:
|
||||
console.print(f"[dim]...({len(tts_text)} Zeichen)[/dim]")
|
||||
|
||||
# Vorlesen (ohne "Claude sagt:" - das ist ja klar)
|
||||
logger.info(f"TTS: Spreche {len(tts_text)} Zeichen...")
|
||||
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")
|
||||
# Vorlesen (ohne "Claude sagt:" - das ist ja klar)
|
||||
logger.info(f"TTS: Spreche {len(tts_text)} Zeichen...")
|
||||
self.tts.speak(tts_text)
|
||||
self.stats.messages_spoken += 1
|
||||
logger.debug("TTS: Sprechen beendet")
|
||||
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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue