doc:非常清晰的工作流程介绍,你一定看得懂吧
This commit is contained in:
@@ -216,7 +216,7 @@ class HeartFChatting:
|
||||
self.log_prefix = f"[{chat_manager.get_stream_name(self.stream_id) or self.stream_id}]"
|
||||
|
||||
self._initialized = True
|
||||
logger.info(f"麦麦感觉到了,可以开始激情水群{self.log_prefix} ")
|
||||
logger.info(f"麦麦感觉到了,可以开始认真水群{self.log_prefix} ")
|
||||
return True
|
||||
|
||||
async def start(self):
|
||||
@@ -224,7 +224,7 @@ class HeartFChatting:
|
||||
启动 HeartFChatting 的主循环。
|
||||
注意:调用此方法前必须确保已经成功初始化。
|
||||
"""
|
||||
logger.info(f"{self.log_prefix} 开始激情水群(HFC)...")
|
||||
logger.info(f"{self.log_prefix} 开始认真水群(HFC)...")
|
||||
await self._start_loop_if_needed()
|
||||
|
||||
async def _start_loop_if_needed(self):
|
||||
@@ -247,7 +247,7 @@ class HeartFChatting:
|
||||
pass # 忽略取消或超时错误
|
||||
self._loop_task = None # 清理旧任务引用
|
||||
|
||||
logger.info(f"{self.log_prefix} 启动激情水群(HFC)主循环...")
|
||||
logger.info(f"{self.log_prefix} 启动认真水群(HFC)主循环...")
|
||||
# 创建新的循环任务
|
||||
self._loop_task = asyncio.create_task(self._hfc_loop())
|
||||
# 添加完成回调
|
||||
@@ -320,7 +320,7 @@ class HeartFChatting:
|
||||
)
|
||||
|
||||
except asyncio.CancelledError:
|
||||
logger.info(f"{self.log_prefix} HeartFChatting: 麦麦的激情水群(HFC)被取消了")
|
||||
logger.info(f"{self.log_prefix} HeartFChatting: 麦麦的认真水群(HFC)被取消了")
|
||||
except Exception as e:
|
||||
logger.error(f"{self.log_prefix} HeartFChatting: 意外错误: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
@@ -164,14 +164,13 @@ class NormalChat:
|
||||
)
|
||||
self.mood_manager.update_mood_from_emotion(emotion, global_config.mood_intensity_factor)
|
||||
|
||||
async def _find_interested_message(self) -> None:
|
||||
async def _reply_interested_message(self) -> None:
|
||||
"""
|
||||
后台任务方法,轮询当前实例关联chat的兴趣消息
|
||||
通常由start_monitoring_interest()启动
|
||||
"""
|
||||
while True:
|
||||
await asyncio.sleep(1) # 每秒检查一次
|
||||
|
||||
await asyncio.sleep(0.5) # 每秒检查一次
|
||||
# 检查任务是否已被取消
|
||||
if self._chat_task is None or self._chat_task.cancelled():
|
||||
logger.info(f"[{self.stream_name}] 兴趣监控任务被取消或置空,退出")
|
||||
@@ -353,36 +352,27 @@ class NormalChat:
|
||||
async def start_chat(self):
|
||||
"""为此 NormalChat 实例关联的 ChatStream 启动聊天任务(如果尚未运行)。"""
|
||||
if self._chat_task is None or self._chat_task.done():
|
||||
logger.info(f"[{self.stream_name}] 启动聊天任务...")
|
||||
task = asyncio.create_task(self._find_interested_message())
|
||||
task = asyncio.create_task(self._reply_interested_message())
|
||||
task.add_done_callback(lambda t: self._handle_task_completion(t)) # 回调现在是实例方法
|
||||
self._chat_task = task
|
||||
|
||||
# 改为实例方法, 移除 stream_id 参数
|
||||
def _handle_task_completion(self, task: asyncio.Task):
|
||||
"""兴趣监控任务完成时的回调函数。"""
|
||||
# 检查完成的任务是否是当前实例的任务
|
||||
"""任务完成回调处理"""
|
||||
if task is not self._chat_task:
|
||||
logger.warning(f"[{self.stream_name}] 收到一个未知或过时任务的完成回调。")
|
||||
logger.warning(f"[{self.stream_name}] 收到未知任务回调")
|
||||
return
|
||||
|
||||
try:
|
||||
# 检查任务是否因异常而结束
|
||||
exception = task.exception()
|
||||
if exception:
|
||||
logger.error(f"[{self.stream_name}] 兴趣监控任务因异常结束: {exception}")
|
||||
logger.error(traceback.format_exc()) # 记录完整的 traceback
|
||||
# else: # 减少日志
|
||||
# logger.info(f"[{self.stream_name}] 兴趣监控任务正常结束。")
|
||||
if exc := task.exception():
|
||||
logger.error(f"[{self.stream_name}] 任务异常: {exc}")
|
||||
logger.error(traceback.format_exc())
|
||||
except asyncio.CancelledError:
|
||||
logger.info(f"[{self.stream_name}] 兴趣监控任务被取消。")
|
||||
logger.info(f"[{self.stream_name}] 任务已取消")
|
||||
except Exception as e:
|
||||
logger.error(f"[{self.stream_name}] 处理任务完成回调时出错: {e}")
|
||||
logger.error(f"[{self.stream_name}] 回调处理错误: {e}")
|
||||
finally:
|
||||
# 标记任务已完成/移除
|
||||
if self._chat_task is task: # 再次确认是当前任务
|
||||
if self._chat_task is task:
|
||||
self._chat_task = None
|
||||
logger.debug(f"[{self.stream_name}] 聊天任务已被标记为完成/移除。")
|
||||
logger.debug(f"[{self.stream_name}] 任务清理完成")
|
||||
|
||||
# 改为实例方法, 移除 stream_id 参数
|
||||
async def stop_chat(self):
|
||||
|
||||
@@ -311,7 +311,7 @@ async def build_readable_messages(
|
||||
)
|
||||
|
||||
readable_read_mark = translate_timestamp_to_human_readable(read_mark, mode=timestamp_mode)
|
||||
read_mark_line = f"\n--- 以上消息已读 (标记时间: {readable_read_mark}) ---\n--- 以下新消息未读---\n"
|
||||
read_mark_line = f"\n--- 以上消息是你已经思考过的内容已读 (标记时间: {readable_read_mark}) ---\n--- 请关注以下未读的新消息---\n"
|
||||
|
||||
# 组合结果,确保空部分不引入多余的标记或换行
|
||||
if formatted_before and formatted_after:
|
||||
|
||||
Reference in New Issue
Block a user