From 1b69d99c068596c2f751dacc8f867e18d2f45a73 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 14:20:06 +0800 Subject: [PATCH 01/68] =?UTF-8?q?=F0=9F=90=9B=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=92=E4=BB=B6=E5=90=8E=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E8=BD=BD=E4=B8=8D=E5=AE=8C=E5=85=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/star/star_manager.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/astrbot/core/star/star_manager.py b/astrbot/core/star/star_manager.py index bdf2c2473..4a7938605 100644 --- a/astrbot/core/star/star_manager.py +++ b/astrbot/core/star/star_manager.py @@ -187,6 +187,8 @@ class PluginManager: f"插件 {smd.name} 未被正常终止: {str(e)}, 可能会导致该插件运行不正常。" ) + await self._unbind_plugin(smd.name, smd.module_path) + star_handlers_registry.clear() star_map.clear() star_registry.clear() @@ -493,7 +495,10 @@ class PluginManager: for k in keys_to_delete: v = star_handlers_registry.star_handlers_map[k] logger.debug(f"unbind handler {v.handler_name} from {plugin_name} (map)") - del star_handlers_registry.star_handlers_map[k] + try: + del star_handlers_registry.star_handlers_map[k] + except KeyError: + pass try: del sys.modules[plugin_module_path] @@ -509,7 +514,7 @@ class PluginManager: raise Exception("该插件是 AstrBot 保留插件,无法更新。") await self.updator.update(plugin, proxy=proxy) - await self.reload() + await self.reload(plugin_name) async def turn_off_plugin(self, plugin_name: str): """ From 834a51cdc96a2b2077f9980e919bddb9e5c5a761 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 14:30:59 +0800 Subject: [PATCH 02/68] =?UTF-8?q?=F0=9F=90=9B=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20OpenAI=20TTS=20API=20TypeError=20=E6=8A=A5=E9=94=99=20#755?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/provider/sources/openai_tts_api_source.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/astrbot/core/provider/sources/openai_tts_api_source.py b/astrbot/core/provider/sources/openai_tts_api_source.py index b59f2c283..f120a6a59 100644 --- a/astrbot/core/provider/sources/openai_tts_api_source.py +++ b/astrbot/core/provider/sources/openai_tts_api_source.py @@ -18,10 +18,14 @@ class ProviderOpenAITTSAPI(TTSProvider): self.chosen_api_key = provider_config.get("api_key", "") self.voice = provider_config.get("openai-tts-voice", "alloy") + timeout = provider_config.get("timeout", NOT_GIVEN) + if isinstance(timeout, str): + timeout = int(timeout) + self.client = AsyncOpenAI( api_key=self.chosen_api_key, base_url=provider_config.get("api_base", None), - timeout=provider_config.get("timeout", NOT_GIVEN), + timeout=timeout, ) self.set_model(provider_config.get("model", None)) From 1a7eb21fc7817d50e0cba89e804c323cf6ce08c6 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 14:54:41 +0800 Subject: [PATCH 03/68] =?UTF-8?q?Revert=20"=F0=9F=90=9B=20fix:=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20gewechat=20=E9=83=A8=E5=88=86=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E4=B8=8B=E4=B8=8B=E8=BD=BD=E5=9B=BE=E7=89=87=E6=8A=A5=E9=94=99?= =?UTF-8?q?=20#700"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c38fa77ce65e5da6e58ba4f72436eee1dfa155e9. --- .../core/platform/sources/gewechat/client.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/astrbot/core/platform/sources/gewechat/client.py b/astrbot/core/platform/sources/gewechat/client.py index 7268efded..f241b1dd6 100644 --- a/astrbot/core/platform/sources/gewechat/client.py +++ b/astrbot/core/platform/sources/gewechat/client.py @@ -186,17 +186,12 @@ class SimpleGewechatClient: abm.message_str = content case 3: # 图片消息 - # 先看看 base64 数据 - if "ImgBuf" in d and "buffer" in d["ImgBuf"]: - logger.debug("发现图片消息包含 base64 数据,使用。") - abm.message.append(Image.fromBase64(d["ImgBuf"]["buffer"])) - else: - file_url = await self.multimedia_downloader.download_image( - self.appid, content - ) - logger.debug(f"下载图片: {file_url}") - file_path = await download_image_by_url(file_url) - abm.message.append(Image(file=file_path, url=file_path)) + file_url = await self.multimedia_downloader.download_image( + self.appid, content + ) + logger.debug(f"下载图片: {file_url}") + file_path = await download_image_by_url(file_url) + abm.message.append(Image(file=file_path, url=file_path)) case 34: # 语音消息 From 5e2a3a5aeaea5623c80f6be551e8e8bcb457ac3c Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 15:29:51 +0800 Subject: [PATCH 04/68] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=83=85=E5=86=B5=E4=B8=8B=20EdgeTTS=20=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=BD=BF=E7=94=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 需要哦 <2687427560@qq.com> --- .../core/provider/sources/edge_tts_source.py | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/astrbot/core/provider/sources/edge_tts_source.py b/astrbot/core/provider/sources/edge_tts_source.py index 56b42a0ca..c7887d3ea 100644 --- a/astrbot/core/provider/sources/edge_tts_source.py +++ b/astrbot/core/provider/sources/edge_tts_source.py @@ -57,23 +57,30 @@ class ProviderEdgeTTS(TTSProvider): # 使用ffmpeg将MP3转换为标准WAV格式 _ = await asyncio.create_subprocess_exec( - [ - "ffmpeg", - "-y", # 覆盖输出文件 - "-i", - mp3_path, # 输入文件 - "-acodec", - "pcm_s16le", # 16位PCM编码 - "-ar", - "24000", # 采样率24kHz (适合微信语音) - "-ac", - "1", # 单声道 - wav_path, # 输出文件 - ], - capture_output=True, - check=True, + "ffmpeg", + "-y", # 覆盖输出文件 + "-i", + mp3_path, # 输入文件 + "-acodec", + "pcm_s16le", # 16位PCM编码 + "-ar", + "24000", # 采样率24kHz (适合微信语音) + "-ac", + "1", # 单声道 + "-af", + "apad=pad_dur=2", # 确保输出时长准确 + "-fflags", + "+genpts", # 强制生成时间戳 + "-hide_banner", # 隐藏版本信息 + wav_path, # 输出文件 + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, ) - + # 等待进程完成并获取输出 + stdout, stderr = await _.communicate() + logger.info(f"[EdgeTTS] FFmpeg 标准输出: {stdout.decode().strip()}") + logger.debug(f"FFmpeg错误输出: {stderr.decode().strip()}") + logger.info(f"[EdgeTTS] 返回值(0代表成功): {_.returncode}") os.remove(mp3_path) if os.path.exists(wav_path) and os.path.getsize(wav_path) > 0: return wav_path @@ -82,13 +89,15 @@ class ProviderEdgeTTS(TTSProvider): raise RuntimeError("生成的WAV文件不存在或为空") except subprocess.CalledProcessError as e: - logger.error(f"FFmpeg转换失败: {e.stderr.decode() if e.stderr else str(e)}") + logger.error( + f"FFmpeg 转换失败: {e.stderr.decode() if e.stderr else str(e)}" + ) try: if os.path.exists(mp3_path): os.remove(mp3_path) except Exception: pass - raise RuntimeError(f"FFmpeg转换失败: {str(e)}") + raise RuntimeError(f"FFmpeg 转换失败: {str(e)}") except Exception as e: logger.error(f"音频生成失败: {str(e)}") From b47d63334f6de5605e65b5e95faa4644a8607e4f Mon Sep 17 00:00:00 2001 From: beat4ocean Date: Tue, 11 Mar 2025 15:48:28 +0800 Subject: [PATCH 05/68] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dgewechat?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E7=94=A8=E6=88=B7=E6=9C=AC=E4=BA=BA=E5=8F=91?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=A7=A6=E5=8F=91=E6=B6=88=E6=81=AF=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/platform/sources/gewechat/client.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/astrbot/core/platform/sources/gewechat/client.py b/astrbot/core/platform/sources/gewechat/client.py index 7268efded..283425848 100644 --- a/astrbot/core/platform/sources/gewechat/client.py +++ b/astrbot/core/platform/sources/gewechat/client.py @@ -147,6 +147,11 @@ class SimpleGewechatClient: abm.type = MessageType.FRIEND_MESSAGE user_id = from_user_name + # 检查消息是否由自己发送,若是则忽略 + if user_id == abm.self_id: + logger.info("忽略自己发送的消息") + return None + abm.message = [] if at_me: abm.message.insert(0, At(qq=abm.self_id)) From 09c8c6e670f9908a2196952110bf6382035ea623 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 15:52:30 +0800 Subject: [PATCH 06/68] =?UTF-8?q?=F0=9F=90=9B=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20aiocqhttp=20=E4=B8=8B=E5=8F=AF=E8=83=BD=E7=9A=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=AE=A1=E7=90=86=E5=91=98=E6=97=A0=E6=95=88=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/pipeline/waking_check/stage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/astrbot/core/pipeline/waking_check/stage.py b/astrbot/core/pipeline/waking_check/stage.py index 95f70fd4d..6bb5f814d 100644 --- a/astrbot/core/pipeline/waking_check/stage.py +++ b/astrbot/core/pipeline/waking_check/stage.py @@ -36,7 +36,7 @@ class WakingCheckStage(Stage): # 设置 sender 身份 event.message_str = event.message_str.strip() for admin_id in self.ctx.astrbot_config["admins_id"]: - if event.get_sender_id() == admin_id: + if str(event.get_sender_id()) == admin_id: event.role = "admin" break From 239f3c40be406be05304ae5d74555b7e6df3f149 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 16:11:34 +0800 Subject: [PATCH 07/68] =?UTF-8?q?=F0=9F=8E=88=20perf:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20WebUI=20=E8=BE=B9=E6=A0=8F=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/layouts/full/vertical-sidebar/NavItem.vue | 2 +- .../layouts/full/vertical-sidebar/VerticalSidebar.vue | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue b/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue index 4a29d7516..a5ed5deb0 100644 --- a/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue +++ b/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue @@ -16,7 +16,7 @@ const props = defineProps({ item: Object, level: Number }); - {{ item.title }} + {{ item.title }} {{ item.subCaption }} diff --git a/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue b/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue index 3cbb04be0..6199a8cea 100644 --- a/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue +++ b/dashboard/src/layouts/full/vertical-sidebar/VerticalSidebar.vue @@ -51,9 +51,9 @@ function onMouseUp() { From efa287ed35c5a12424f6f4d52285adcf6156c1ce Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 13 Mar 2025 17:40:28 +0800 Subject: [PATCH 37/68] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=94=AF=E6=8C=81=20?= =?UTF-8?q?LLM=20=E5=AF=B9=E5=BC=95=E7=94=A8=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E6=84=9F=E7=9F=A5=20#783?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/sources/telegram/tg_adapter.py | 48 +++++++++++++++---- packages/astrbot/main.py | 20 ++++++-- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/astrbot/core/platform/sources/telegram/tg_adapter.py b/astrbot/core/platform/sources/telegram/tg_adapter.py index b7d7a6e7e..3dde1802b 100644 --- a/astrbot/core/platform/sources/telegram/tg_adapter.py +++ b/astrbot/core/platform/sources/telegram/tg_adapter.py @@ -17,6 +17,7 @@ from astrbot.api.message_components import ( File as AstrBotFile, Video, At, + Reply, ) from astrbot.core.platform.astr_message_event import MessageSesion from astrbot.api.platform import register_platform_adapter @@ -68,7 +69,7 @@ class TelegramPlatformAdapter(Platform): ) message_handler = TelegramMessageHandler( filters=filters.ALL, # receive all messages - callback=self.convert_message, + callback=self.message_handler, ) self.application.add_handler(message_handler) self.client = self.application.bot @@ -104,33 +105,64 @@ class TelegramPlatformAdapter(Platform): chat_id=update.effective_chat.id, text=self.config["start_message"] ) + async def message_handler(self, update: Update, context: ContextTypes.DEFAULT_TYPE): + logger.debug(f"Telegram message: {update.message}") + abm = await self.convert_message(update, context) + await self.handle_msg(abm) + async def convert_message( - self, update: Update, context: ContextTypes.DEFAULT_TYPE + self, update: Update, context: ContextTypes.DEFAULT_TYPE, get_reply=True ) -> AstrBotMessage: + """转换 Telegram 的消息对象为 AstrBotMessage 对象。 + + @param update: Telegram 的 Update 对象。 + @param context: Telegram 的 Context 对象。 + @param get_reply: 是否获取回复消息。这个参数是为了防止多个回复嵌套。 + """ message = AstrBotMessage() # 获得是群聊还是私聊 - if update.effective_chat.type == ChatType.PRIVATE: + if update.message.chat.type == ChatType.PRIVATE: message.type = MessageType.FRIEND_MESSAGE else: message.type = MessageType.GROUP_MESSAGE - message.group_id = str(update.effective_chat.id) + message.group_id = str(update.message.chat.id) if update.message.message_thread_id: # Topic Group message.group_id += "#" + str(update.message.message_thread_id) message.message_id = str(update.message.message_id) - message.session_id = str(update.effective_chat.id) + message.session_id = str(update.message.chat.id) message.sender = MessageMember( - str(update.effective_user.id), update.effective_user.username + str(update.message.from_user.id), update.message.from_user.username ) message.self_id = str(context.bot.username) message.raw_message = update message.message_str = "" message.message = [] - logger.debug(f"Telegram message: {update.message}") + if update.message.reply_to_message: + # 获取回复消息 + reply_update = Update( + update_id=1, + message=update.message.reply_to_message, + ) + reply_abm = await self.convert_message(reply_update, context, False) + + message.message.append( + Reply( + id=reply_abm.message_id, + chain=reply_abm.message, + sender_id=reply_abm.sender.user_id, + sender_nickname=reply_abm.sender.nickname, + time=reply_abm.timestamp, + message_str=reply_abm.message_str, + text=reply_abm.message_str, + qq=reply_abm.sender.user_id, + ) + ) if update.message.text: + # 处理文本消息 plain_text = update.message.text if update.message.entities: @@ -178,7 +210,7 @@ class TelegramPlatformAdapter(Platform): Video(file=file.file_path, path=file.file_path), ] - await self.handle_msg(message) + return message async def handle_msg(self, message: AstrBotMessage): message_event = TelegramPlatformEvent( diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index c8ed2564d..463f24950 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -17,7 +17,7 @@ from astrbot.core.star.filter.permission import PermissionTypeFilter from astrbot.core.config.default import VERSION from .long_term_memory import LongTermMemory from astrbot.core import logger -from astrbot.api.message_components import Plain, Image +from astrbot.api.message_components import Plain, Image, Reply from typing import Union @@ -1088,12 +1088,17 @@ UID: {user_id} 此 ID 可用于设置管理员。 @filter.on_llm_request() async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest): - """在请求 LLM 前注入人格信息、Identifier、时间等 System Prompt""" - logger.debug(req.conversation) - + """在请求 LLM 前注入人格信息、Identifier、时间、回复内容等 System Prompt""" if self.prompt_prefix: req.prompt = self.prompt_prefix + req.prompt + # 解析引用内容 + quote = None + for comp in event.message_obj.message: + if isinstance(comp, Reply): + quote = comp + break + if self.identifier: user_id = event.message_obj.sender.user_id user_nickname = event.message_obj.sender.nickname @@ -1129,6 +1134,13 @@ UID: {user_id} 此 ID 可用于设置管理员。 if begin_dialogs := persona["_begin_dialogs_processed"]: req.contexts[:0] = begin_dialogs + if quote and quote.message_str: + if quote.sender_nickname: + sender_info = f"(Sent by {quote.sender_nickname})" + else: + sender_info = "" + req.system_prompt += f"\nUser is quoting the message{sender_info}: {quote.message_str}, please consider the context." + if self.ltm: try: await self.ltm.on_req_llm(event, req) From 60e58b4f5f359030f81db08f52dadfe035c7d8af Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 13 Mar 2025 09:52:03 +0000 Subject: [PATCH 38/68] :balloon: auto fixes by pre-commit hooks --- astrbot/core/platform/astr_message_event.py | 2 +- astrbot/core/provider/func_tool_manager.py | 1 + astrbot/core/star/star_manager.py | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 9ae3c99f7..fceb63ce7 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -14,7 +14,7 @@ from astrbot.core.message.components import ( At, AtAll, Forward, - Reply + Reply, ) from astrbot.core.utils.metrics import Metric from astrbot.core.provider.entites import ProviderRequest diff --git a/astrbot/core/provider/func_tool_manager.py b/astrbot/core/provider/func_tool_manager.py index 42b88cae2..cdb1b3d6d 100644 --- a/astrbot/core/provider/func_tool_manager.py +++ b/astrbot/core/provider/func_tool_manager.py @@ -4,6 +4,7 @@ from typing import Dict, List, Awaitable from dataclasses import dataclass from astrbot import logger + @dataclass class FuncTool: """ diff --git a/astrbot/core/star/star_manager.py b/astrbot/core/star/star_manager.py index 9fa27798b..347bc13ef 100644 --- a/astrbot/core/star/star_manager.py +++ b/astrbot/core/star/star_manager.py @@ -485,7 +485,9 @@ class PluginManager: for handler in star_handlers_registry.get_handlers_by_module_name( plugin_module_path ): - logger.info(f"移除了插件 {plugin_name} 的处理函数 {handler.handler_name} ({len(star_handlers_registry)})") + logger.info( + f"移除了插件 {plugin_name} 的处理函数 {handler.handler_name} ({len(star_handlers_registry)})" + ) star_handlers_registry.remove(handler) keys_to_delete = [ k From 9014d4c410f3a1cd5224a54a7891f0403da2462c Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 13 Mar 2025 20:36:41 +0800 Subject: [PATCH 39/68] =?UTF-8?q?=F0=9F=8E=A8=20style:=20format=20codes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/platform/sources/gewechat/client.py | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/astrbot/core/platform/sources/gewechat/client.py b/astrbot/core/platform/sources/gewechat/client.py index 68fcf53f3..f0e64e698 100644 --- a/astrbot/core/platform/sources/gewechat/client.py +++ b/astrbot/core/platform/sources/gewechat/client.py @@ -87,7 +87,7 @@ class SimpleGewechatClient: type_name = data["type_name"] else: raise Exception("无法识别的消息类型") - + # 以下没有业务处理,只是避免控制台打印太多的日志 if type_name == "ModContacts": logger.info("gewechat下发:ModContacts消息通知。") @@ -95,7 +95,7 @@ class SimpleGewechatClient: if type_name == "DelContacts": logger.info("gewechat下发:DelContacts消息通知。") return - + if type_name == "Offline": logger.critical("收到 gewechat 下线通知。") return @@ -221,27 +221,30 @@ class SimpleGewechatClient: async with await anyio.open_file(file_path, "wb") as f: await f.write(voice_data) abm.message.append(Record(file=file_path, url=file_path)) - - # 以下已知消息类型,没有业务处理,只是避免控制台打印太多的日志 - case 37: #好友申请 - logger.info("消息类型(37):好友申请") - case 42: # 名片 - logger.info("消息类型(42):名片") - case 43: # 视频 - logger.info("消息类型(43):视频") - case 47: # emoji - logger.info("消息类型(47):emoji") - case 48: # 地理位置 - logger.info("消息类型(48):地理位置") - case 49: # 公众号/文件/小程序/引用/转账/红包/视频号/群聊邀请 - logger.info("消息类型(49):公众号/文件/小程序/引用/转账/红包/视频号/群聊邀请") - case 51: # 帐号消息同步? - logger.info("消息类型(51):帐号消息同步?") - case 10000: # 被踢出群聊/更换群主/修改群名称 - logger.info("消息类型(10000):被踢出群聊/更换群主/修改群名称") - case 10002: # 撤回/拍一拍/成员邀请/被移出群聊/解散群聊/群公告/群待办 - logger.info("消息类型(10002):撤回/拍一拍/成员邀请/被移出群聊/解散群聊/群公告/群待办") + # 以下已知消息类型,没有业务处理,只是避免控制台打印太多的日志 + case 37: # 好友申请 + logger.info("消息类型(37):好友申请") + case 42: # 名片 + logger.info("消息类型(42):名片") + case 43: # 视频 + logger.info("消息类型(43):视频") + case 47: # emoji + logger.info("消息类型(47):emoji") + case 48: # 地理位置 + logger.info("消息类型(48):地理位置") + case 49: # 公众号/文件/小程序/引用/转账/红包/视频号/群聊邀请 + logger.info( + "消息类型(49):公众号/文件/小程序/引用/转账/红包/视频号/群聊邀请" + ) + case 51: # 帐号消息同步? + logger.info("消息类型(51):帐号消息同步?") + case 10000: # 被踢出群聊/更换群主/修改群名称 + logger.info("消息类型(10000):被踢出群聊/更换群主/修改群名称") + case 10002: # 撤回/拍一拍/成员邀请/被移出群聊/解散群聊/群公告/群待办 + logger.info( + "消息类型(10002):撤回/拍一拍/成员邀请/被移出群聊/解散群聊/群公告/群待办" + ) case _: logger.info(f"未实现的消息类型: {d['MsgType']}") From b52a44a7dd068a95a96a7e2b0eb548bd38b12c1e Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 13 Mar 2025 20:44:08 +0800 Subject: [PATCH 40/68] =?UTF-8?q?=F0=9F=8E=A8=20stype:=20format=20codes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/star/register/star_handler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/astrbot/core/star/register/star_handler.py b/astrbot/core/star/register/star_handler.py index 86620cae6..77d7fb482 100644 --- a/astrbot/core/star/register/star_handler.py +++ b/astrbot/core/star/register/star_handler.py @@ -15,7 +15,6 @@ from ..filter.regex import RegexFilter from typing import Awaitable from astrbot.core.provider.func_tool_manager import SUPPORTED_TYPES from astrbot.core.provider.register import llm_tools -from astrbot.core import logger def get_handler_full_name(awaitable: Awaitable) -> str: From 0870b87c961863d8527ba2e5fae6ddd9bb3d959f Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 13 Mar 2025 20:59:52 +0800 Subject: [PATCH 41/68] =?UTF-8?q?=F0=9F=90=9B=20fix:=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=B6=88=E6=81=AF=E5=A4=B1=E8=B4=A5=E6=97=B6?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=B0=86=E5=BC=95=E7=94=A8=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=AE=B5=E5=8A=A0=E5=85=A5=E6=B6=88=E6=81=AF=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py b/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py index e81e7153f..0d11e3c0b 100644 --- a/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +++ b/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py @@ -273,7 +273,9 @@ class AiocqhttpAdapter(Platform): abm.message.append(reply_seg) except BaseException as e: - logger.error(f"获取消息失败: {e},此消息段将被忽略。") + logger.error(f"获取引用消息失败: {e}。") + a = ComponentTypes[t](**m["data"]) # noqa: F405 + abm.message.append(a) else: a = ComponentTypes[t](**m["data"]) # noqa: F405 abm.message.append(a) From c03f3eacd12ea9a04cfc101d420b67f576212929 Mon Sep 17 00:00:00 2001 From: Soulter <37870767+Soulter@users.noreply.github.com> Date: Thu, 13 Mar 2025 23:03:36 +0800 Subject: [PATCH 42/68] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 166af8a5e..b4d97fbbb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ _✨ 易上手的多平台 LLM 聊天机器人及开发框架 ✨_ Docker pull Static Badge [![wakatime](https://wakatime.com/badge/user/915e5316-99c6-4563-a483-ef186cf000c9/project/018e705a-a1a7-409a-a849-3013485e6c8e.svg)](https://wakatime.com/badge/user/915e5316-99c6-4563-a483-ef186cf000c9/project/018e705a-a1a7-409a-a849-3013485e6c8e) -![Dynamic JSON Badge](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.soulter.top%2Fastrbot%2Fstats&query=v&label=7%E6%97%A5%E6%B6%88%E6%81%AF%E4%B8%8A%E8%A1%8C%E9%87%8F&cacheSeconds=3600) +![Dynamic JSON Badge](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.soulter.top%2Fastrbot%2Fstats&query=v&label=7%E6%97%A5%E6%B6%88%E6%81%AF%E4%B8%8A%E8%A1%8C%E9%87%8F&cacheSeconds=60) [![codecov](https://codecov.io/gh/Soulter/AstrBot/graph/badge.svg?token=FF3P5967B8)](https://codecov.io/gh/Soulter/AstrBot) [![star](https://gitcode.com/Soulter/AstrBot/star/badge.svg)](https://gitcode.com/Soulter/AstrBot) From 135dbb8f07e3af4e11d7c400da6c18ba289461fd Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Fri, 14 Mar 2025 18:01:52 +0800 Subject: [PATCH 43/68] style: clean codes --- dashboard/src/components/shared/AstrBotConfig.vue | 7 ++++--- dashboard/src/components/shared/ExtensionCard.vue | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dashboard/src/components/shared/AstrBotConfig.vue b/dashboard/src/components/shared/AstrBotConfig.vue index cc39f7ff0..39d5812dc 100644 --- a/dashboard/src/components/shared/AstrBotConfig.vue +++ b/dashboard/src/components/shared/AstrBotConfig.vue @@ -1,10 +1,10 @@