diff --git a/astrbot/core/pipeline/waking_check/stage.py b/astrbot/core/pipeline/waking_check/stage.py index 206baf11e..eeede1667 100644 --- a/astrbot/core/pipeline/waking_check/stage.py +++ b/astrbot/core/pipeline/waking_check/stage.py @@ -86,6 +86,10 @@ class WakingCheckStage(Stage): if len(handler.event_filters) == 0: # 不可能有这种情况, 也不允许有这种情况 continue + + if 'sub_command' in handler.extras_configs: + # 如果是子指令 + continue for filter in handler.event_filters: try: diff --git a/astrbot/core/platform/sources/gewechat/client.py b/astrbot/core/platform/sources/gewechat/client.py index e96145bbf..2489fc056 100644 --- a/astrbot/core/platform/sources/gewechat/client.py +++ b/astrbot/core/platform/sources/gewechat/client.py @@ -3,6 +3,7 @@ import asyncio import aiohttp import quart import base64 +import datetime from astrbot.api.platform import AstrBotMessage, MessageMember, MessageType from astrbot.api.message_components import Plain, Image, At, Record @@ -67,6 +68,17 @@ class SimpleGewechatClient(): logger.critical("收到 gewechat 下线通知。") return + if 'Data' in data and 'CreateTime' in data['Data']: + # 得到系统 UTF+8 的 ts + tz_offset = datetime.timedelta(hours=8) + tz = datetime.timezone(tz_offset) + ts = datetime.datetime.now(tz).timestamp() + create_time = data['Data']['CreateTime'] + if create_time < ts - 30: + logger.warning(f"消息时间戳过旧: {create_time},当前时间戳: {ts}") + return + + abm = AstrBotMessage() d = data['Data'] @@ -143,7 +155,7 @@ class SimpleGewechatClient(): abm.message.append(Record(file=file_path, url=file_path)) case _: - logger.error(f"未实现的消息类型: {d['MsgType']}") + logger.info(f"未实现的消息类型: {d['MsgType']}") return logger.info(f"abm: {abm}") diff --git a/astrbot/core/star/register/star_handler.py b/astrbot/core/star/register/star_handler.py index 2a5e40a63..9226b04a7 100644 --- a/astrbot/core/star/register/star_handler.py +++ b/astrbot/core/star/register/star_handler.py @@ -68,12 +68,14 @@ def register_command(command_name: str = None, *args, **kwargs): add_to_event_filters = True def decorator(awaitable): + if not add_to_event_filters: + kwargs['sub_command'] = True # 打一个标记,表示这是一个子指令,再 wakingstage 阶段这个 handler 将会直接被跳过(其父指令会接管) handler_md = get_handler_or_create(awaitable, EventType.AdapterMessageEvent, **kwargs) new_command.init_handler_md(handler_md) if add_to_event_filters: # 裸指令 handler_md.event_filters.append(new_command) - + return awaitable return decorator