From 02643d729e1ad5d35e32247e4ab2a690f698f376 Mon Sep 17 00:00:00 2001 From: meng_xi_pan <1903647908@qq.com> Date: Sat, 5 Apr 2025 01:00:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=9D=A1=E4=BB=B6=E6=9B=B4?= =?UTF-8?q?=E4=B8=A5=E6=A0=BC=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/chat/message_buffer.py | 17 ++++++++++++++--- src/plugins/config/config.py | 3 +++ src/plugins/person_info/person_info.py | 4 ++-- template/bot_config_template.toml | 3 ++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/plugins/chat/message_buffer.py b/src/plugins/chat/message_buffer.py index e139a122b..ccfcf81cc 100644 --- a/src/plugins/chat/message_buffer.py +++ b/src/plugins/chat/message_buffer.py @@ -9,6 +9,7 @@ from typing import Dict from collections import OrderedDict import random import time +from ..config.config import global_config logger = get_module_logger("message_buffer") @@ -32,6 +33,11 @@ class MessageBuffer: async def start_caching_messages(self, message:MessageRecv): """添加消息,启动缓冲""" + if not global_config.message_buffer: + person_id = person_info_manager.get_person_id(message.message_info.user_info.platform, + message.message_info.user_info.user_id) + asyncio.create_task(self.save_message_interval(person_id, message.message_info)) + return person_id_ = self.get_person_id_(message.message_info.platform, message.message_info.user_info.user_id, message.message_info.group_info.group_id) @@ -98,6 +104,8 @@ class MessageBuffer: async def query_buffer_result(self, message:MessageRecv) -> bool: """查询缓冲结果,并清理""" + if not global_config.message_buffer: + return True person_id_ = self.get_person_id_(message.message_info.platform, message.message_info.user_info.user_id, message.message_info.group_info.group_id) @@ -122,6 +130,7 @@ class MessageBuffer: combined_text = [] found = False type = "text" + is_update = True for msg_id, msg in self.buffer_pool[person_id_].items(): if msg_id == message.message_info.message_id: found = True @@ -133,14 +142,16 @@ class MessageBuffer: elif msg.result == "F": # 收集F消息的文本内容 if (hasattr(msg.message, 'processed_plain_text') - and msg.message.message_segment.type == "text" and msg.message.processed_plain_text): - combined_text.append(msg.message.processed_plain_text) + if msg.message.message_segment.type == "text": + combined_text.append(msg.message.processed_plain_text) + elif msg.message.message_segment.type != "text": + is_update = False elif msg.result == "U": logger.debug(f"异常未处理信息id: {msg.message.message_info.message_id}") # 更新当前消息的processed_plain_text - if combined_text and combined_text[0] != message.processed_plain_text: + if combined_text and combined_text[0] != message.processed_plain_text and is_update: if type == "text": message.processed_plain_text = "".join(combined_text) logger.debug(f"整合了{len(combined_text)-1}条F消息的内容到当前消息") diff --git a/src/plugins/config/config.py b/src/plugins/config/config.py index 2422b0d1f..bf06b8947 100644 --- a/src/plugins/config/config.py +++ b/src/plugins/config/config.py @@ -159,6 +159,7 @@ class BotConfig: emoji_chance: float = 0.2 # 发送表情包的基础概率 thinking_timeout: int = 120 # 思考时间 max_response_length: int = 1024 # 最大回复长度 + message_buffer: bool = True # 消息缓冲器 ban_words = set() ban_msgs_regex = set() @@ -502,6 +503,8 @@ class BotConfig: if config.INNER_VERSION in SpecifierSet(">=0.0.11"): config.max_response_length = msg_config.get("max_response_length", config.max_response_length) + if config.INNER_VERSION in SpecifierSet(">=1.1.4"): + config.message_buffer = msg_config.get("message_buffer", config.message_buffer) def memory(parent: dict): memory_config = parent["memory"] diff --git a/src/plugins/person_info/person_info.py b/src/plugins/person_info/person_info.py index 9bb5408e4..543fdb3ee 100644 --- a/src/plugins/person_info/person_info.py +++ b/src/plugins/person_info/person_info.py @@ -242,7 +242,7 @@ class PersonInfoManager: time_interval = [] for t1, t2 in zip(msg_interval_list_, msg_interval_list_[1:]): delta = t2 - t1 - if delta < 6000 and delta > 0: # 小于6秒 + if delta < 8000 and delta > 0: # 小于8秒 time_interval.append(delta) if len(time_interval) > 30: @@ -263,7 +263,7 @@ class PersonInfoManager: time_series.plot(kind='kde', color='mediumpurple', linewidth=1, label='Density') plt.grid(True, alpha=0.2) - plt.xlim(0, 6000) + plt.xlim(0, 8000) plt.title(f"Message Interval Distribution (User: {person_id[:8]}...)") plt.xlabel("Interval (ms)") plt.ylabel("Density") diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index 7df6a6e8e..97a06b700 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "1.1.3" +version = "1.1.4" #以下是给开发人员阅读的,一般用户不需要阅读 @@ -72,6 +72,7 @@ max_context_size = 12 # 麦麦获得的上文数量,建议12,太短太长都 emoji_chance = 0.2 # 麦麦使用表情包的概率 thinking_timeout = 60 # 麦麦最长思考时间,超过这个时间的思考会放弃 max_response_length = 256 # 麦麦回答的最大token数 +message_buffer = true # 启用消息缓冲器? ban_words = [ # "403","张三" ]