From b2ed9646f5efb8226b29f7b12ee890ea0aa503af Mon Sep 17 00:00:00 2001 From: liuwei Date: Tue, 10 Jun 2025 17:59:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/message_push_task/main.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/message_push_task/main.py b/plugins/message_push_task/main.py index deb02e9..3032715 100644 --- a/plugins/message_push_task/main.py +++ b/plugins/message_push_task/main.py @@ -51,6 +51,7 @@ class MessagePushTask(MessagePluginInterface): super().__init__() self.feature = self.register_feature() self.db = None + self._task_execution_records = {} # 用于记录任务执行状态 def initialize(self, context: Dict[str, Any]) -> bool: """初始化插件""" @@ -121,6 +122,11 @@ class MessagePushTask(MessagePluginInterface): if roomid and gbm.get_group_permission(roomid, self.feature) == PermissionStatus.DISABLED: return False, "没有权限" + def _get_execution_key(self, task_id: str, hour: int, minute: int) -> str: + """生成任务执行记录的唯一键""" + now = datetime.now() + return f"{task_id}_{now.date()}_{hour}_{minute}" + async def process_scheduled_tasks(self): """处理定时任务""" try: @@ -162,6 +168,16 @@ class MessagePushTask(MessagePluginInterface): time_diff = abs((now - target_time).total_seconds()) if time_diff > 5: # 允许5秒的误差 continue + + # 检查是否已经在这个时间点执行过 + execution_key = self._get_execution_key(task['task_id'], hour, minute) + if execution_key in self._task_execution_records: + self.LOG.info(f"任务 {task['task_id']} 今天已经执行过,跳过") + continue + + # 记录执行状态 + self._task_execution_records[execution_key] = now + except (ValueError, AttributeError) as e: self.LOG.error(f"无效的执行时间格式: {recurring_time}, 错误: {e}") continue