fix: danmaku template now uses event rules; rules apply instantly on save

- _on_danmaku renders via event_text(rules, 'danmaku', ...) like all other
  events; hardcoded {uname}说、 {msg} format removed
- Drop message_format param from DanmakuHandler/DanmakuClient/server/main
- api_rules_post mutates the shared rules dict in place (clear+update)
  instead of rebinding, so running handlers pick up new templates
  immediately without restarting TTS
- UI save toast: '规则已保存并即时生效'
- Verified: custom template 卧槽!、是{uname}!、他说、 {msg} works;
  save-then-next-danmaku uses new template without restart
This commit is contained in:
2026-08-08 16:37:05 +08:00
parent 488abb9730
commit b7d0c26ad1
4 changed files with 14 additions and 22 deletions
+5 -5
View File
@@ -58,7 +58,6 @@ class TTSService:
voice = config.get("voice", "f1")
speed = config.get("speed", 100)
self._volume = config.get("volume", 100)
message_format = config.get("format", "{uname}\u8bf4\u3001 {msg}")
convert_numbers = config.get("convert_numbers", True)
self.current_config = config
self.recent_messages = []
@@ -71,7 +70,6 @@ class TTSService:
self._danmaku_client = DanmakuClient(
room_id=room_id, queue=self._queue,
cookies=self._cookies, rules=event_rules,
message_format=message_format,
)
await self._danmaku_client.start()
self.running = True
@@ -169,7 +167,6 @@ async def api_start(request: web.Request) -> web.Response:
config.setdefault("voice", "f1")
config.setdefault("speed", 100)
config.setdefault("volume", 100)
config.setdefault("format", "{uname}\u8bf4\u3001 {msg}")
config.setdefault("convert_numbers", True)
if tts_service.running:
try:
@@ -248,7 +245,6 @@ async def api_rules_get(request: web.Request) -> web.Response:
async def api_rules_post(request: web.Request) -> web.Response:
global event_rules
try:
new_rules = await request.json()
except Exception:
@@ -275,7 +271,11 @@ async def api_rules_post(request: web.Request) -> web.Response:
save_rules(merged)
except OSError as e:
return web.json_response({"error": f"Failed to save rules: {e}"}, status=500)
event_rules = merged
# Mutate in place so running handlers (which hold the same dict reference)
# pick up the new rules immediately without restarting TTS.
event_rules.clear()
event_rules.update(merged)
return web.json_response({"status": "saved", "rules": event_rules})