Merge branch 'Soulter:master' into master

This commit is contained in:
beat4ocean
2025-03-11 08:54:55 +08:00
committed by GitHub
4 changed files with 35 additions and 17 deletions

View File

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

View File

@@ -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 到白名单。"

View File

@@ -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: []

View File

@@ -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
@@ -261,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 <SID> 添加白名单, /dwl <SID> 删除白名单。
UID: {user_id} 此 ID 可用于设置管理员。/op <UID> 授权管理员, /deop <UID> 取消管理员。"""
ret = f"""SID: {sid} 此 ID 可用于设置会话白名单。
/wl <SID> 添加白名单, /dwl <SID> 删除白名单。
UID: {user_id} 此 ID 可用于设置管理员。
/op <UID> 授权管理员, /deop <UID> 取消管理员。"""
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)
@@ -1072,6 +1080,7 @@ UID: {user_id} 此 ID 可用于设置管理员。/op <UID> 授权管理员, /deo
conversation=conv,
)
except BaseException as e:
logger.error(traceback.format_exc())
logger.error(f"主动回复失败: {e}")
@filter.on_llm_request()
@@ -1089,9 +1098,9 @@ UID: {user_id} 此 ID 可用于设置管理员。/op <UID> 授权管理员, /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: