feat: 更新组件和数据,增强直播间消息功能

- 在 UpdateNoteContainer.vue 中优化了网格布局。
- 在 UpdateNote.ts 中新增优化记录,支持读弹幕进入直播间消息。
- 在 ReadDanmaku.vue 中新增进入直播间消息模板设置,增强用户体验。
This commit is contained in:
2025-04-26 04:36:27 +08:00
parent d8aed495d9
commit a75f7b6572
3 changed files with 64 additions and 1 deletions

View File

@@ -32,7 +32,10 @@ function renderContent(content: updateNoteItemContentType): VNode | string | und
<NDivider title-placement="left">
{{ item.date }}
</NDivider>
<NGrid x-gap="10">
<NGrid
x-gap="10"
y-gap="10"
>
<template
v-for="note in item.items"
:key="note.title"

View File

@@ -24,6 +24,15 @@ export const updateNotes: updateNoteType[] = [
]
],
},
{
type: 'optimize',
title: '优化',
content: [
[
'读弹幕现在支持进入直播间消息',
]
]
}
]
},
{

View File

@@ -55,6 +55,7 @@ type SpeechSettings = {
scTemplate: string
guardTemplate: string
giftTemplate: string
enterTemplate: string
voiceType: 'local' | 'api'
voiceAPISchemeType: 'http' | 'https'
voiceAPI?: string
@@ -85,6 +86,7 @@ const settings = useStorage<SpeechSettings>('Setting.Speech', {
scTemplate: '{name} 发送了醒目留言: {message}',
guardTemplate: '感谢 {name} 的 {count} 个月 {guard_level}',
giftTemplate: '感谢 {name} 赠送的 {count} 个 {gift_name}',
enterTemplate: '欢迎 {name} 进入直播间',
voiceType: 'local',
voiceAPISchemeType: 'https',
voiceAPI: 'voice.vtsuru.live/voice/bert-vits2?text={{text}}&id=1&format=mp3&streaming=true',
@@ -342,6 +344,9 @@ function onGetEvent(data: EventModel) {
// 不支持表情
return
}
if (data.type == EventDataTypes.Enter && !settings.value.enterTemplate) {
return
}
if (data.type == EventDataTypes.Gift) {
const exist = speakQueue.value.find(
(v) =>
@@ -397,6 +402,12 @@ function getTextFromDanmaku(data: EventModel | undefined) {
}
text = settings.value.giftTemplate
break
case EventDataTypes.Enter:
if (!settings.value.enterTemplate) {
return
}
text = settings.value.enterTemplate
break
}
text = text
.replace(
@@ -499,6 +510,25 @@ function test(type: EventDataTypes) {
ouid: '00000000-0000-0000-0000-000000000000',
})
break
case EventDataTypes.Enter:
forceSpeak({
type: EventDataTypes.Enter,
uname: accountInfo.value?.name ?? '测试用户',
uid: accountInfo.value?.biliId ?? 0,
msg: '',
price: 0,
num: 0,
time: Date.now(),
guard_level: 0,
fans_medal_level: 1,
fans_medal_name: '',
fans_medal_wearing_status: false,
emoji: undefined,
uface: '',
open_id: '00000000-0000-0000-0000-000000000000',
ouid: '00000000-0000-0000-0000-000000000000',
})
break
case EventDataTypes.SC:
forceSpeak({
type: EventDataTypes.SC,
@@ -574,6 +604,7 @@ onMounted(() => {
client.onEvent('sc', onGetEvent)
client.onEvent('guard', onGetEvent)
client.onEvent('gift', onGetEvent)
client.onEvent('enter', onGetEvent)
})
onUnmounted(() => {
clearInterval(speechQueueTimer)
@@ -581,6 +612,7 @@ onUnmounted(() => {
client.offEvent('sc', onGetEvent)
client.offEvent('guard', onGetEvent)
client.offEvent('gift', onGetEvent)
client.offEvent('enter', onGetEvent)
})
</script>
@@ -788,6 +820,11 @@ onUnmounted(() => {
type="success"
size="small"
> SC</NTag>
<NTag
v-else-if="item.data.type == EventDataTypes.Enter"
type="success"
size="small"
> 进入直播间</NTag>
</span>
<NText>
{{ item.data.uname }}
@@ -1079,6 +1116,20 @@ onUnmounted(() => {
测试
</NButton>
</NInputGroup>
<NInputGroup>
<NInputGroupLabel> 进入直播间模板 </NInputGroupLabel>
<NInput
v-model:value="settings.enterTemplate"
placeholder="进入直播间消息"
/>
<NButton
type="info"
:loading="isApiAudioLoading"
@click="test(EventDataTypes.Enter)"
>
测试
</NButton>
</NInputGroup>
</NSpace>
<NDivider> 设置 </NDivider>
<NSpace align="center">