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:
+8
-13
@@ -20,8 +20,6 @@ from event_rules import (
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DANMAKU_FORMAT = "{uname}\u8bf4\u3001 {msg}"
|
||||
|
||||
INTERACT_TYPE_NAMES = {
|
||||
3: "\u5206\u4eab", 4: "\u7279\u522b\u5173\u6ce8", 5: "\u4e92\u7c89",
|
||||
}
|
||||
@@ -32,12 +30,10 @@ class DanmakuHandler(blivedm.BaseHandler):
|
||||
|
||||
_CMD_CALLBACK_DICT = blivedm.BaseHandler._CMD_CALLBACK_DICT.copy()
|
||||
|
||||
def __init__(self, queue: asyncio.Queue, rules: dict | None = None,
|
||||
message_format: str = DANMAKU_FORMAT):
|
||||
def __init__(self, queue: asyncio.Queue, rules: dict | None = None):
|
||||
super().__init__()
|
||||
self._queue = queue
|
||||
self._rules = rules or dict(DEFAULT_RULES)
|
||||
self._message_format = message_format
|
||||
self._count = 0
|
||||
|
||||
# ── custom SEND_GIFT callback to capture blind-gift info ──────────
|
||||
@@ -62,11 +58,12 @@ class DanmakuHandler(blivedm.BaseHandler):
|
||||
def _on_danmaku(self, client: blivedm.BLiveClient, message: DanmakuMessage) -> None:
|
||||
if not message.msg.strip():
|
||||
return
|
||||
text = self._message_format.format(
|
||||
uname=message.uname,
|
||||
msg=message.msg,
|
||||
uid=message.uid,
|
||||
)
|
||||
text = event_text(self._rules, "danmaku",
|
||||
uname=message.uname,
|
||||
msg=message.msg,
|
||||
uid=message.uid)
|
||||
if not text:
|
||||
return
|
||||
self._count += 1
|
||||
if self._count % 20 == 1:
|
||||
logger.info("Danmaku #%d: %s", self._count, text)
|
||||
@@ -173,13 +170,11 @@ class DanmakuClient:
|
||||
queue: asyncio.Queue,
|
||||
cookies: Optional[dict[str, str]] = None,
|
||||
rules: dict | None = None,
|
||||
message_format: str = DANMAKU_FORMAT,
|
||||
):
|
||||
self._room_id = room_id
|
||||
self._queue = queue
|
||||
self._cookies = cookies
|
||||
self._rules = rules or dict(DEFAULT_RULES)
|
||||
self._message_format = message_format
|
||||
self._client: Optional[blivedm.BLiveClient] = None
|
||||
self._session: Optional["aiohttp.ClientSession"] = None
|
||||
|
||||
@@ -187,7 +182,7 @@ class DanmakuClient:
|
||||
import aiohttp
|
||||
self._session = await build_danmaku_session(self._cookies)
|
||||
self._client = blivedm.BLiveClient(self._room_id, session=self._session)
|
||||
handler = DanmakuHandler(self._queue, self._rules, self._message_format)
|
||||
handler = DanmakuHandler(self._queue, self._rules)
|
||||
self._client.set_handler(handler)
|
||||
self._client.start()
|
||||
logger.info("Connected to room %d", self._room_id)
|
||||
|
||||
Reference in New Issue
Block a user