feat: user-customizable event voice rules (gift/blind box/enter/follow/like/guard/super chat)
- New event_rules.py: load/save event_rules.json, robust template renderer (missing vars -> empty, empty template -> muted), guard level mapping - danmaku_handler.py: custom SEND_GIFT callback to extract blind_gift_name; implements all event callbacks feeding the TTS queue per user rules - server.py: GET/POST /api/rules, load rules at startup, pass to client - Web UI: 'Event Voice Rules' panel (per-event toggle + template + save) - main.py CLI loads rules; build.py bundles event_rules.json - skip_free_gift option to mute silver free gifts - Rebuild portable zip (83.8 MB)
This commit is contained in:
@@ -85,6 +85,41 @@ python main.py --room-id ROOM_ID [--voice VOICE] [--speed SPEED]
|
||||
| `imd1` | imd1 |
|
||||
| `jgr` | jgr |
|
||||
|
||||
## 事件语音规则
|
||||
|
||||
除弹幕外,礼物、盲盒、进房、上舰、醒目留言等事件也可以自定义语音。规则保存在 `event_rules.json`(首次运行自动生成),可在 Web UI 的 "Event Voice Rules" 面板编辑。
|
||||
|
||||
模板为空字符串 = 该事件静音。`enabled` 控制整类事件开关,`skip_free_gift` 跳过银瓜子免费礼物。
|
||||
|
||||
### 事件与变量
|
||||
|
||||
| 事件 | 变量 |
|
||||
|------|------|
|
||||
| `danmaku` 弹幕 | `{uname}` `{msg}` |
|
||||
| `gift` 普通礼物 | `{viewer_name}` `{gift_name}` `{gift_num}` `{gift_price}` `{gift_coin_type}` |
|
||||
| `blind_box` 盲盒礼物 | `{viewer_name}` `{gift_name}` `{gift_num}` `{blind_box_gift}` |
|
||||
| `enter_room` 进房 | `{viewer_name}` `{user_uid}` |
|
||||
| `follow` 关注 | `{viewer_name}` `{user_uid}` |
|
||||
| `like` 点赞 | `{viewer_name}` `{user_uid}` |
|
||||
| `interact_other` 其他互动 | `{viewer_name}` `{user_uid}` `{interact_type}`(分享/特别关注/互粉) |
|
||||
| `buy_guard` 上舰 | `{ships_viewer_name}` `{ships_level}`(舰长/提督/总督) `{ships_num}` `{ships_price}` |
|
||||
| `guard_toast` 上舰提示 | `{ships_viewer_name}` `{ships_level}` `{guard_days}` `{toast_msg}` |
|
||||
| `super_chat` 醒目留言 | `{viewer_name}` `{super_chat_content}` `{super_chat_price}` `{super_chat_duration}` |
|
||||
|
||||
示例模板:
|
||||
|
||||
```json
|
||||
{
|
||||
"templates": {
|
||||
"gift": "感谢由{viewer_name}投喂的{gift_name}",
|
||||
"blind_box": "感谢由{viewer_name}投喂的{gift_name}爆出了{blind_box_gift}",
|
||||
"enter_room": "欢迎{viewer_name}进入直播间",
|
||||
"buy_guard": "恭喜{ships_viewer_name}成为尊贵的{ships_level}",
|
||||
"super_chat": "{viewer_name}的醒目留言:{super_chat_content}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 技术架构
|
||||
|
||||
```
|
||||
@@ -94,7 +129,7 @@ Bilibili 弹幕 (blivedm)
|
||||
中文→片假名 (pypinyin + 映射表)
|
||||
│
|
||||
▼
|
||||
英文→片假名 (english-to-kana 49K 词库 + 字母拼读兜底)
|
||||
英文→片假名 (english-to-kana 49K 词库 + phonemize G2P 兜底)
|
||||
│
|
||||
▼
|
||||
AquesTalk TTS (aquestalk.js + v86 WASM 模拟)
|
||||
|
||||
Reference in New Issue
Block a user