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