diff --git a/src/chat/replyer/default_generator.py b/src/chat/replyer/default_generator.py index b36ee8108..b9670452d 100644 --- a/src/chat/replyer/default_generator.py +++ b/src/chat/replyer/default_generator.py @@ -26,7 +26,7 @@ from src.chat.express.expression_selector import expression_selector from src.chat.memory_system.memory_activator import MemoryActivator from src.chat.memory_system.instant_memory import InstantMemory from src.mood.mood_manager import mood_manager -from src.person_info.person_info import Person +from src.person_info.person_info import Person, get_person_id_by_person_name from src.plugin_system.base.component_types import ActionInfo, EventType from src.plugin_system.apis import llm_api @@ -301,8 +301,8 @@ class DefaultReplyer: return "" # 获取用户ID - person = Person(platform=self.chat_stream.platform, user_id=sender) - person_id = person.person_id + person_id = get_person_id_by_person_name(sender) + person = Person(person_id=person_id) if not person_id: logger.warning(f"未找到用户 {sender} 的ID,跳过信息提取") return f"你完全不认识{sender},不理解ta的相关信息。" diff --git a/src/person_info/person_info.py b/src/person_info/person_info.py index 4cbbb0ffa..786206d23 100644 --- a/src/person_info/person_info.py +++ b/src/person_info/person_info.py @@ -154,7 +154,7 @@ class Person: if record.likeness_confidence is not None: self.likeness_confidence = float(record.likeness_confidence) - logger.info(f"已从数据库加载用户 {self.person_id} 的信息") + logger.debug(f"已从数据库加载用户 {self.person_id} 的信息") else: self.sync_to_database() logger.info(f"用户 {self.person_id} 在数据库中不存在,使用默认值并创建") @@ -308,10 +308,7 @@ class PersonInfoManager: logger.debug(f"已加载 {len(self.person_name_list)} 个用户名称 (Peewee)") except Exception as e: logger.error(f"从 Peewee 加载 person_name_list 失败: {e}") - - def get_person(self, platform: str, user_id: Union[int, str]) -> Person: - person = Person(platform, user_id) - return person + @staticmethod diff --git a/src/person_info/relationship_manager.py b/src/person_info/relationship_manager.py index 0405e4d41..bc3e8d28c 100644 --- a/src/person_info/relationship_manager.py +++ b/src/person_info/relationship_manager.py @@ -125,8 +125,6 @@ class RelationshipManager: ) async def get_points(self, - person_name: str, - nickname: str, readable_messages: str, name_mapping: Dict[str, str], timestamp: float, @@ -138,8 +136,8 @@ class RelationshipManager: "relation_points", bot_name = global_config.bot.nickname, alias_str = alias_str, - person_name = person_name, - nickname = nickname, + person_name = person.person_name, + nickname = person.nickname, current_time = current_time, readable_messages = readable_messages) @@ -156,7 +154,7 @@ class RelationshipManager: logger.info(f"points: {points}") if not points: - logger.info(f"对 {person_name} 没啥新印象") + logger.info(f"对 {person.person_name} 没啥新印象") return # 解析JSON并转换为元组列表 @@ -190,7 +188,7 @@ class RelationshipManager: points_list.append(point) if points_list or discarded_count > 0: - logger_str = f"了解了有关{person_name}的新印象:\n" + logger_str = f"了解了有关{person.person_name}的新印象:\n" for point in points_list: logger_str += f"{point[0]},重要性:{point[1]}\n" if discarded_count > 0: @@ -238,7 +236,7 @@ class RelationshipManager: person.points = remaining_points return person - async def get_attitude_to_me(self, person_name, nickname, readable_messages, timestamp, person: Person): + async def get_attitude_to_me(self, readable_messages, timestamp, person: Person): alias_str = ", ".join(global_config.bot.alias_names) current_time = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S") # 解析当前态度值 @@ -249,8 +247,8 @@ class RelationshipManager: "attitude_to_me_prompt", bot_name = global_config.bot.nickname, alias_str = alias_str, - person_name = person_name, - nickname = nickname, + person_name = person.person_name, + nickname = person.nickname, readable_messages = readable_messages, current_time = current_time, ) @@ -284,7 +282,7 @@ class RelationshipManager: return person - async def get_neuroticism(self, person_name, nickname, readable_messages, timestamp, person: Person): + async def get_neuroticism(self, readable_messages, timestamp, person: Person): alias_str = ", ".join(global_config.bot.alias_names) current_time = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S") # 解析当前态度值 @@ -295,8 +293,8 @@ class RelationshipManager: "neuroticism_prompt", bot_name = global_config.bot.nickname, alias_str = alias_str, - person_name = person_name, - nickname = nickname, + person_name = person.person_name, + nickname = person.nickname, readable_messages = readable_messages, current_time = current_time, ) @@ -364,12 +362,12 @@ class RelationshipManager: continue # 跳过目标用户 - if msg_person.person_name == person_name: + if msg_person.person_name == person_name and msg_person.person_name is not None: name_mapping[msg_person.person_name] = f"{person_name}" continue # 其他用户映射 - if msg_person.person_name not in name_mapping: + if msg_person.person_name not in name_mapping and msg_person.person_name is not None: if current_user > "Z": current_user = "A" user_count += 1 @@ -382,13 +380,16 @@ class RelationshipManager: for original_name, mapped_name in name_mapping.items(): # print(f"original_name: {original_name}, mapped_name: {mapped_name}") - readable_messages = readable_messages.replace(f"{original_name}", f"{mapped_name}") + # 确保 original_name 和 mapped_name 都不为 None + if original_name is not None and mapped_name is not None: + readable_messages = readable_messages.replace(f"{original_name}", f"{mapped_name}") print(name_mapping) - person = await self.get_points(person_name, nickname, readable_messages, name_mapping, timestamp, person) - person = await self.get_attitude_to_me(person_name, nickname, readable_messages, timestamp, person) - person = await self.get_neuroticism(person_name, nickname, readable_messages, timestamp, person) + person = await self.get_points( + readable_messages=readable_messages, name_mapping=name_mapping, timestamp=timestamp, person=person) + person = await self.get_attitude_to_me(readable_messages=readable_messages, timestamp=timestamp, person=person) + person = await self.get_neuroticism(readable_messages=readable_messages, timestamp=timestamp, person=person) person.know_times = know_times + 1 person.last_know = timestamp