MCPcopy Create free account
hub / github.com/TeleBoxOrg/TeleBox_Plugins / registerTask

Method registerTask

sendat/sendat.ts:318–379  ·  view source on GitHub ↗
(task: SendTask)

Source from the content-addressed store, hash-verified

316
317 const taskName = `sendat_${task.task_id}`;
318 // Guard: delete any zombie cron from a previous generation before re-registering
319 if (cronManager.has(taskName)) {
320 cronManager.del(taskName);
321 }
322
323 if (task.interval) {
324 if (task.cron) {
325 // 定时任务(每天固定时间)
326 const cronExpression = `${task.second} ${task.minute} ${task.hour} * * *`;
327 cronManager.set(taskName, cronExpression, async () => {
328 await this.executeTask(task);
329 });
330 } else {
331 // 间隔任务
332 const intervalMs =
333 (parseInt(task.hour) * 3600 +
334 parseInt(task.minute) * 60 +
335 parseInt(task.second)) * 1000;
336
337 if (intervalMs > 0) {
338 // 使用cron表达式模拟间隔任务
339 const seconds = parseInt(task.second);
340 const minutes = parseInt(task.minute);
341 const hours = parseInt(task.hour);
342
343 let cronExpression = '';
344 if (hours > 0) {
345 cronExpression = `${seconds} ${minutes} */${hours} * * *`;
346 } else if (minutes > 0) {
347 cronExpression = `${seconds} */${minutes} * * * *`;
348 } else {
349 cronExpression = `*/${seconds} * * * * *`;
350 }
351
352 cronManager.set(taskName, cronExpression, async () => {
353 await this.executeTask(task);
354 });
355 }
356 }
357 } else {
358 // 单次任务 - 使用cron表达式指定具体时间
359 const now = new Date();
360 const targetTime = new Date();
361 targetTime.setHours(parseInt(task.hour), parseInt(task.minute), parseInt(task.second));
362
363 if (targetTime <= now) {
364 targetTime.setDate(targetTime.getDate() + 1);
365 }
366
367 const cronExpression = `${targetTime.getSeconds()} ${targetTime.getMinutes()} ${targetTime.getHours()} ${targetTime.getDate()} ${targetTime.getMonth() + 1} *`;
368
369 cronManager.set(taskName, cronExpression, async () => {
370 await this.executeTask(task);
371 // 单次任务执行后删除
372 await this.removeTask(task.task_id);
373 });
374 }
375 }

Callers 3

addTaskMethod · 0.95
resumeTaskMethod · 0.95
registerAllTasksMethod · 0.95

Calls 3

executeTaskMethod · 0.95
removeTaskMethod · 0.95
setMethod · 0.45

Tested by

no test coverage detected