diff --git a/liveMan.py b/liveMan.py index 9dcb7aa..abf5756 100644 --- a/liveMan.py +++ b/liveMan.py @@ -12,7 +12,7 @@ import traceback import urllib.parse from contextlib import contextmanager from unittest.mock import patch - +from datetime import datetime import httpx import requests import websocket @@ -415,6 +415,15 @@ class DouyinLiveWebReply: self.live_chat_config.insert_message(message, _type, batch_number) logger.info(f'入库文案:{_type} | {message}') + + def text_to_adio_cost_predict(self, text): + """ + 计算文本转语音的耗时 + :param text: 文本 + :return: 耗时 单位秒 + """ + return len(text)/5 + def __call__(self): """ 优先从用户交互队列中取提示词,如果没有用户交互的数据,则输出系统提示词 @@ -424,17 +433,18 @@ class DouyinLiveWebReply: logger.info(f'livetalking address -> {self.live_chat_config.livetalking_address}') logger.info(f'ollama_address -> {self.live_chat_config.ollama_address}') + # 下次调用post_to_human的时间 + next_to_human_call_time = None + while True: try: - is_speaking = self.config['is_speaking'] - if is_speaking: + # next_to_human_call_time大于当前时间,立即调用 + call_immediate = next_to_human_call_time is None or time.time() >= next_to_human_call_time + if not call_immediate: prompt_data = self.queue.get(False) if prompt_data is not None: product_name, product_specification, product_description = self.live_chat_config.product_info - # 兼容老/新两种数据结构: - # 老结构: (message_type, prompt, live_chat) - # 新结构: (message_type, prompt, live_chat, user_name) if isinstance(prompt_data, tuple) and len(prompt_data) == 4: message_type, prompt, live_chat, sender_name = prompt_data else: @@ -500,6 +510,7 @@ class DouyinLiveWebReply: reply_message, from_user = self.response_queue.get() reply_message = self.reply_message_postprocess(reply_message) if from_user: + reply_message = f"{from_user}哥哥,{reply_message}" logger.info(f"开始播放回复弹幕({from_user}):{reply_message}") else: logger.info(f"开始播放回复弹幕:{reply_message}") @@ -519,9 +530,12 @@ class DouyinLiveWebReply: reply_message, _id = precedence_message self.live_chat_config.flush_precedence_reply_message() logger.info(f"开始播放系统文案:{reply_message}") - + cost = self.text_to_adio_cost_predict(reply_message) + logger.info(f'文本:{reply_message}预计算出的语音时长:{cost}秒') + next_to_human_call_time = time.time() + cost + formatted_time = datetime.fromtimestamp(next_to_human_call_time).strftime("%Y-%m-%d %H:%M:%S") + logger.info(f'预计在{formatted_time}发送下一段语音') self.post_to_human_sync(reply_message) - time.sleep(1) except Exception: logger.error(traceback.format_exc())