From 0021cfc4bc297a73857cdec8c7c49baeef5e7ce9 Mon Sep 17 00:00:00 2001 From: Xu Void <55913486+Nothingness-Void@users.noreply.github.com> Date: Thu, 6 Feb 2025 15:28:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=87=E6=BB=A4=E6=8E=89?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #338 新增过滤掉正则表达式内容 --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/Soulter/AstrBot/issues/338?shareId=XXXX-XXXX-XXXX-XXXX). --- astrbot/core/config/default.py | 8 +++++++- astrbot/core/pipeline/result_decorate/stage.py | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/astrbot/core/config/default.py b/astrbot/core/config/default.py index b687adbde..56a7e5c1e 100644 --- a/astrbot/core/config/default.py +++ b/astrbot/core/config/default.py @@ -30,7 +30,8 @@ DEFAULT_CONFIG = { "only_llm_result": True, "interval": "1.5,3.5", "seg_prompt": "", - "regex": ".*?[。?!~…]+|.+$" + "regex": ".*?[。?!~…]+|.+$", + "filter_regex_content": False }, "no_permission_reply": True, }, @@ -229,6 +230,11 @@ CONFIG_METADATA_2 = { "obvious_hint": True, "hint": "用于分隔一段消息。默认情况下会根据句号、问号等标点符号分隔。re.findall(r'', text)", }, + "filter_regex_content": { + "description": "过滤正则表达式内容", + "type": "bool", + "hint": "启用后,分段回复时会过滤掉正则表达式匹配的内容。", + }, }, }, "reply_prefix": { diff --git a/astrbot/core/pipeline/result_decorate/stage.py b/astrbot/core/pipeline/result_decorate/stage.py index 332e1cef4..7c501247a 100644 --- a/astrbot/core/pipeline/result_decorate/stage.py +++ b/astrbot/core/pipeline/result_decorate/stage.py @@ -25,6 +25,7 @@ class ResultDecorateStage: self.only_llm_result = ctx.astrbot_config['platform_settings']['segmented_reply']['only_llm_result'] self.seg_prompt = ctx.astrbot_config['platform_settings']['segmented_reply']['seg_prompt'] self.regex = ctx.astrbot_config['platform_settings']['segmented_reply']['regex'] + self.filter_regex_content = ctx.astrbot_config['platform_settings']['segmented_reply'].get('filter_regex_content', False) async def process(self, event: AstrMessageEvent) -> Union[None, AsyncGenerator[None, None]]: result = event.get_result() @@ -69,6 +70,8 @@ class ResultDecorateStage: continue for seg in split_response: if seg: + if self.filter_regex_content: + seg = re.sub(self.regex, '', seg) new_chain.append(Plain(seg)) else: # 非 Plain 类型的消息段不分段 @@ -126,4 +129,4 @@ class ResultDecorateStage: # 引用回复 if self.reply_with_quote: - result.chain.insert(0, Reply(id=event.message_obj.message_id)) \ No newline at end of file + result.chain.insert(0, Reply(id=event.message_obj.message_id))