refactor(napcat_adapter): 移除消息缓冲功能及相关配置

删除消息缓冲功能,包括:
- 移除 message_buffer.py 完整实现
- 清理插件配置中的消息缓冲相关字段
- 删除 message_handler.py 中的缓冲处理逻辑
- 移除 send_handler.py 中的缓冲消息ID特殊处理
- 删除不再使用的模板配置文件

此功能因稳定性问题和实际需求较少而被移除,简化了代码结构并减少维护负担。
This commit is contained in:
Windpicker-owo
2025-09-21 18:14:24 +08:00
parent 8621dcdf75
commit f5a3eb2413
5 changed files with 9 additions and 193 deletions

View File

@@ -394,26 +394,7 @@ class NapcatAdapterPlugin(BasePlugin):
"supported_formats": ConfigField(
type=list, default=["mp4", "avi", "mov", "mkv", "flv", "wmv", "webm"], description="支持的视频格式"
),
# 消息缓冲设置
"enable_message_buffer": ConfigField(type=bool, default=True, description="是否启用消息缓冲合并功能"),
"message_buffer_enable_group": ConfigField(type=bool, default=True, description="是否启用群聊消息缓冲合并"),
"message_buffer_enable_private": ConfigField(
type=bool, default=True, description="是否启用私聊消息缓冲合并"
),
"message_buffer_interval": ConfigField(
type=float, default=3.0, description="消息合并间隔时间(秒),在此时间内的连续消息将被合并"
),
"message_buffer_initial_delay": ConfigField(
type=float, default=0.5, description="消息缓冲初始延迟(秒),收到第一条消息后等待此时间开始合并"
),
"message_buffer_max_components": ConfigField(
type=int, default=50, description="单个会话最大缓冲消息组件数量,超过此数量将强制合并"
),
"message_buffer_block_prefixes": ConfigField(
type=list,
default=["/", "!", "", ".", "", "#", "%"],
description="消息缓冲屏蔽前缀,以这些前缀开头的消息不会被缓冲",
),
# 消息缓冲功能已移除
},
}

View File

@@ -6,7 +6,6 @@ from ...CONSTS import PLUGIN_NAME
logger = get_logger("napcat_adapter")
from src.plugin_system.apis import config_api
from ..message_buffer import SimpleMessageBuffer
from ..utils import (
get_group_info,
get_member_info,
@@ -48,20 +47,18 @@ class MessageHandler:
self.server_connection: Server.ServerConnection = None
self.bot_id_list: Dict[int, bool] = {}
self.plugin_config = None
# 初始化简化消息缓冲器,传入回调函数
self.message_buffer = SimpleMessageBuffer(merge_callback=self._send_buffered_message)
# 消息缓冲功能已移除
def set_plugin_config(self, plugin_config: dict):
"""设置插件配置"""
self.plugin_config = plugin_config
# 将配置传递给消息缓冲器
if self.message_buffer:
self.message_buffer.set_plugin_config(plugin_config)
# 消息缓冲功能已移除
async def shutdown(self):
"""关闭消息处理器,清理资源"""
if self.message_buffer:
await self.message_buffer.shutdown()
# 消息缓冲功能已移除
# 消息缓冲功能已移除
async def set_server_connection(self, server_connection: Server.ServerConnection) -> None:
"""设置Napcat连接"""
@@ -305,42 +302,7 @@ class MessageHandler:
logger.warning("处理后消息内容为空")
return None
# 检查是否需要使用消息缓冲
enable_message_buffer = config_api.get_plugin_config(self.plugin_config, "features.enable_message_buffer", True)
if enable_message_buffer:
# 检查消息类型是否启用缓冲
message_type = raw_message.get("message_type")
should_use_buffer = False
if message_type == "group" and config_api.get_plugin_config(
self.plugin_config, "features.message_buffer_enable_group", True
):
should_use_buffer = True
elif message_type == "private" and config_api.get_plugin_config(
self.plugin_config, "features.message_buffer_enable_private", True
):
should_use_buffer = True
if should_use_buffer:
logger.debug(f"尝试缓冲消息,消息类型: {message_type}, 用户: {user_info.user_id}")
# 尝试添加到缓冲器
buffered = await self.message_buffer.add_text_message(
event_data={
"message_type": message_type,
"user_id": user_info.user_id,
"group_id": group_info.group_id if group_info else None,
},
message=raw_message.get("message", []),
original_event={"message_info": message_info, "raw_message": raw_message},
)
if buffered:
logger.debug(f"✅ 文本消息已成功缓冲: {user_info.user_id}")
return None # 缓冲成功,不立即发送
# 如果缓冲失败(消息包含非文本元素),走正常处理流程
logger.debug(f"❌ 消息缓冲失败,包含非文本元素,走正常处理流程: {user_info.user_id}")
# 缓冲失败时继续执行后面的正常处理流程,不要直接返回
# 消息缓冲功能已移除,直接处理消息
logger.debug(f"准备发送消息到MaiBot消息段数量: {len(seg_message)}")
for i, seg in enumerate(seg_message):
@@ -752,7 +714,6 @@ class MessageHandler:
reply_message = [Seg(type="text", data="(获取发言内容失败)")]
sender_info: dict = message_detail.get("sender")
sender_nickname: str = sender_info.get("nickname")
sender_id: str = sender_info.get("user_id")
seg_message: List[Seg] = []
if not sender_nickname:
logger.warning("无法获取被引用的人的昵称,返回默认值")
@@ -1107,55 +1068,7 @@ class MessageHandler:
return None
return response_data.get("messages")
@staticmethod
async def _send_buffered_message(session_id: str, merged_text: str, original_event: Dict[str, Any]):
"""发送缓冲的合并消息"""
try:
# 从原始事件数据中提取信息
message_info = original_event.get("message_info")
raw_message = original_event.get("raw_message")
if not message_info or not raw_message:
logger.error("缓冲消息缺少必要信息")
return
# 创建合并后的消息段 - 将合并的文本转换为Seg格式
from maim_message import Seg
merged_seg = Seg(type="text", data=merged_text)
submit_seg = Seg(type="seglist", data=[merged_seg])
# 创建新的消息ID
import time
new_message_id = f"buffered-{message_info.message_id}-{int(time.time() * 1000)}"
# 更新消息信息
from maim_message import BaseMessageInfo, MessageBase
buffered_message_info = BaseMessageInfo(
platform=message_info.platform,
message_id=new_message_id,
time=time.time(),
user_info=message_info.user_info,
group_info=message_info.group_info,
template_info=message_info.template_info,
format_info=message_info.format_info,
additional_config=message_info.additional_config,
)
# 创建MessageBase
message_base = MessageBase(
message_info=buffered_message_info,
message_segment=submit_seg,
raw_message=raw_message.get("raw_message", ""),
)
logger.debug(f"发送缓冲合并消息到Maibot处理: {session_id}")
await message_send_instance.message_send(message_base)
except Exception as e:
logger.error(f"发送缓冲消息失败: {e}", exc_info=True)
# 消息缓冲功能已移除
message_handler = MessageHandler()

View File

@@ -301,12 +301,6 @@ class SendHandler:
return reply_seg
try:
# 检查是否为缓冲消息ID格式buffered-{original_id}-{timestamp}
if id.startswith("buffered-"):
# 从缓冲消息ID中提取原始消息ID
original_id = id.split("-")[1]
msg_info_response = await self.send_message_to_napcat("get_msg", {"message_id": int(original_id)})
else:
msg_info_response = await self.send_message_to_napcat("get_msg", {"message_id": id})
replied_user_id = None

View File

@@ -1,43 +0,0 @@
# 权限配置文件
# 此文件用于管理群聊和私聊的黑白名单设置,以及聊天相关功能
# 支持热重载,修改后会自动生效
# 群聊权限设置
group_list_type = "whitelist" # 群聊列表类型whitelist白名单或 blacklist黑名单
group_list = [] # 群聊ID列表
# 当 group_list_type 为 whitelist 时,只有列表中的群聊可以使用机器人
# 当 group_list_type 为 blacklist 时,列表中的群聊无法使用机器人
# 示例group_list = [123456789, 987654321]
# 私聊权限设置
private_list_type = "whitelist" # 私聊列表类型whitelist白名单或 blacklist黑名单
private_list = [] # 用户ID列表
# 当 private_list_type 为 whitelist 时,只有列表中的用户可以私聊机器人
# 当 private_list_type 为 blacklist 时,列表中的用户无法私聊机器人
# 示例private_list = [123456789, 987654321]
# 全局禁止设置
ban_user_id = [] # 全局禁止用户ID列表这些用户无法在任何地方使用机器人
ban_qq_bot = false # 是否屏蔽QQ官方机器人消息
# 聊天功能设置
enable_poke = true # 是否启用戳一戳功能
ignore_non_self_poke = false # 是否无视不是针对自己的戳一戳
poke_debounce_seconds = 3 # 戳一戳防抖时间(秒),在指定时间内第二次针对机器人的戳一戳将被忽略
enable_reply_at = true # 是否启用引用回复时艾特用户的功能
reply_at_rate = 0.5 # 引用回复时艾特用户的几率 (0.0 ~ 1.0)
# 视频处理设置
enable_video_analysis = true # 是否启用视频识别功能
max_video_size_mb = 100 # 视频文件最大大小限制MB
download_timeout = 60 # 视频下载超时时间(秒)
supported_formats = ["mp4", "avi", "mov", "mkv", "flv", "wmv", "webm"] # 支持的视频格式
# 消息缓冲设置
enable_message_buffer = true # 是否启用消息缓冲合并功能
message_buffer_enable_group = true # 是否启用群聊消息缓冲合并
message_buffer_enable_private = true # 是否启用私聊消息缓冲合并
message_buffer_interval = 3.0 # 消息合并间隔时间(秒),在此时间内的连续消息将被合并
message_buffer_initial_delay = 0.5 # 消息缓冲初始延迟(秒),收到第一条消息后等待此时间开始合并
message_buffer_max_components = 50 # 单个会话最大缓冲消息组件数量,超过此数量将强制合并
message_buffer_block_prefixes = ["/"] # 消息缓冲屏蔽前缀,以这些前缀开头的消息不会被缓冲

View File

@@ -1,29 +0,0 @@
[inner]
version = "0.2.1" # 版本号
# 请勿修改版本号,除非你知道自己在做什么
[nickname] # 现在没用
nickname = ""
[napcat_server] # Napcat连接的ws服务设置
mode = "reverse" # 连接模式reverse=反向连接(作为服务器), forward=正向连接(作为客户端)
host = "localhost" # 主机地址
port = 8095 # 端口号
url = "" # 正向连接时的完整WebSocket URL如 ws://localhost:8080/ws (仅在forward模式下使用)
access_token = "" # WebSocket 连接的访问令牌,用于身份验证(可选)
heartbeat_interval = 30 # 心跳间隔时间(按秒计)
[maibot_server] # 连接麦麦的ws服务设置
host = "localhost" # 麦麦在.env文件中设置的主机地址即HOST字段
port = 8000 # 麦麦在.env文件中设置的端口即PORT字段
[voice] # 发送语音设置
use_tts = false # 是否使用tts语音请确保你配置了tts并有对应的adapter
[slicing] # WebSocket消息切片设置
max_frame_size = 64 # WebSocket帧的最大大小单位为字节默认64KB
delay_ms = 10 # 切片发送间隔时间,单位为毫秒
[debug]
level = "INFO" # 日志等级DEBUG, INFO, WARNING, ERROR, CRITICAL