From 27978b216d9d576175e106a6809477210ed83b0d Mon Sep 17 00:00:00 2001 From: roeseth Date: Sun, 9 Mar 2025 06:18:53 -0700 Subject: [PATCH 1/6] use system local timezone instead of hardcoded UTC+8 --- packages/astrbot/main.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index be7af7ca7..5793a64c6 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -1089,9 +1089,7 @@ UID: {user_id} 此 ID 可用于设置管理员。/op 授权管理员, /deo req.prompt = user_info + req.prompt if self.enable_datetime: - tz_offset = datetime.timedelta(hours=8) - tz = datetime.timezone(tz_offset) - current_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M") + current_time = datetime.datetime.now().astimezone().strftime("%Y-%m-%d %H:%M") req.system_prompt += f"\nCurrent datetime: {current_time}\n" if req.conversation: From 194409a117a0de792048ab7ceeabf125d49fe017 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 9 Mar 2025 13:23:51 +0000 Subject: [PATCH 2/6] :balloon: auto fixes by pre-commit hooks --- packages/astrbot/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index 5793a64c6..7138fef37 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -1089,7 +1089,9 @@ UID: {user_id} 此 ID 可用于设置管理员。/op 授权管理员, /deo req.prompt = user_info + req.prompt if self.enable_datetime: - current_time = datetime.datetime.now().astimezone().strftime("%Y-%m-%d %H:%M") + current_time = ( + datetime.datetime.now().astimezone().strftime("%Y-%m-%d %H:%M") + ) req.system_prompt += f"\nCurrent datetime: {current_time}\n" if req.conversation: From 1c55349f813550675baf3709cbb9d55927685a49 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Mon, 10 Mar 2025 23:57:47 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20=E9=92=89=E9=92=89=20webui=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/src/stores/common.js | 1 + 1 file changed, 1 insertion(+) diff --git a/dashboard/src/stores/common.js b/dashboard/src/stores/common.js index 928fc5451..93e66a459 100644 --- a/dashboard/src/stores/common.js +++ b/dashboard/src/stores/common.js @@ -18,6 +18,7 @@ export const useCommonStore = defineStore({ "gewechat": "https://astrbot.app/deploy/platform/gewechat.html", "lark": "https://astrbot.app/deploy/platform/lark.html", "telegram": "https://astrbot.app/deploy/platform/telegram.html", + "dingtalk": "https://astrbot.app/deploy/platform/dingtalk.html", }, pluginMarketData: [] From 0da871efd09e897d77ab03e01fec7b4e39202a11 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Mon, 10 Mar 2025 23:58:11 +0800 Subject: [PATCH 4/6] =?UTF-8?q?chore:=20=E6=97=A5=E5=BF=97=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/astrbot/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index be7af7ca7..bca542eb1 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -1,6 +1,7 @@ import aiohttp import datetime import builtins +import traceback import astrbot.api.star as star import astrbot.api.event.filter as filter from astrbot.api.event import AstrMessageEvent, MessageEventResult @@ -1072,6 +1073,7 @@ UID: {user_id} 此 ID 可用于设置管理员。/op 授权管理员, /deo conversation=conv, ) except BaseException as e: + logger.error(traceback.format_exc()) logger.error(f"主动回复失败: {e}") @filter.on_llm_request() From 9059d1fb17ab1eed839e5fb14c2d319d046d01cf Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 00:34:22 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9C=A8=E5=AF=B9=E8=AF=9D=E9=9A=94=E7=A6=BB=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E5=8F=AF=E4=BB=A5=E5=B0=86=E7=BE=A4=E8=81=8A=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E7=99=BD=E5=90=8D=E5=8D=95=20#746?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/pipeline/whitelist_check/stage.py | 2 +- packages/astrbot/main.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/astrbot/core/pipeline/whitelist_check/stage.py b/astrbot/core/pipeline/whitelist_check/stage.py index 024de0834..cff215dac 100644 --- a/astrbot/core/pipeline/whitelist_check/stage.py +++ b/astrbot/core/pipeline/whitelist_check/stage.py @@ -51,7 +51,7 @@ class WhitelistCheckStage(Stage): and event.get_message_type() == MessageType.FRIEND_MESSAGE ): return - if event.unified_msg_origin not in self.whitelist: + if event.unified_msg_origin not in self.whitelist and event.get_group_id() not in self.whitelist: if self.wl_log: logger.info( f"会话 ID {event.unified_msg_origin} 不在会话白名单中,已终止事件传播。请在配置文件中添加该会话 ID 到白名单。" diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index 70f9efa44..93e370e39 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -262,8 +262,15 @@ class Main(star.Star): """获取会话 ID 和 管理员 ID""" sid = event.unified_msg_origin user_id = str(event.get_sender_id()) - ret = f"""SID: {sid} 此 ID 可用于设置会话白名单。/wl 添加白名单, /dwl 删除白名单。 -UID: {user_id} 此 ID 可用于设置管理员。/op 授权管理员, /deop 取消管理员。""" + ret = f"""SID: {sid} 此 ID 可用于设置会话白名单。 +/wl 添加白名单, /dwl 删除白名单。 + +UID: {user_id} 此 ID 可用于设置管理员。 +/op 授权管理员, /deop 取消管理员。""" + + if self.context.get_config()["platform_settings"]["unique_session"] and event.get_group_id(): + ret += f"\n\n当前处于独立会话模式, 此群 ID: {event.get_group_id()}, 也可将此 ID 加入白名单来放行整个群聊。" + event.set_result(MessageEventResult().message(ret).use_t2i(False)) @filter.permission_type(filter.PermissionType.ADMIN) From 16622887de828b946310437aa06565bb5fb3cb4d Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 11 Mar 2025 00:47:37 +0800 Subject: [PATCH 6/6] =?UTF-8?q?perf:=20=E5=9C=A8=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=BC=82=E5=B8=B8=E6=97=B6=E6=9B=B4=E5=AE=8C?= =?UTF-8?q?=E6=95=B4=E7=9A=84=E6=8A=A5=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/pipeline/stage.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/astrbot/core/pipeline/stage.py b/astrbot/core/pipeline/stage.py index f1f8587a6..7291dfc3e 100644 --- a/astrbot/core/pipeline/stage.py +++ b/astrbot/core/pipeline/stage.py @@ -1,6 +1,7 @@ from __future__ import annotations import abc import inspect +import traceback from astrbot.api import logger from typing import List, AsyncGenerator, Union, Awaitable from astrbot.core.platform.astr_message_event import AstrMessageEvent @@ -43,25 +44,32 @@ class Stage(abc.ABC): """调用 Handler。""" # 判断 handler 是否是类方法(通过装饰器注册的没有 __self__ 属性) ready_to_call = None + + trace_ = None + try: ready_to_call = handler(event, *args, **kwargs) - except TypeError as e: + except TypeError as _: # 向下兼容 - logger.debug(str(e)) + trace_ = traceback.format_exc() ready_to_call = handler(event, ctx.plugin_manager.context, *args, **kwargs) if isinstance(ready_to_call, AsyncGenerator): _has_yielded = False - async for ret in ready_to_call: - # 如果处理函数是生成器,返回值只能是 MessageEventResult 或者 None(无返回值) - _has_yielded = True - if isinstance(ret, (MessageEventResult, CommandResult)): - event.set_result(ret) + try: + async for ret in ready_to_call: + # 如果处理函数是生成器,返回值只能是 MessageEventResult 或者 None(无返回值) + _has_yielded = True + if isinstance(ret, (MessageEventResult, CommandResult)): + event.set_result(ret) + yield + else: + yield ret + if not _has_yielded: yield - else: - yield ret - if not _has_yielded: - yield + except Exception as e: + logger.error(f"Previous Error: {trace_}") + raise e elif inspect.iscoroutine(ready_to_call): # 如果只是一个 coroutine ret = await ready_to_call