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))