86 lines
3.1 KiB
Python
86 lines
3.1 KiB
Python
from src.common.logger import get_module_logger
|
||
from .chat_observer import ChatObserver
|
||
from .conversation_info import ConversationInfo
|
||
from src.individuality.individuality import Individuality
|
||
from ...config.config import global_config
|
||
import time
|
||
import asyncio
|
||
|
||
logger = get_module_logger("waiter")
|
||
|
||
|
||
class Waiter:
|
||
"""快 速 等 待"""
|
||
|
||
def __init__(self, stream_id: str):
|
||
self.chat_observer = ChatObserver.get_instance(stream_id)
|
||
self.personality_info = Individuality.get_instance().get_prompt(type="personality", x_person=2, level=2)
|
||
self.name = global_config.BOT_NICKNAME
|
||
|
||
self.wait_accumulated_time = 0
|
||
|
||
async def wait(self, conversation_info: ConversationInfo) -> bool:
|
||
"""等待
|
||
|
||
Returns:
|
||
bool: 是否超时(True表示超时)
|
||
"""
|
||
# 使用当前时间作为等待开始时间
|
||
wait_start_time = time.time()
|
||
self.chat_observer.waiting_start_time = wait_start_time # 设置等待开始时间
|
||
|
||
while True:
|
||
# 检查是否有新消息
|
||
if self.chat_observer.new_message_after(wait_start_time):
|
||
logger.info("等待结束,收到新消息")
|
||
return False
|
||
|
||
# 检查是否超时
|
||
if time.time() - wait_start_time > 300:
|
||
self.wait_accumulated_time += 300
|
||
|
||
logger.info("等待超过300秒,结束对话")
|
||
wait_goal = {
|
||
"goal": f"你等待了{self.wait_accumulated_time / 60}分钟,思考接下来要做什么",
|
||
"reason": "对方很久没有回复你的消息了",
|
||
}
|
||
conversation_info.goal_list.append(wait_goal)
|
||
print(f"添加目标: {wait_goal}")
|
||
|
||
return True
|
||
|
||
await asyncio.sleep(1)
|
||
logger.info("等待中...")
|
||
|
||
async def wait_listening(self, conversation_info: ConversationInfo) -> bool:
|
||
"""等待倾听
|
||
|
||
Returns:
|
||
bool: 是否超时(True表示超时)
|
||
"""
|
||
# 使用当前时间作为等待开始时间
|
||
wait_start_time = time.time()
|
||
self.chat_observer.waiting_start_time = wait_start_time # 设置等待开始时间
|
||
|
||
while True:
|
||
# 检查是否有新消息
|
||
if self.chat_observer.new_message_after(wait_start_time):
|
||
logger.info("等待结束,收到新消息")
|
||
return False
|
||
|
||
# 检查是否超时
|
||
if time.time() - wait_start_time > 300:
|
||
self.wait_accumulated_time += 300
|
||
logger.info("等待超过300秒,结束对话")
|
||
wait_goal = {
|
||
"goal": f"你等待了{self.wait_accumulated_time / 60}分钟,思考接下来要做什么",
|
||
"reason": "对方话说一半消失了,很久没有回复",
|
||
}
|
||
conversation_info.goal_list.append(wait_goal)
|
||
print(f"添加目标: {wait_goal}")
|
||
|
||
return True
|
||
|
||
await asyncio.sleep(1)
|
||
logger.info("等待中...")
|