From 48d07af574a0ffda72b6a2150fa118532c77568a Mon Sep 17 00:00:00 2001 From: anka <1350989414@qq.com> Date: Thu, 3 Apr 2025 11:50:12 +0800 Subject: [PATCH 01/30] =?UTF-8?q?feature(fix=3F):=20=E5=9C=A8=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=B6=88=E6=81=AF=E4=B9=8B=E5=89=8D=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=B6=88=E6=81=AF=E5=86=85=E5=AE=B9=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA=E7=A9=BA,=20=E4=B8=8D=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E5=8F=91=E9=80=81=E7=A9=BA=E6=B6=88=E6=81=AF,=20=E4=BB=A5?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=AF=A5=E6=B6=88=E6=81=AF=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=B8=8D=E6=94=AF=E6=8C=81=E6=9F=A5=E7=9C=8B=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?gemini=E8=BF=94=E5=9B=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/pipeline/respond/stage.py | 21 +++++++++++++++++++ .../core/provider/sources/gemini_source.py | 6 +++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/astrbot/core/pipeline/respond/stage.py b/astrbot/core/pipeline/respond/stage.py index a43f0b32d..202a3b8aa 100644 --- a/astrbot/core/pipeline/respond/stage.py +++ b/astrbot/core/pipeline/respond/stage.py @@ -72,6 +72,20 @@ class RespondStage(Stage): # random return random.uniform(self.interval[0], self.interval[1]) + async def _is_empty_message_chain(self, chain): + """检查消息链是否为空 + + Args: + chain (MessageChain): 消息链 + """ + for comp in chain: + if isinstance(comp, Plain): + if comp.text.strip(): + return False + else: + return True + return True + async def process( self, event: AstrMessageEvent ) -> Union[None, AsyncGenerator[None, None]]: @@ -82,6 +96,13 @@ class RespondStage(Stage): if len(result.chain) > 0: await event._pre_send() + # 检查消息链是否为空 + if await self._is_empty_message_chain(result.chain): + logger.info("消息为空,跳过发送阶段") + event.clear_result() + event.stop_event() + return + if self.enable_seg and ( (self.only_llm_result and result.is_llm_result()) or not self.only_llm_result diff --git a/astrbot/core/provider/sources/gemini_source.py b/astrbot/core/provider/sources/gemini_source.py index 3233b3453..cc34784c5 100644 --- a/astrbot/core/provider/sources/gemini_source.py +++ b/astrbot/core/provider/sources/gemini_source.py @@ -127,7 +127,7 @@ class ProviderGoogleGenAI(Provider): if message["role"] == "user": if isinstance(message["content"], str): if not message["content"]: - message["content"] = "" + message["content"] = "" google_genai_conversation.append( {"role": "user", "parts": [{"text": message["content"]}]} @@ -138,7 +138,7 @@ class ProviderGoogleGenAI(Provider): for part in message["content"]: if part["type"] == "text": if not part["text"]: - part["text"] = "" + part["text"] = "" parts.append({"text": part["text"]}) elif part["type"] == "image_url": parts.append( @@ -156,7 +156,7 @@ class ProviderGoogleGenAI(Provider): elif message["role"] == "assistant": if "content" in message: if not message["content"]: - message["content"] = "" + message["content"] = "" google_genai_conversation.append( {"role": "model", "parts": [{"text": message["content"]}]} ) From e9eb00a0d42900d79f7ac6096df378290570f548 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 3 Apr 2025 16:18:54 +0800 Subject: [PATCH 02/30] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=B8=82=E5=9C=BA=E5=B8=AE=E5=8A=A9=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/core_lifecycle.py | 1 - astrbot/core/star/star_manager.py | 2 +- astrbot/core/utils/io.py | 4 +- dashboard/src/views/ExtensionMarketplace.vue | 64 +++++++++++--------- 4 files changed, 37 insertions(+), 34 deletions(-) diff --git a/astrbot/core/core_lifecycle.py b/astrbot/core/core_lifecycle.py index f0e8e2144..ee40187f5 100644 --- a/astrbot/core/core_lifecycle.py +++ b/astrbot/core/core_lifecycle.py @@ -190,7 +190,6 @@ class AstrBotCoreLifecycle: task.cancel() for plugin in self.plugin_manager.context.get_all_stars(): - logger.info(f"正在终止插件 {plugin.name} ...") try: await self.plugin_manager._terminate_plugin(plugin) except Exception as e: diff --git a/astrbot/core/star/star_manager.py b/astrbot/core/star/star_manager.py index 75a18317c..2d610f15c 100644 --- a/astrbot/core/star/star_manager.py +++ b/astrbot/core/star/star_manager.py @@ -596,7 +596,7 @@ class PluginManager: asyncio.get_event_loop().run_in_executor( None, star_metadata.star_cls.__del__ ) - else: + elif hasattr(star_metadata.star_cls, "terminate"): await star_metadata.star_cls.terminate() async def turn_on_plugin(self, plugin_name: str): diff --git a/astrbot/core/utils/io.py b/astrbot/core/utils/io.py index c996cadbd..5bd5d7c77 100644 --- a/astrbot/core/utils/io.py +++ b/astrbot/core/utils/io.py @@ -103,7 +103,7 @@ async def download_image_by_url( with open(path, "wb") as f: f.write(await resp.read()) return path - except aiohttp.client.ClientConnectorSSLError: + except (aiohttp.ClientConnectorSSLError, aiohttp.ClientConnectorCertificateError): # 关闭SSL验证 ssl_context = ssl.create_default_context() ssl_context.set_ciphers("DEFAULT") @@ -152,7 +152,7 @@ async def download_file(url: str, path: str, show_progress: bool = False): f"\r下载进度: {downloaded_size / total_size:.2%} 速度: {speed:.2f} KB/s", end="", ) - except aiohttp.client.ClientConnectorSSLError: + except (aiohttp.ClientConnectorSSLError, aiohttp.ClientConnectorCertificateError): # 关闭SSL验证 ssl_context = ssl.create_default_context() ssl_context.set_ciphers("DEFAULT") diff --git a/dashboard/src/views/ExtensionMarketplace.vue b/dashboard/src/views/ExtensionMarketplace.vue index 9e8587a6f..6fbce072a 100644 --- a/dashboard/src/views/ExtensionMarketplace.vue +++ b/dashboard/src/views/ExtensionMarketplace.vue @@ -63,14 +63,13 @@ import 'highlight.js/styles/github.css'; - +

📦 全部插件

+ :loading="loading_" v-model:search="marketSearch" :filter-keys="filterKeys">