3.2 KiB
礼物菜单组件
gift_menu
在账户注册时创建一个初始实例,也可以为不同 OBS 场景添加多个实例。每个实例独立保存菜单内容、样式和只读 token;它把直播间礼物或大航海投喂映射为主播提供的内容说明,并输出透明 OBS 浏览器源。
目录与触发器
账户直播监听器调用 Bilibili giftPanel/roomGiftList
并定时刷新按账户隔离的内存目录;控制台读取同一份缓存,也可以主动刷新。接口无需 Cookie,返回礼物 ID、名称、价格、静态图和 GIF。字段说明见
礼物 API 文档。上游失败时保留最后一次成功目录。
菜单项按顺序保存在经过后端校验的组件 settings 中,最多 100 项,支持:
- 指定礼物 ID;事件缺少 ID 时以保存的名称降级匹配;
- 舰长、提督或总督;
- 指定礼物单价,单位为电池,例如
150。
礼物事件先匹配指定礼物 ID(事件缺少 ID 时匹配名称);命中后只高亮具体礼物。如果没有具体礼物命中,才按单价电池数回退匹配。组件只消费
live.gift,不消费连击更新,避免重复触发。Bilibili 接口中的 price 是金瓜子而不是电池;后端统一按
price / 100 换算(例如 100 金瓜子为 1 电池)。盲盒事件优先使用 blind_gift.original_*
的盲盒 ID、名称与原价,不使用开出的奖品价值。对于 protobuf
SEND_GIFT_V2,后端复用同一礼物管线,并优先使用非零 discount_price
作为实际支付单价;transaction_id 用作稳定事件 ID。当前 V2
schema 没有提供盲盒原始 ID/名称,因此这类事件可以按实际电池价值回退匹配,但不能保证命中具体盲盒条目。
OBS 行为
每行横向展示图标、触发条件与主播自定义说明。行数、行高、中文字体、文字亮度、文字比例、装饰线粗细、高亮时长和动效强度均可调整。jade-banquet
仅在内容超过实际视口高度时滚动;渲染器复制三组菜单并在等价位置间无缝归一化,实现最后一行之后紧接第一行。
命中时,青玉主题选择距离当前滚动位置最近的匹配副本,将它平滑对齐到视口第一行并暂停自动滚动;静夜主题则以匹配项为新一页的第一行。两种主题都会播放流金渐变与星花粒子。触发用户名称作为整行前景居中显示,覆盖原礼物图标和说明,并允许长名称换行。青玉滚动器保留亚像素余量,低速设置也保持线性。低性能模式和系统减少动态效果偏好会关闭装饰粒子及分页过渡。舰长、提督和总督使用随前端打包的透明图标。
jade-banquet
复用仓库内已有且记录许可的花枝 SVG。moonlit-water(“静夜曲水”)提供另一种完全透明的分页排版,并与弹幕姬、点歌姬共享透明古风上下细边:每页行数和换页间隔可调,不进行纵向滚动;换页时旧内容从左向右渐隐,同时新内容沿相同方向淡入。礼物触发会以该条目为第一页首行,并以水纹扫光高亮。新增主题必须在
giftMenuThemes.ts 注册稳定 ID、资源键和局部 CSS 变量。