mirror of
https://github.com/Megghy/vtsuru.live.git
synced 2025-12-07 02:46:55 +08:00
feat: 更新组件和数据,增强直播间消息功能
- 在 UpdateNoteContainer.vue 中优化了网格布局。 - 在 UpdateNote.ts 中新增优化记录,支持读弹幕进入直播间消息。 - 在 ReadDanmaku.vue 中新增进入直播间消息模板设置,增强用户体验。
This commit is contained in:
@@ -32,7 +32,10 @@ function renderContent(content: updateNoteItemContentType): VNode | string | und
|
|||||||
<NDivider title-placement="left">
|
<NDivider title-placement="left">
|
||||||
{{ item.date }}
|
{{ item.date }}
|
||||||
</NDivider>
|
</NDivider>
|
||||||
<NGrid x-gap="10">
|
<NGrid
|
||||||
|
x-gap="10"
|
||||||
|
y-gap="10"
|
||||||
|
>
|
||||||
<template
|
<template
|
||||||
v-for="note in item.items"
|
v-for="note in item.items"
|
||||||
:key="note.title"
|
:key="note.title"
|
||||||
|
|||||||
@@ -24,6 +24,15 @@ export const updateNotes: updateNoteType[] = [
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: 'optimize',
|
||||||
|
title: '优化',
|
||||||
|
content: [
|
||||||
|
[
|
||||||
|
'读弹幕现在支持进入直播间消息',
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ type SpeechSettings = {
|
|||||||
scTemplate: string
|
scTemplate: string
|
||||||
guardTemplate: string
|
guardTemplate: string
|
||||||
giftTemplate: string
|
giftTemplate: string
|
||||||
|
enterTemplate: string
|
||||||
voiceType: 'local' | 'api'
|
voiceType: 'local' | 'api'
|
||||||
voiceAPISchemeType: 'http' | 'https'
|
voiceAPISchemeType: 'http' | 'https'
|
||||||
voiceAPI?: string
|
voiceAPI?: string
|
||||||
@@ -85,6 +86,7 @@ const settings = useStorage<SpeechSettings>('Setting.Speech', {
|
|||||||
scTemplate: '{name} 发送了醒目留言: {message}',
|
scTemplate: '{name} 发送了醒目留言: {message}',
|
||||||
guardTemplate: '感谢 {name} 的 {count} 个月 {guard_level}',
|
guardTemplate: '感谢 {name} 的 {count} 个月 {guard_level}',
|
||||||
giftTemplate: '感谢 {name} 赠送的 {count} 个 {gift_name}',
|
giftTemplate: '感谢 {name} 赠送的 {count} 个 {gift_name}',
|
||||||
|
enterTemplate: '欢迎 {name} 进入直播间',
|
||||||
voiceType: 'local',
|
voiceType: 'local',
|
||||||
voiceAPISchemeType: 'https',
|
voiceAPISchemeType: 'https',
|
||||||
voiceAPI: 'voice.vtsuru.live/voice/bert-vits2?text={{text}}&id=1&format=mp3&streaming=true',
|
voiceAPI: 'voice.vtsuru.live/voice/bert-vits2?text={{text}}&id=1&format=mp3&streaming=true',
|
||||||
@@ -342,6 +344,9 @@ function onGetEvent(data: EventModel) {
|
|||||||
// 不支持表情
|
// 不支持表情
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (data.type == EventDataTypes.Enter && !settings.value.enterTemplate) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (data.type == EventDataTypes.Gift) {
|
if (data.type == EventDataTypes.Gift) {
|
||||||
const exist = speakQueue.value.find(
|
const exist = speakQueue.value.find(
|
||||||
(v) =>
|
(v) =>
|
||||||
@@ -397,6 +402,12 @@ function getTextFromDanmaku(data: EventModel | undefined) {
|
|||||||
}
|
}
|
||||||
text = settings.value.giftTemplate
|
text = settings.value.giftTemplate
|
||||||
break
|
break
|
||||||
|
case EventDataTypes.Enter:
|
||||||
|
if (!settings.value.enterTemplate) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
text = settings.value.enterTemplate
|
||||||
|
break
|
||||||
}
|
}
|
||||||
text = text
|
text = text
|
||||||
.replace(
|
.replace(
|
||||||
@@ -499,6 +510,25 @@ function test(type: EventDataTypes) {
|
|||||||
ouid: '00000000-0000-0000-0000-000000000000',
|
ouid: '00000000-0000-0000-0000-000000000000',
|
||||||
})
|
})
|
||||||
break
|
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:
|
case EventDataTypes.SC:
|
||||||
forceSpeak({
|
forceSpeak({
|
||||||
type: EventDataTypes.SC,
|
type: EventDataTypes.SC,
|
||||||
@@ -574,6 +604,7 @@ onMounted(() => {
|
|||||||
client.onEvent('sc', onGetEvent)
|
client.onEvent('sc', onGetEvent)
|
||||||
client.onEvent('guard', onGetEvent)
|
client.onEvent('guard', onGetEvent)
|
||||||
client.onEvent('gift', onGetEvent)
|
client.onEvent('gift', onGetEvent)
|
||||||
|
client.onEvent('enter', onGetEvent)
|
||||||
})
|
})
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
clearInterval(speechQueueTimer)
|
clearInterval(speechQueueTimer)
|
||||||
@@ -581,6 +612,7 @@ onUnmounted(() => {
|
|||||||
client.offEvent('sc', onGetEvent)
|
client.offEvent('sc', onGetEvent)
|
||||||
client.offEvent('guard', onGetEvent)
|
client.offEvent('guard', onGetEvent)
|
||||||
client.offEvent('gift', onGetEvent)
|
client.offEvent('gift', onGetEvent)
|
||||||
|
client.offEvent('enter', onGetEvent)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -788,6 +820,11 @@ onUnmounted(() => {
|
|||||||
type="success"
|
type="success"
|
||||||
size="small"
|
size="small"
|
||||||
> SC</NTag>
|
> SC</NTag>
|
||||||
|
<NTag
|
||||||
|
v-else-if="item.data.type == EventDataTypes.Enter"
|
||||||
|
type="success"
|
||||||
|
size="small"
|
||||||
|
> 进入直播间</NTag>
|
||||||
</span>
|
</span>
|
||||||
<NText>
|
<NText>
|
||||||
{{ item.data.uname }}
|
{{ item.data.uname }}
|
||||||
@@ -1079,6 +1116,20 @@ onUnmounted(() => {
|
|||||||
测试
|
测试
|
||||||
</NButton>
|
</NButton>
|
||||||
</NInputGroup>
|
</NInputGroup>
|
||||||
|
<NInputGroup>
|
||||||
|
<NInputGroupLabel> 进入直播间模板 </NInputGroupLabel>
|
||||||
|
<NInput
|
||||||
|
v-model:value="settings.enterTemplate"
|
||||||
|
placeholder="进入直播间消息"
|
||||||
|
/>
|
||||||
|
<NButton
|
||||||
|
type="info"
|
||||||
|
:loading="isApiAudioLoading"
|
||||||
|
@click="test(EventDataTypes.Enter)"
|
||||||
|
>
|
||||||
|
测试
|
||||||
|
</NButton>
|
||||||
|
</NInputGroup>
|
||||||
</NSpace>
|
</NSpace>
|
||||||
<NDivider> 设置 </NDivider>
|
<NDivider> 设置 </NDivider>
|
||||||
<NSpace align="center">
|
<NSpace align="center">
|
||||||
|
|||||||
Reference in New Issue
Block a user