From 025ebe476d1d018a02aa17b6ede0490c70b0f3e3 Mon Sep 17 00:00:00 2001 From: WJG Date: Mon, 3 Jun 2024 09:30:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B0=8F=E7=88=B1?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E6=97=A0=E6=B3=95=E7=BB=88=E6=AD=A2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/speaker/base.ts | 20 ++++++++++++++++++++ tests/index.ts | 4 ++-- tests/migpt.ts | 1 + tests/speaker.ts | 2 +- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/services/speaker/base.ts b/src/services/speaker/base.ts index 08ac417..baf6a15 100644 --- a/src/services/speaker/base.ts +++ b/src/services/speaker/base.ts @@ -110,6 +110,14 @@ export class BaseSpeaker { audioBeep?: string; responding = false; + /** + * 检测是否有新消息 + * + * 有新消息产生时,旧的回复会终止 + */ + checkIfHasNewMsg() { + return { hasNewMsg: () => false, noNewMsg: () => true }; + } async response(options: { tts?: TTSProvider; text?: string; @@ -118,6 +126,7 @@ export class BaseSpeaker { speaker?: string; keepAlive?: boolean; playSFX?: boolean; + hasNewMsg?: () => boolean; }) { let { text, @@ -127,6 +136,7 @@ export class BaseSpeaker { keepAlive = false, tts = this.tts, } = options ?? {}; + options.hasNewMsg ??= this.checkIfHasNewMsg().hasNewMsg; const doubaoTTS = process.env.TTS_DOUBAO; if (!doubaoTTS) { @@ -203,6 +213,7 @@ export class BaseSpeaker { speaker?: string; keepAlive?: boolean; playSFX?: boolean; + hasNewMsg?: () => boolean; }) { let { text, @@ -214,6 +225,14 @@ export class BaseSpeaker { speaker = this._defaultSpeaker, } = options ?? {}; + const hasNewMsg = () => { + const flag = options.hasNewMsg?.(); + if (this.debug) { + this.logger.debug("checkIfHasNewMsg:" + flag); + } + return flag; + }; + const ttsText = text?.replace(/\n\s*\n/g, "\n")?.trim(); const ttsNotXiaoai = !stream && !!text && !audio && tts !== "xiaoai"; playSFX = ttsNotXiaoai && playSFX; @@ -258,6 +277,7 @@ export class BaseSpeaker { playing = { ...playing, ...res }; } if ( + hasNewMsg() || !this.responding || // 有新消息 (playing.status === "playing" && playing.media_type) // 小爱自己开始播放音乐 ) { diff --git a/tests/index.ts b/tests/index.ts index ea6ab66..fa7c029 100644 --- a/tests/index.ts +++ b/tests/index.ts @@ -10,11 +10,11 @@ import { testMiGPT } from "./migpt"; async function main() { // println(kBannerASCII); // testDB(); - testSpeaker(); + // testSpeaker(); // testOpenAI(); // testMyBot(); // testLog(); - // testMiGPT(); + testMiGPT(); } main(); diff --git a/tests/migpt.ts b/tests/migpt.ts index 5c11875..b12197d 100644 --- a/tests/migpt.ts +++ b/tests/migpt.ts @@ -18,6 +18,7 @@ export async function testMiGPT() { userId: process.env.MI_USER!, password: process.env.MI_PASS!, did: process.env.MI_DID, + debug: true, }, bot: { name: "傻妞", diff --git a/tests/speaker.ts b/tests/speaker.ts index 2720674..b6da93c 100644 --- a/tests/speaker.ts +++ b/tests/speaker.ts @@ -11,7 +11,7 @@ export async function testSpeaker() { debug: true, }); await speaker.initMiServices(); - await testAISpeakerStatus(speaker); + // await testAISpeakerStatus(speaker); // await testSpeakerResponse(speaker); await testSpeakerStreamResponse(speaker); // await testSpeakerGetMessages(speaker);