koishi-plugin-aka-60s-api 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +111 -1
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -70,6 +70,21 @@ function apply(ctx, config) {
70
70
  let moyuScheduleTimeout = null;
71
71
  let goldScheduleTimeout = null;
72
72
  let fuelScheduleTimeout = null;
73
+ const sentToday = {
74
+ news: "",
75
+ aiNews: "",
76
+ moyu: "",
77
+ gold: "",
78
+ fuel: ""
79
+ };
80
+ function getTodayString() {
81
+ const now = /* @__PURE__ */ new Date();
82
+ const year = now.getFullYear();
83
+ const month = `${now.getMonth() + 1}`.padStart(2, "0");
84
+ const day = `${now.getDate()}`.padStart(2, "0");
85
+ return `${year}-${month}-${day}`;
86
+ }
87
+ __name(getTodayString, "getTodayString");
73
88
  async function resolveGroupScheduleChannels(whitelist, tag) {
74
89
  try {
75
90
  if (!whitelist.length) {
@@ -540,6 +555,14 @@ ${newsItem.link}`).join("\n\n");
540
555
  return target.getTime() - now.getTime();
541
556
  }
542
557
  __name(getMsUntilNextTime, "getMsUntilNextTime");
558
+ function isTimePassedToday(timeStr) {
559
+ const [hours, minutes] = timeStr.split(":").map(Number);
560
+ const now = /* @__PURE__ */ new Date();
561
+ const target = /* @__PURE__ */ new Date();
562
+ target.setHours(hours, minutes, 0, 0);
563
+ return target <= now;
564
+ }
565
+ __name(isTimePassedToday, "isTimePassedToday");
543
566
  function setupSchedule() {
544
567
  if (!config.enableSchedule) {
545
568
  logInfo("60s API: 定时发送新闻功能已禁用");
@@ -550,15 +573,33 @@ ${newsItem.link}`).join("\n\n");
550
573
  scheduleTimeout = null;
551
574
  }
552
575
  try {
576
+ const today = getTodayString();
577
+ if (sentToday.news === today) {
578
+ logInfo("60s API: 今日新闻已发送过,设置为明天任务", { today });
579
+ const msUntilNext2 = getMsUntilNextTime(config.scheduleTime) + 24 * 60 * 60 * 1e3;
580
+ scheduleTimeout = setTimeout(() => {
581
+ sentToday.news = "";
582
+ setupSchedule();
583
+ }, msUntilNext2);
584
+ return;
585
+ }
553
586
  const msUntilNext = getMsUntilNextTime(config.scheduleTime);
554
587
  logInfo("60s API: 新闻定时任务已设置", {
555
588
  scheduleTime: config.scheduleTime,
556
589
  msUntilNext,
557
590
  nextRun: new Date(Date.now() + msUntilNext).toLocaleString(),
558
- whitelist: config.scheduleWhitelist
591
+ whitelist: config.scheduleWhitelist,
592
+ today,
593
+ alreadySent: sentToday.news === today
559
594
  });
560
595
  scheduleTimeout = setTimeout(async () => {
596
+ if (sentToday.news === getTodayString()) {
597
+ logInfo("60s API: 今日新闻已在本次任务等待期间发送,跳过");
598
+ setupSchedule();
599
+ return;
600
+ }
561
601
  await sendNewsToChannels();
602
+ sentToday.news = getTodayString();
562
603
  setupSchedule();
563
604
  }, msUntilNext);
564
605
  } catch (error) {
@@ -576,6 +617,16 @@ ${newsItem.link}`).join("\n\n");
576
617
  aiNewsScheduleTimeout = null;
577
618
  }
578
619
  try {
620
+ const today = getTodayString();
621
+ if (sentToday.aiNews === today) {
622
+ logInfo("60s API: 今日AI快报已发送过,设置为明天任务", { today });
623
+ const msUntilNext2 = getMsUntilNextTime(config.aiNewsScheduleTime) + 24 * 60 * 60 * 1e3;
624
+ aiNewsScheduleTimeout = setTimeout(() => {
625
+ sentToday.aiNews = "";
626
+ setupAiNewsSchedule();
627
+ }, msUntilNext2);
628
+ return;
629
+ }
579
630
  const msUntilNext = getMsUntilNextTime(config.aiNewsScheduleTime);
580
631
  logInfo("60s API: AI快报定时任务已设置", {
581
632
  scheduleTime: config.aiNewsScheduleTime,
@@ -584,7 +635,13 @@ ${newsItem.link}`).join("\n\n");
584
635
  whitelist: config.scheduleWhitelist
585
636
  });
586
637
  aiNewsScheduleTimeout = setTimeout(async () => {
638
+ if (sentToday.aiNews === getTodayString()) {
639
+ logInfo("60s API: 今日AI快报已在本次任务等待期间发送,跳过");
640
+ setupAiNewsSchedule();
641
+ return;
642
+ }
587
643
  await sendAiNewsToChannels();
644
+ sentToday.aiNews = getTodayString();
588
645
  setupAiNewsSchedule();
589
646
  }, msUntilNext);
590
647
  } catch (error) {
@@ -602,6 +659,16 @@ ${newsItem.link}`).join("\n\n");
602
659
  moyuScheduleTimeout = null;
603
660
  }
604
661
  try {
662
+ const today = getTodayString();
663
+ if (sentToday.moyu === today) {
664
+ logInfo("60s API: 今日摸鱼日报已发送过,设置为明天任务", { today });
665
+ const msUntilNext2 = getMsUntilNextTime(config.moyuScheduleTime) + 24 * 60 * 60 * 1e3;
666
+ moyuScheduleTimeout = setTimeout(() => {
667
+ sentToday.moyu = "";
668
+ setupMoyuSchedule();
669
+ }, msUntilNext2);
670
+ return;
671
+ }
605
672
  const msUntilNext = getMsUntilNextTime(config.moyuScheduleTime);
606
673
  logInfo("60s API: 摸鱼日报定时任务已设置", {
607
674
  scheduleTime: config.moyuScheduleTime,
@@ -610,7 +677,13 @@ ${newsItem.link}`).join("\n\n");
610
677
  whitelist: config.scheduleWhitelist
611
678
  });
612
679
  moyuScheduleTimeout = setTimeout(async () => {
680
+ if (sentToday.moyu === getTodayString()) {
681
+ logInfo("60s API: 今日摸鱼日报已在本次任务等待期间发送,跳过");
682
+ setupMoyuSchedule();
683
+ return;
684
+ }
613
685
  await sendMoyuToChannels();
686
+ sentToday.moyu = getTodayString();
614
687
  setupMoyuSchedule();
615
688
  }, msUntilNext);
616
689
  } catch (error) {
@@ -628,6 +701,16 @@ ${newsItem.link}`).join("\n\n");
628
701
  goldScheduleTimeout = null;
629
702
  }
630
703
  try {
704
+ const today = getTodayString();
705
+ if (sentToday.gold === today) {
706
+ logInfo("60s API: 今日金价已发送过,设置为明天任务", { today });
707
+ const msUntilNext2 = getMsUntilNextTime(config.goldScheduleTime) + 24 * 60 * 60 * 1e3;
708
+ goldScheduleTimeout = setTimeout(() => {
709
+ sentToday.gold = "";
710
+ setupGoldSchedule();
711
+ }, msUntilNext2);
712
+ return;
713
+ }
631
714
  const msUntilNext = getMsUntilNextTime(config.goldScheduleTime);
632
715
  logInfo("60s API: 今日金价定时任务已设置", {
633
716
  scheduleTime: config.goldScheduleTime,
@@ -636,7 +719,13 @@ ${newsItem.link}`).join("\n\n");
636
719
  whitelist: config.scheduleWhitelist
637
720
  });
638
721
  goldScheduleTimeout = setTimeout(async () => {
722
+ if (sentToday.gold === getTodayString()) {
723
+ logInfo("60s API: 今日金价已在本次任务等待期间发送,跳过");
724
+ setupGoldSchedule();
725
+ return;
726
+ }
639
727
  await sendGoldToChannels();
728
+ sentToday.gold = getTodayString();
640
729
  setupGoldSchedule();
641
730
  }, msUntilNext);
642
731
  } catch (error) {
@@ -654,6 +743,16 @@ ${newsItem.link}`).join("\n\n");
654
743
  fuelScheduleTimeout = null;
655
744
  }
656
745
  try {
746
+ const today = getTodayString();
747
+ if (sentToday.fuel === today) {
748
+ logInfo("60s API: 今日油价已发送过,设置为明天任务", { today });
749
+ const msUntilNext2 = getMsUntilNextTime(config.fuelScheduleTime) + 24 * 60 * 60 * 1e3;
750
+ fuelScheduleTimeout = setTimeout(() => {
751
+ sentToday.fuel = "";
752
+ setupFuelSchedule();
753
+ }, msUntilNext2);
754
+ return;
755
+ }
657
756
  const msUntilNext = getMsUntilNextTime(config.fuelScheduleTime);
658
757
  logInfo("60s API: 今日油价定时任务已设置", {
659
758
  scheduleTime: config.fuelScheduleTime,
@@ -662,7 +761,13 @@ ${newsItem.link}`).join("\n\n");
662
761
  whitelist: config.scheduleWhitelist
663
762
  });
664
763
  fuelScheduleTimeout = setTimeout(async () => {
764
+ if (sentToday.fuel === getTodayString()) {
765
+ logInfo("60s API: 今日油价已在本次任务等待期间发送,跳过");
766
+ setupFuelSchedule();
767
+ return;
768
+ }
665
769
  await sendFuelToChannels();
770
+ sentToday.fuel = getTodayString();
666
771
  setupFuelSchedule();
667
772
  }, msUntilNext);
668
773
  } catch (error) {
@@ -1067,6 +1172,11 @@ ${shortDetail}
1067
1172
  clearTimeout(fuelScheduleTimeout);
1068
1173
  fuelScheduleTimeout = null;
1069
1174
  }
1175
+ sentToday.news = "";
1176
+ sentToday.aiNews = "";
1177
+ sentToday.moyu = "";
1178
+ sentToday.gold = "";
1179
+ sentToday.fuel = "";
1070
1180
  });
1071
1181
  }
1072
1182
  __name(apply, "apply");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-aka-60s-api",
3
3
  "description": "调用60s API转发信息的工具 - 个人用",
4
- "version": "0.2.2",
4
+ "version": "0.2.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [