- 将“get_module_logger”替换为新模块“logger_manager”中的“get_logger”,以实现一致的日志设置。 - 移除了单独的日志配置设置,转而采用集中式日志管理。 - 更新了多个文件中的日志初始化方法,包括“config.py”、“change_mood.py”、“change_relationship.py”等,以简化日志记录实践。 - 引入“logger_manager.py”,用于根据模块特定的样式处理日志配置。
129 lines
5.1 KiB
Python
129 lines
5.1 KiB
Python
from ..moods.moods import MoodManager # 导入情绪管理器
|
||
from ...config.config import global_config
|
||
from .message import MessageRecv
|
||
from ..PFC.pfc_manager import PFCManager
|
||
from .chat_stream import chat_manager
|
||
from .only_message_process import MessageProcessor
|
||
|
||
from src.common.logger_manager import get_logger
|
||
from ..heartFC_chat.heartflow_processor import HeartFCProcessor
|
||
from ..utils.prompt_builder import Prompt, global_prompt_manager
|
||
import traceback
|
||
|
||
# 定义日志配置
|
||
|
||
|
||
# 配置主程序日志格式
|
||
logger = get_logger("chat")
|
||
|
||
|
||
class ChatBot:
|
||
def __init__(self):
|
||
self.bot = None # bot 实例引用
|
||
self._started = False
|
||
self.mood_manager = MoodManager.get_instance() # 获取情绪管理器单例
|
||
self.heartflow_processor = HeartFCProcessor() # 新增
|
||
|
||
# 创建初始化PFC管理器的任务,会在_ensure_started时执行
|
||
self.only_process_chat = MessageProcessor()
|
||
self.pfc_manager = PFCManager.get_instance()
|
||
|
||
async def _ensure_started(self):
|
||
"""确保所有任务已启动"""
|
||
if not self._started:
|
||
logger.trace("确保ChatBot所有任务已启动")
|
||
|
||
self._started = True
|
||
|
||
async def _create_pfc_chat(self, message: MessageRecv):
|
||
try:
|
||
chat_id = str(message.chat_stream.stream_id)
|
||
|
||
if global_config.enable_pfc_chatting:
|
||
await self.pfc_manager.get_or_create_conversation(chat_id)
|
||
|
||
except Exception as e:
|
||
logger.error(f"创建PFC聊天失败: {e}")
|
||
|
||
async def message_process(self, message_data: str) -> None:
|
||
"""处理转化后的统一格式消息
|
||
heart_flow模式:使用思维流系统进行回复
|
||
- 包含思维流状态管理
|
||
- 在回复前进行观察和状态更新
|
||
- 回复后更新思维流状态
|
||
- 消息过滤
|
||
- 记忆激活
|
||
- 意愿计算
|
||
- 消息生成和发送
|
||
- 表情包处理
|
||
- 性能计时
|
||
"""
|
||
try:
|
||
# 确保所有任务已启动
|
||
await self._ensure_started()
|
||
|
||
if message_data["message_info"].get("group_info") is not None:
|
||
message_data["message_info"]["group_info"]["group_id"] = str(
|
||
message_data["message_info"]["group_info"]["group_id"]
|
||
)
|
||
message_data["message_info"]["user_info"]["user_id"] = str(
|
||
message_data["message_info"]["user_info"]["user_id"]
|
||
)
|
||
logger.trace(f"处理消息:{str(message_data)[:120]}...")
|
||
message = MessageRecv(message_data)
|
||
groupinfo = message.message_info.group_info
|
||
userinfo = message.message_info.user_info
|
||
|
||
if userinfo.user_id in global_config.ban_user_id:
|
||
logger.debug(f"用户{userinfo.user_id}被禁止回复")
|
||
return
|
||
|
||
if groupinfo != None and groupinfo.group_id not in global_config.talk_allowed_groups:
|
||
logger.trace(f"群{groupinfo.group_id}被禁止回复")
|
||
return
|
||
|
||
if message.message_info.template_info and not message.message_info.template_info.template_default:
|
||
template_group_name = message.message_info.template_info.template_name
|
||
template_items = message.message_info.template_info.template_items
|
||
async with global_prompt_manager.async_message_scope(template_group_name):
|
||
if isinstance(template_items, dict):
|
||
for k in template_items.keys():
|
||
await Prompt.create_async(template_items[k], k)
|
||
print(f"注册{template_items[k]},{k}")
|
||
else:
|
||
template_group_name = None
|
||
|
||
async def preprocess():
|
||
if groupinfo is None:
|
||
if global_config.enable_friend_chat:
|
||
if global_config.enable_pfc_chatting:
|
||
userinfo = message.message_info.user_info
|
||
messageinfo = message.message_info
|
||
# 创建聊天流
|
||
chat = await chat_manager.get_or_create_stream(
|
||
platform=messageinfo.platform,
|
||
user_info=userinfo,
|
||
group_info=groupinfo,
|
||
)
|
||
message.update_chat_stream(chat)
|
||
await self.only_process_chat.process_message(message)
|
||
await self._create_pfc_chat(message)
|
||
else:
|
||
await self.heartflow_processor.process_message(message_data)
|
||
else:
|
||
await self.heartflow_processor.process_message(message_data)
|
||
|
||
if template_group_name:
|
||
async with global_prompt_manager.async_message_scope(template_group_name):
|
||
await preprocess()
|
||
else:
|
||
await preprocess()
|
||
|
||
except Exception as e:
|
||
logger.error(f"预处理消息失败: {e}")
|
||
traceback.print_exc()
|
||
|
||
|
||
# 创建全局ChatBot实例
|
||
chat_bot = ChatBot()
|