From e2112b356883d804b857084ea508c94604c33669 Mon Sep 17 00:00:00 2001 From: lymangos Date: Tue, 6 Jan 2026 20:18:43 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=9B=BE=E7=89=87=E6=9C=AA=E8=A2=AB=E8=BD=AC?= =?UTF-8?q?=E8=BF=B0=E7=9A=84=E9=97=AE=E9=A2=98=20(#85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 9fe59b9 重构后当前消息改用 event.get_message_outline(), 该方法不触发图片转述。改用 MessageUtils.outline_message_list() 修复。 Fixes #84 Co-authored-by: lymangos <20227666@stu.neu.edu.cn> --- utils/llm_utils.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/utils/llm_utils.py b/utils/llm_utils.py index 62505ae..fd904cd 100644 --- a/utils/llm_utils.py +++ b/utils/llm_utils.py @@ -228,8 +228,11 @@ async def call_llm(event: AstrMessageEvent, config: AstrBotConfig, context: Cont if image_urls: system_prompt += f"\n\n已经按照从晚到早的顺序为你提供了聊天记录中的{len(image_urls)}张图片,你可以直接查看并理解它们。这些图片出现在聊天记录中。" - # prompt 只保留用户当前消息,保持干净供 KB 检索 - prompt = event.get_message_outline() + # prompt 只保留用户当前消息,使用 MessageUtils 确保图片被转述 + if hasattr(event, "message_obj") and hasattr(event.message_obj, "message"): + prompt = await MessageUtils.outline_message_list(event.message_obj.message) + else: + prompt = event.get_message_outline() return event.request_llm( prompt=prompt, From 5db202778f81cd2214ba0e616fa2bc4e5979b087 Mon Sep 17 00:00:00 2001 From: 23q3 <2335125256@qq.com> Date: Tue, 6 Jan 2026 20:24:39 +0800 Subject: [PATCH 2/5] =?UTF-8?q?ci:=20=E5=90=88=E5=B9=B6=20changelog=20?= =?UTF-8?q?=E5=92=8C=20bump=20version=20=E4=B8=BA=E5=8D=95=E4=B8=80?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用 --amend 将版本更新变更合并到 changelog 提交中, 最终提交信息为 release: vX.X.X --- .github/workflows/prepare-release.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 83a309b..cccc5e3 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -167,7 +167,7 @@ jobs: echo "Updated README.md latest version section" - - name: Commit changes + - name: Commit changes (amend to changelog commit) run: | VERSION="${{ steps.version.outputs.version }}" @@ -182,10 +182,11 @@ jobs: exit 0 fi - git commit -m "chore: bump version to $VERSION" - git push origin HEAD:dev + # 将 bump version 变更合并到 changelog 提交中 + git commit --amend -m "release: $VERSION" + git push origin HEAD:dev --force-with-lease - echo "Committed and pushed changes" + echo "Amended changelog commit with version bump" - name: Create Pull Request env: From a11cca73913b6784bc722237cbf8be045d898774 Mon Sep 17 00:00:00 2001 From: 23q3 <2335125256@qq.com> Date: Tue, 6 Jan 2026 21:50:35 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=BE=A4?= =?UTF-8?q?=E8=81=8A=E9=BB=91=E5=90=8D=E5=8D=95=E5=92=8C=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E5=BC=80=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 enable_all_groups 配置:开启后回复所有群聊(黑名单除外) - 新增 blocked_groups 配置:黑名单群组列表,优先级最高 - 优化群聊检查逻辑:使用 set 提升查找性能,处理空值和规范化 ID - 优先级:黑名单 > 全局开关 > 白名单 Closes #61, Closes #83 --- _conf_schema.json | 14 ++++++++++++++ utils/history_storage.py | 15 ++++++++++++++- utils/reply_decision.py | 26 +++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/_conf_schema.json b/_conf_schema.json index 0a8bc9c..5858f27 100644 --- a/_conf_schema.json +++ b/_conf_schema.json @@ -5,12 +5,26 @@ "hint": "决定了会输入给大模型多少条q群历史消息(最多200条)", "default": 20 }, + "enable_all_groups": { + "description": "回复所有群聊", + "type": "bool", + "hint": "开启后将回复所有群聊(黑名单中的群除外)。关闭则只回复白名单中的群。", + "default": false + }, "enabled_groups": { "description": "启用回复功能的群聊列表", "type": "list", + "items": {"type": "string"}, "hint": "只有在这个列表中的群聊才会启用回复功能,如果为空则不启用回复功能", "default": [] }, + "blocked_groups": { + "description": "黑名单群组列表", + "type": "list", + "items": {"type": "string"}, + "hint": "列表中的群聊将不会回复,优先级高于白名单和全局开关。", + "default": [] + }, "enabled_private": { "description": "启用私聊回复功能", "type": "bool", diff --git a/utils/history_storage.py b/utils/history_storage.py index 3b3f544..a12d9ae 100644 --- a/utils/history_storage.py +++ b/utils/history_storage.py @@ -158,7 +158,20 @@ def is_chat_enabled(event: AstrMessageEvent) -> bool: return HistoryStorage.config.get("enabled_private", False) else: group_id = event.get_group_id() - return group_id in HistoryStorage.config.get("enabled_groups", []) + if not group_id: + return False + group_id = str(group_id).strip() + + # 获取配置集合并规范化 (O(1) 查找) + blocked_groups = {str(g).strip() for g in HistoryStorage.config.get("blocked_groups", []) if str(g).strip()} + enabled_groups = {str(g).strip() for g in HistoryStorage.config.get("enabled_groups", []) if str(g).strip()} + + # 优先级: 黑名单 > 全局开关 > 白名单 + if group_id in blocked_groups: + return False + if HistoryStorage.config.get("enable_all_groups", False): + return True + return group_id in enabled_groups @staticmethod async def process_and_save_user_message(event: AstrMessageEvent) -> None: diff --git a/utils/reply_decision.py b/utils/reply_decision.py index afbeecf..e5a54be 100644 --- a/utils/reply_decision.py +++ b/utils/reply_decision.py @@ -69,8 +69,28 @@ def _check_reply_rules(event: AstrMessageEvent, config: AstrBotConfig) -> bool: logger.debug("未开启私聊回复功能") return False else: - if event.get_group_id() not in config.get("enabled_groups", []): - logger.debug(f"群聊{event.get_group_id()}未开启回复功能") + group_id = event.get_group_id() + if not group_id: + logger.debug("群聊ID为空,不进行回复") + return False + group_id = str(group_id).strip() + + # 获取配置集合并规范化类型 (O(1) 查找) + blocked_groups = {str(g).strip() for g in config.get("blocked_groups", []) if str(g).strip()} + enabled_groups = {str(g).strip() for g in config.get("enabled_groups", []) if str(g).strip()} + + # 1. 黑名单检查 - 最高优先级 + if group_id in blocked_groups: + logger.debug(f"群聊{group_id}在黑名单中,不进行回复") + return False + + # 2. 全局开关检查 + if config.get("enable_all_groups", False): + logger.debug(f"全局群聊回复已开启,允许回复群聊{group_id}") + # 继续执行下面的频率检查 + elif group_id not in enabled_groups: + # 3. 白名单检查 (仅在全局开关关闭时) + logger.debug(f"群聊{group_id}未在白名单中,不进行回复") return False # 获取消息频率配置 @@ -179,4 +199,4 @@ async def process_and_reply(event: AstrMessageEvent, config: AstrBotConfig, cont yield await LLMUtils.call_llm(event, config, context) finally: # 标记处理完成 - LLMUtils.set_llm_in_progress(platform_name, is_private, chat_id, False) \ No newline at end of file + LLMUtils.set_llm_in_progress(platform_name, is_private, chat_id, False) From 0a99c8672bca158c7306c154af40462ff69aa6a2 Mon Sep 17 00:00:00 2001 From: 23q3 <2335125256@qq.com> Date: Wed, 7 Jan 2026 16:59:40 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20AstrBot=20?= =?UTF-8?q?=E5=8E=9F=E7=94=9F=20UMO=20=E4=BA=BA=E6=A0=BC=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除插件的 `persona` 配置项,避免与 AstrBot 多配置功能冲突 - 人格获取遵循 AstrBot 原生优先级: 1. session_service_config.persona_id (会话级别) 2. 配置文件 default_personality 3. 全局默认人格 - 修复 image_caption provider 获取,支持 UMO 路由 - 添加 umo 参数传递到 MessageUtils 调用链 - 修复 Optional[str] 类型注解 BREAKING CHANGE: 原 SpectreCore 插件的 persona 配置已移除, 请改用 AstrBot 管理面板配置会话级别人格 Closes #77 --- _conf_schema.json | 6 ---- main.py | 4 +-- utils/image_caption.py | 10 +++--- utils/llm_utils.py | 76 +++++++++++++++++++++++++++++++----------- utils/message_utils.py | 29 ++++++++++------ 5 files changed, 83 insertions(+), 42 deletions(-) diff --git a/_conf_schema.json b/_conf_schema.json index 5858f27..3a1557a 100644 --- a/_conf_schema.json +++ b/_conf_schema.json @@ -37,12 +37,6 @@ "hint": "是否过滤大模型回复中被标签包裹的思考内容", "default": true }, - "persona":{ - "description":"使用的人格", - "type":"string", - "hint":"填写人格名称,如果为空则不使用人格", - "default":"" - }, "read_air":{ "description":"是否开启读空气", "type":"bool", diff --git a/main.py b/main.py index da5390b..0bbb2ce 100644 --- a/main.py +++ b/main.py @@ -167,8 +167,8 @@ async def history(self, event: AstrMessageEvent, count: int = 10): # 只取最近的记录 recent_history = history[-count:] if len(history) > count else history - # 格式化历史记录 - formatted_history = await MessageUtils.format_history_for_llm(recent_history) + # 格式化历史记录 + formatted_history = await MessageUtils.format_history_for_llm(recent_history, umo=event.unified_msg_origin) # 添加标题 chat_type = "私聊" if is_private else f"群聊({chat_id})" diff --git a/utils/image_caption.py b/utils/image_caption.py index e2dd816..d3f3d1d 100644 --- a/utils/image_caption.py +++ b/utils/image_caption.py @@ -24,15 +24,17 @@ def init(context: Context, config: AstrBotConfig): @staticmethod async def generate_image_caption( image: str, # 图片的base64编码或URL + umo: Optional[str] = None, # unified_msg_origin,用于 UMO 路由 timeout: int = 30 ) -> Optional[str]: """ 为单张图片生成文字描述 - + Args: image: 图片的base64编码或URL + umo: unified_msg_origin,用于获取对应 UMO 的 provider timeout: 超时时间(秒) - + Returns: 生成的图片描述文本,如果失败则返回None """ @@ -55,9 +57,9 @@ async def generate_image_caption( return None provider_id = image_processing_config.get("image_caption_provider_id", "") - # 获取提供商 + # 获取提供商,支持 UMO 路由 if provider_id == "": - provider = context.get_using_provider() + provider = context.get_using_provider(umo=umo) else: provider = context.get_provider_by_id(provider_id) diff --git a/utils/llm_utils.py b/utils/llm_utils.py index fd904cd..3713f43 100644 --- a/utils/llm_utils.py +++ b/utils/llm_utils.py @@ -5,7 +5,6 @@ from .history_storage import HistoryStorage from .message_utils import MessageUtils from astrbot.core.provider.entites import ProviderRequest -from .persona_utils import PersonaUtils class LLMUtils: """ @@ -116,29 +115,66 @@ async def call_llm(event: AstrMessageEvent, config: AstrBotConfig, context: Cont # 准备并调用大模型 func_tools_mgr = context.get_llm_tool_manager() if config.get("use_func_tool", False) else None - # 获取配置中指定的人格 + # 使用 AstrBot 原生 UMO 人格机制获取人格 system_prompt = "" contexts = [] - persona_name = config.get("persona", "") + umo = event.unified_msg_origin - if persona_name: - try: - persona = PersonaUtils.get_persona_by_name(context, persona_name) - if persona: - system_prompt = persona.get('prompt', '') - if persona.get('_mood_imitation_dialogs_processed'): - mood_dialogs = persona.get('_mood_imitation_dialogs_processed', []) - system_prompt += "\n请模仿以下示例的对话风格来反应(示例中,a代表用户,b代表你)\n" + mood_dialogs + try: + # 遵循 AstrBot 原生人格获取优先级: + # 1. session_service_config.persona_id (会话级别配置) + # 2. 配置文件的 default_personality + # 3. 全局默认人格 - begin_dialogs = persona.get('_begin_dialogs_processed', []) - if begin_dialogs: - contexts.extend(begin_dialogs) + persona_id = None + persona = None - logger.debug(f"找到人格 '{persona_name}' ") - else: - logger.warning(f"未找到名为 '{persona_name}' 的人格") + # 优先级1: 查询会话级别的人格配置 (通过全局 SharedPreferences) + try: + from astrbot.api import sp + session_config = await sp.get_async( + scope="umo", scope_id=umo, key="session_service_config", default={} + ) + persona_id = session_config.get("persona_id") + if persona_id: + logger.debug(f"从 session_service_config 获取人格: '{persona_id}'") except Exception as e: - logger.error(f"获取人格信息失败: {e}") + logger.debug(f"获取 session_service_config 失败: {e}") + + # 优先级2/3: 使用 get_default_persona_v3 获取配置文件或全局默认人格 + if not persona_id: + if hasattr(context, 'persona_manager') and hasattr(context.persona_manager, 'get_default_persona_v3'): + persona = await context.persona_manager.get_default_persona_v3(umo=umo) + persona_id = persona.get('name') if persona else None + else: + # Fallback: 旧版 AstrBot 兼容 + persona = context.persona_manager.selected_default_persona_v3 if hasattr(context, 'persona_manager') else None + persona_id = persona.get('name') if persona else None + + # 根据 persona_id 获取完整的人格数据 + if persona_id and not persona: + try: + persona = next( + (p for p in context.persona_manager.personas_v3 if p["name"] == persona_id), + None + ) + except Exception: + pass + + if persona: + system_prompt = persona.get('prompt', '') + if persona.get('_mood_imitation_dialogs_processed'): + mood_dialogs = persona.get('_mood_imitation_dialogs_processed', '') + if mood_dialogs: + system_prompt += "\n请模仿以下示例的对话风格来反应(示例中,a代表用户,b代表你)\n" + str(mood_dialogs) + + begin_dialogs = persona.get('_begin_dialogs_processed', []) + if begin_dialogs: + contexts.extend(begin_dialogs) + + logger.debug(f"使用 UMO '{umo}' 对应的人格: '{persona.get('name', 'default')}'") + except Exception as e: + logger.error(f"获取人格信息失败: {e}") # 构建环境描述(注入到 system_prompt,不污染 prompt) env_description = f"\n\n你正在浏览聊天软件,你在聊天软件上的id是{event.get_self_id()}" @@ -181,7 +217,7 @@ async def call_llm(event: AstrMessageEvent, config: AstrBotConfig, context: Cont # 回退到排除最后一条 history_for_context = history_messages[:-1] if len(history_messages) > 1 else [] if history_for_context: - formatted_history = await MessageUtils.format_history_for_llm(history_for_context, max_messages=history_limit) + formatted_history = await MessageUtils.format_history_for_llm(history_for_context, max_messages=history_limit, umo=umo) env_description += "\n\n以下是最近的聊天记录:\n" + formatted_history else: env_description += "\n\n你没看见任何聊天记录,看来最近没有消息。" @@ -230,7 +266,7 @@ async def call_llm(event: AstrMessageEvent, config: AstrBotConfig, context: Cont # prompt 只保留用户当前消息,使用 MessageUtils 确保图片被转述 if hasattr(event, "message_obj") and hasattr(event.message_obj, "message"): - prompt = await MessageUtils.outline_message_list(event.message_obj.message) + prompt = await MessageUtils.outline_message_list(event.message_obj.message, umo=umo) else: prompt = event.get_message_outline() diff --git a/utils/message_utils.py b/utils/message_utils.py index 5c9f188..d66dc74 100644 --- a/utils/message_utils.py +++ b/utils/message_utils.py @@ -1,5 +1,5 @@ from astrbot.api.all import * -from typing import List, Dict, Any +from typing import List, Dict, Any, Optional import os import time from datetime import datetime @@ -15,14 +15,15 @@ class MessageUtils: """ @staticmethod - async def format_history_for_llm(history_messages: List[AstrBotMessage], max_messages: int = 20) -> str: + async def format_history_for_llm(history_messages: List[AstrBotMessage], max_messages: int = 20, umo: Optional[str] = None) -> str: """ 将历史消息列表格式化为适合输入给大模型的文本格式 - + Args: history_messages: 历史消息列表 max_messages: 最大消息数量,默认20条 - + umo: unified_msg_origin,用于 UMO 路由 + Returns: 格式化后的历史消息文本 """ @@ -54,7 +55,7 @@ async def format_history_for_llm(history_messages: List[AstrBotMessage], max_mes pass # 获取消息内容 (异步调用) - message_content = await MessageUtils.outline_message_list(msg.message) if hasattr(msg, "message") and msg.message else "" + message_content = await MessageUtils.outline_message_list(msg.message, umo=umo) if hasattr(msg, "message") and msg.message else "" # 格式化该条消息 message_text = f"发送者: {sender_name} (ID: {sender_id})\n" @@ -71,10 +72,14 @@ async def format_history_for_llm(history_messages: List[AstrBotMessage], max_mes return formatted_text @staticmethod - async def outline_message_list(message_list: List[BaseMessageComponent]) -> str: + async def outline_message_list(message_list: List[BaseMessageComponent], umo: Optional[str] = None) -> str: """ 获取消息概要。 使用类型检查而不是类实例检查,避免依赖不存在的类。 + + Args: + message_list: 消息组件列表 + umo: unified_msg_origin,用于 UMO 路由 """ outline = "" for i in message_list: @@ -86,7 +91,7 @@ async def outline_message_list(message_list: List[BaseMessageComponent]) -> str: # 特别优化 Reply 组件的处理 if component_type == "reply" or isinstance(i, Reply): - outline += await MessageUtils._format_reply_component(i) + outline += await MessageUtils._format_reply_component(i, umo=umo) continue # 根据类型处理不同的消息组件 @@ -105,7 +110,7 @@ async def outline_message_list(message_list: List[BaseMessageComponent]) -> str: continue image = image_path - caption = await ImageCaptionUtils.generate_image_caption(image) + caption = await ImageCaptionUtils.generate_image_caption(image, umo=umo) if caption: outline += f"[图片: {caption}]" else: @@ -194,9 +199,13 @@ async def outline_message_list(message_list: List[BaseMessageComponent]) -> str: return outline @staticmethod - async def _format_reply_component(reply_component: Reply) -> str: + async def _format_reply_component(reply_component: Reply, umo: Optional[str] = None) -> str: """ 优化格式化引用回复组件 + + Args: + reply_component: 回复组件 + umo: unified_msg_origin,用于 UMO 路由 """ try: # 构建发送者信息 @@ -216,7 +225,7 @@ async def _format_reply_component(reply_component: Reply) -> str: # 优先使用 chain(原始消息组件) if hasattr(reply_component, 'chain') and reply_component.chain: - reply_content = await MessageUtils.outline_message_list(reply_component.chain) + reply_content = await MessageUtils.outline_message_list(reply_component.chain, umo=umo) # 其次使用 message_str(纯文本消息) elif hasattr(reply_component, 'message_str') and reply_component.message_str: reply_content = reply_component.message_str From 961237d6dc6a483240abf2ddb95ac526fad113b6 Mon Sep 17 00:00:00 2001 From: 23q3 <2335125256@qq.com> Date: Wed, 7 Jan 2026 17:11:37 +0800 Subject: [PATCH 5/5] release: v2.1.10 --- README.md | 8 +++++--- changelogs/v2.1.10.md | 3 +++ main.py | 2 +- metadata.yaml | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 changelogs/v2.1.10.md diff --git a/README.md b/README.md index b1916a5..af73d86 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ![SpectreCore](https://avatars.githubusercontent.com/u/129108081?s=48&v=4) -[![version](https://img.shields.io/badge/version-v2.1.9-blue.svg?style=flat-square)](https://github.com/23q3/astrbot_plugin_SpectreCore) +[![version](https://img.shields.io/badge/version-v2.1.10-blue.svg?style=flat-square)](https://github.com/23q3/astrbot_plugin_SpectreCore) [![license](https://img.shields.io/badge/license-AGPL--3.0-green.svg?style=flat-square)](LICENSE) [![author](https://img.shields.io/badge/author-23q3-orange.svg?style=flat-square)](https://github.com/23q3) @@ -70,9 +70,11 @@ SpectreCore (影芯) 是一个为 AstrBot 设计的高级群聊互动插件, ## 📋 最新版本 -### v2.1.9 (2026-01-05) +### v2.1.10 (2026-01-07) -- 🐛 **修复GIF图片格式识别错误** - 修复图片URL优先级问题,优先使用file字段以保留准确格式信息,避免HTTP URL下载后MIME类型检测错误导致Gemini API返回400 [#81](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/81) +- ✨ **新增群聊黑名单和全局回复开关** - 添加群聊黑名单功能,可禁用指定群的自动回复;新增全局回复开关,一键启用/禁用所有群的自动回复功能 [#61](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/61)[#83](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/83) +- 🔄 **使用AstrBot原生UMO人格机制** - 移除自定义人格注入逻辑,改用AstrBot原生的Unified Model Output人格机制,提高兼容性和稳定性 [#77](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/77) +- 🐛 **修复当前消息图片未被转述** - 修复当前消息中的图片未被包含在历史记录转述中的问题 [#84](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/84)[#85](https://github.com/23q3/astrbot_plugin_SpectreCore/pull/85) @lymangos ## ⚠️ 注意事项 diff --git a/changelogs/v2.1.10.md b/changelogs/v2.1.10.md new file mode 100644 index 0000000..7dc0637 --- /dev/null +++ b/changelogs/v2.1.10.md @@ -0,0 +1,3 @@ +- ✨ **新增群聊黑名单和全局回复开关** - 添加群聊黑名单功能,可禁用指定群的自动回复;新增全局回复开关,一键启用/禁用所有群的自动回复功能 [#61](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/61)[#83](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/83) +- 🔄 **使用AstrBot原生UMO人格机制** - 移除自定义人格注入逻辑,改用AstrBot原生的Unified Model Output人格机制,提高兼容性和稳定性 [#77](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/77) +- 🐛 **修复当前消息图片未被转述** - 修复当前消息中的图片未被包含在历史记录转述中的问题 [#84](https://github.com/23q3/astrbot_plugin_SpectreCore/issues/84)[#85](https://github.com/23q3/astrbot_plugin_SpectreCore/pull/85) @lymangos diff --git a/main.py b/main.py index 0bbb2ce..28830c3 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,7 @@ "spectrecore", "23q3", "使大模型更好的主动回复群聊中的消息,带来生动和沉浸的群聊对话体验", - "2.1.9", + "2.1.10", "https://github.com/23q3/astrbot_plugin_SpectreCore" ) class SpectreCore(Star): diff --git a/metadata.yaml b/metadata.yaml index 75383f2..91c96fa 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,7 +1,7 @@ name: spectrecore # 这是你的插件的唯一识别名。 desc: 使大模型更好的主动回复群聊中的消息,带来生动和沉浸的群聊对话体验 # 插件简短描述 help: 自动检测群聊消息并让AI模型进行回复,让群聊更加生动有趣。 # 插件的帮助信息 -version: v2.1.9 # 插件版本号。格式:v1.1.1 或者 v1.1 +version: v2.1.10 # 插件版本号。格式:v1.1.1 或者 v1.1 author: 23q3 # 作者 repo: https://github.com/23q3/astrbot_plugin_SpectreCore # 插件的仓库地址 display_name: 🌟 SpectreCore