47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from src.common.logger import get_module_logger
|
||
from .chat_observer import ChatObserver
|
||
|
||
logger = get_module_logger("waiter")
|
||
|
||
|
||
class Waiter:
|
||
"""等待器,用于等待对话流中的事件"""
|
||
|
||
def __init__(self, stream_id: str):
|
||
self.stream_id = stream_id
|
||
self.chat_observer = ChatObserver.get_instance(stream_id)
|
||
|
||
async def wait(self, timeout: float = 20.0) -> bool:
|
||
"""等待用户回复或超时
|
||
|
||
Args:
|
||
timeout: 超时时间(秒)
|
||
|
||
Returns:
|
||
bool: 如果因为超时返回则为True,否则为False
|
||
"""
|
||
try:
|
||
message_before = self.chat_observer.get_last_message()
|
||
|
||
# 等待新消息
|
||
logger.debug(f"等待新消息,超时时间: {timeout}秒")
|
||
|
||
is_timeout = await self.chat_observer.wait_for_update(timeout=timeout)
|
||
if is_timeout:
|
||
logger.debug("等待超时,没有收到新消息")
|
||
return True
|
||
|
||
# 检查是否是新消息
|
||
message_after = self.chat_observer.get_last_message()
|
||
if message_before and message_after and message_before.get("message_id") == message_after.get("message_id"):
|
||
# 如果消息ID相同,说明没有新消息
|
||
logger.debug("没有收到新消息")
|
||
return True
|
||
|
||
logger.debug("收到新消息")
|
||
return False
|
||
|
||
except Exception as e:
|
||
logger.error(f"等待时出错: {str(e)}")
|
||
return True
|