koishi-plugin-bilibili-notify 3.0.3 → 3.0.4

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.
@@ -12,6 +12,7 @@ const qrcode_1 = __importDefault(require("qrcode"));
12
12
  const utils_1 = require("./utils");
13
13
  // Types
14
14
  const type_1 = require("./type");
15
+ const luxon_1 = require("luxon");
15
16
  // TODO:WorlCloud
16
17
  // import { Segment, useDefault } from "segmentit";
17
18
  class ComRegister {
@@ -481,16 +482,16 @@ class ComRegister {
481
482
  dynamicDetect() {
482
483
  // 检测初始化变量
483
484
  let detectSetup = true;
484
- // 更新基线
485
- let updateBaseline;
485
+ // 时间线
486
+ let timeline;
486
487
  // 第一条动态的动态ID
487
488
  let dynamicIdStr1st;
488
- // 第二条动态的动态ID
489
- let dynamicIdStr2nd;
490
489
  // 定义handler
491
490
  const handler = async () => {
492
- // 检测启动初始化
491
+ // 动态监测启动初始化
493
492
  if (detectSetup) {
493
+ // logger
494
+ this.logger.info("动态监测初始化中...");
494
495
  // 使用withRetry函数进行重试
495
496
  const content = await (0, utils_1.withRetry)(async () => {
496
497
  // 获取动态内容
@@ -505,24 +506,21 @@ class ComRegister {
505
506
  // 判断获取动态信息是否成功
506
507
  if (content.code !== 0)
507
508
  return;
508
- // 设置更新基线
509
- updateBaseline = content.data.update_baseline;
510
509
  // 设置第一条动态的动态ID
511
510
  dynamicIdStr1st = content.data?.items[0]?.id_str || "0";
512
- // 判断第二条动态是否存在
513
- if (content.data?.items[1]) {
514
- // 设置第二条动态的动态ID
515
- dynamicIdStr2nd = content.data.items[1].id_str;
516
- }
511
+ // 设置时间线
512
+ timeline = content.data?.items[0]?.modules.module_author.pub_ts || luxon_1.DateTime.now().toSeconds();
517
513
  // 设置初始化为false
518
514
  detectSetup = false;
515
+ // logger
516
+ this.logger.info("动态监测初始化完毕!");
519
517
  // 初始化完成
520
518
  return;
521
519
  }
522
520
  // 使用withRetry函数进行重试
523
521
  const content = await (0, utils_1.withRetry)(async () => {
524
522
  // 获取动态内容
525
- return (await this.ctx.ba.getAllDynamic(updateBaseline));
523
+ return (await this.ctx.ba.getAllDynamic());
526
524
  }, 1).catch((e) => {
527
525
  // logger
528
526
  this.logger.error(`dynamicDetect getAllDynamic() 发生了错误,错误为:${e.message}`);
@@ -574,87 +572,85 @@ class ComRegister {
574
572
  }
575
573
  }
576
574
  }
577
- // 获取数据内容
578
- const data = content.data;
579
- // 更新基线
580
- updateBaseline = data.update_baseline;
581
- // 有新动态内容
582
- const items = data.items;
575
+ const items = content.data.items;
583
576
  // 检查更新的动态
584
577
  for (const item of items) {
585
- // 动态ID如果一致则结束循环
586
- if (item.id_str === dynamicIdStr1st)
587
- break;
588
- if (item.id_str === dynamicIdStr2nd)
589
- break;
590
578
  // 没有动态内容则直接跳过
591
579
  if (!item)
592
580
  continue;
593
- // 从动态数据中取出UP主名称、UID和动态ID
594
- const upUID = item.modules.module_author.mid.toString();
595
- const upName = item.modules.module_author.name;
581
+ // 获取动态ID
596
582
  const dynamicId = item.id_str;
597
- // 寻找关注的UP主的动态
598
- for (const sub of this.subManager) {
599
- // 判断是否是订阅的UP主
600
- if (sub.dynamic && sub.uid === upUID) {
601
- // 订阅该UP主,推送该动态
602
- // 推送该条动态
603
- const buffer = await (0, utils_1.withRetry)(async () => {
604
- // 渲染图片
605
- return await this.ctx.gi.generateDynamicImg(item, sub.card);
606
- }, 1).catch(async (e) => {
607
- // 直播开播动态,不做处理
608
- if (e.message === "直播开播动态,不做处理")
609
- return;
610
- if (e.message === "出现关键词,屏蔽该动态") {
611
- // 如果需要发送才发送
612
- if (this.config.filter.notify) {
613
- await this.sendMsg(sub.target, `${upName}发布了一条含有屏蔽关键字的动态`);
583
+ // 动态ID如果一致则结束循环
584
+ if (dynamicId === dynamicIdStr1st)
585
+ break;
586
+ // 判断动态时间戳是否大于时间线
587
+ if (item.modules.module_author.pub_ts > timeline) {
588
+ // 从动态数据中取出UP主名称、UID
589
+ const upUID = item.modules.module_author.mid.toString();
590
+ const upName = item.modules.module_author.name;
591
+ // 寻找关注的UP主的动态
592
+ for (const sub of this.subManager) {
593
+ // 判断是否是订阅的UP主
594
+ if (sub.dynamic && sub.uid === upUID) {
595
+ // 订阅该UP主,推送该动态
596
+ // 推送该条动态
597
+ const buffer = await (0, utils_1.withRetry)(async () => {
598
+ // 渲染图片
599
+ return await this.ctx.gi.generateDynamicImg(item, sub.card);
600
+ }, 1).catch(async (e) => {
601
+ // 直播开播动态,不做处理
602
+ if (e.message === "直播开播动态,不做处理")
603
+ return;
604
+ if (e.message === "出现关键词,屏蔽该动态") {
605
+ // 如果需要发送才发送
606
+ if (this.config.filter.notify) {
607
+ await this.sendMsg(sub.target, `${upName}发布了一条含有屏蔽关键字的动态`);
608
+ }
609
+ return;
614
610
  }
615
- return;
616
- }
617
- if (e.message === "已屏蔽转发动态") {
618
- if (this.config.filter.notify) {
619
- await this.sendMsg(sub.target, `${upName}转发了一条动态,已屏蔽`);
611
+ if (e.message === "已屏蔽转发动态") {
612
+ if (this.config.filter.notify) {
613
+ await this.sendMsg(sub.target, `${upName}转发了一条动态,已屏蔽`);
614
+ }
615
+ return;
620
616
  }
621
- return;
622
- }
623
- // 未知错误
624
- this.logger.error(`dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:${e.message}`);
625
- // 发送私聊消息并重启服务
626
- await this.sendPrivateMsgAndStopService();
627
- });
628
- // 判断是否执行成功,未执行成功直接返回
629
- if (!buffer)
630
- continue;
631
- // 判断是否需要发送URL
632
- const dUrl = this.config.dynamicUrl
633
- ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}`
634
- : "";
635
- // logger
636
- this.logger.info("推送动态中...");
637
- // 发送推送卡片
638
- await this.sendMsg(sub.target, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, "image/png"), dUrl] }));
639
- // 判断是否需要发送动态中的图片
640
- if (this.config.pushImgsInDynamic) {
641
- // 判断是否为图文动态,且存在draw
642
- if (item.type === "DYNAMIC_TYPE_DRAW" &&
643
- item.modules.module_dynamic.major?.draw) {
644
- for (const img of item.modules.module_dynamic.major.draw
645
- .items) {
646
- await this.sendMsg(sub.target, (0, jsx_runtime_1.jsx)("img", { src: img.src, alt: "\u52A8\u6001\u56FE\u7247" }));
617
+ // 未知错误
618
+ this.logger.error(`dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:${e.message}`);
619
+ // 发送私聊消息并重启服务
620
+ await this.sendPrivateMsgAndStopService();
621
+ });
622
+ // 判断是否执行成功,未执行成功直接返回
623
+ if (!buffer)
624
+ continue;
625
+ // 判断是否需要发送URL
626
+ const dUrl = this.config.dynamicUrl
627
+ ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}`
628
+ : "";
629
+ // logger
630
+ this.logger.info("推送动态中...");
631
+ // 发送推送卡片
632
+ await this.sendMsg(sub.target, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, "image/png"), dUrl] }));
633
+ // 判断是否需要发送动态中的图片
634
+ if (this.config.pushImgsInDynamic) {
635
+ // 判断是否为图文动态,且存在draw
636
+ if (item.type === "DYNAMIC_TYPE_DRAW" &&
637
+ item.modules.module_dynamic.major?.draw) {
638
+ for (const img of item.modules.module_dynamic.major.draw
639
+ .items) {
640
+ await this.sendMsg(sub.target, (0, jsx_runtime_1.jsx)("img", { src: img.src, alt: "\u52A8\u6001\u56FE\u7247" }));
641
+ }
647
642
  }
648
643
  }
644
+ // logger
645
+ this.logger.info("动态推送完毕!");
649
646
  }
650
- // logger
651
- this.logger.info("动态推送完毕!");
652
647
  }
653
648
  }
654
649
  }
655
650
  // 更新本次请求第一条动态的动态ID
656
- dynamicIdStr1st = items[0]?.id_str || "0";
657
- dynamicIdStr2nd = items[1]?.id_str || "0";
651
+ dynamicIdStr1st = items[0].id_str;
652
+ // 更新时间线
653
+ timeline = items[0].modules.module_author.pub_ts || luxon_1.DateTime.now().toSeconds();
658
654
  };
659
655
  // 返回一个闭包函数
660
656
  return (0, utils_1.withLock)(handler);
@@ -662,16 +658,18 @@ class ComRegister {
662
658
  debug_dynamicDetect() {
663
659
  // 检测初始化变量
664
660
  let detectSetup = true;
665
- // 更新基线
666
- let updateBaseline;
661
+ // 时间线
662
+ let timeline;
667
663
  // 第一条动态的动态ID
668
664
  let dynamicIdStr1st;
669
- let dynamicIdStr2nd;
670
665
  // 定义handler
671
666
  const handler = async () => {
672
- this.logger.info(`初始化状态:${detectSetup}`);
673
- // 检测启动初始化
667
+ // 动态监测启动初始化
674
668
  if (detectSetup) {
669
+ // logger
670
+ this.logger.info("动态监测初始化中...");
671
+ // logger
672
+ this.logger.info("正在获取动态信息...");
675
673
  // 使用withRetry函数进行重试
676
674
  const content = await (0, utils_1.withRetry)(async () => {
677
675
  // 获取动态内容
@@ -681,40 +679,46 @@ class ComRegister {
681
679
  this.logger.error(`dynamicDetect getAllDynamic() 发生了错误,错误为:${e.message}`);
682
680
  });
683
681
  // content不存在则直接返回
684
- if (!content)
682
+ if (!content) {
683
+ // logger
684
+ this.logger.info("获取动态信息失败!");
685
685
  return;
686
+ }
686
687
  // 判断获取动态信息是否成功
687
- if (content.code !== 0)
688
+ if (content.code !== 0) {
689
+ // logger
690
+ this.logger.info("获取动态信息失败!");
688
691
  return;
689
- // 设置更新基线
690
- updateBaseline = content.data.update_baseline;
691
- this.logger.info(`更新基线:${updateBaseline}`);
692
+ }
692
693
  // 设置第一条动态的动态ID
693
- dynamicIdStr1st = content.data.items[0]?.id_str || "0";
694
- dynamicIdStr2nd = content.data.items[1]?.id_str || "0";
695
- this.logger.info(`第一条动态ID:${dynamicIdStr1st}`);
696
- this.logger.info(`第二条动态ID:${dynamicIdStr2nd}`);
694
+ dynamicIdStr1st = content.data?.items[0]?.id_str || "0";
695
+ // logger
696
+ this.logger.info(`获取到第一条动态ID:${dynamicIdStr1st}`);
697
+ // 设置时间线
698
+ timeline = content.data?.items[0]?.modules.module_author.pub_ts || luxon_1.DateTime.now().toSeconds();
699
+ // logger
700
+ this.logger.info(`获取到时间线信息:${timeline}`);
697
701
  // 设置初始化为false
698
702
  detectSetup = false;
703
+ // logger
704
+ this.logger.info("动态监测初始化完毕!");
699
705
  // 初始化完成
700
- this.logger.info("动态检测初始化完成");
701
706
  return;
702
707
  }
703
- this.logger.info(`更新基线:${updateBaseline}`);
704
- this.logger.info(`第一条动态ID:${dynamicIdStr1st}`);
705
- this.logger.info(`第二条动态ID:${dynamicIdStr2nd}`);
706
- this.logger.info("获取动态内容中...");
708
+ // logger
709
+ this.logger.info("正在获取动态信息...");
707
710
  // 使用withRetry函数进行重试
708
711
  const content = await (0, utils_1.withRetry)(async () => {
709
712
  // 获取动态内容
710
- return (await this.ctx.ba.getAllDynamic(updateBaseline));
713
+ return (await this.ctx.ba.getAllDynamic());
711
714
  }, 1).catch((e) => {
712
715
  // logger
713
716
  this.logger.error(`dynamicDetect getAllDynamic() 发生了错误,错误为:${e.message}`);
714
717
  });
715
718
  // content不存在则直接返回
716
719
  if (!content) {
717
- this.logger.error("获取动态内容失败");
720
+ // logger
721
+ this.logger.info("获取动态信息失败!");
718
722
  return;
719
723
  }
720
724
  // 判断获取动态内容是否成功
@@ -761,100 +765,126 @@ class ComRegister {
761
765
  }
762
766
  }
763
767
  }
764
- this.logger.error("获取动态内容成功,开始检测动态");
765
- // 获取数据内容
766
- const data = content.data;
767
- // 更新基线
768
- updateBaseline = data.update_baseline;
769
- this.logger.info(`更新基线:${updateBaseline}`);
770
- // 有新动态内容
771
- const items = data.items;
768
+ // logger
769
+ this.logger.info("成功获取动态信息!开始检查更新的动态...");
770
+ // 获取动态内容
771
+ const items = content.data.items;
772
772
  // 检查更新的动态
773
773
  for (const item of items) {
774
+ // 没有动态内容则直接跳过
775
+ if (!item) {
776
+ // logger
777
+ this.logger.info("动态内容为空,跳过该动态");
778
+ continue;
779
+ }
780
+ // 获取动态ID
781
+ const dynamicId = item.id_str;
782
+ // logger
783
+ this.logger.info(`当前动态ID:${dynamicId}`);
784
+ this.logger.info(`上一次获取到第一条动态ID:${dynamicId}`);
774
785
  // 动态ID如果一致则结束循环
775
- if (item.id_str === dynamicIdStr1st ||
776
- item.id_str === dynamicIdStr2nd) {
786
+ if (dynamicId === dynamicIdStr1st) {
777
787
  // logger
778
- this.logger.info("动态ID与上次检测第一条一致,结束循环");
779
- this.logger.info("动态检测结束");
780
- // 结束循环
788
+ this.logger.info("动态ID与上一次获取第一条一致,结束循环");
781
789
  break;
782
790
  }
783
- // 没有动态内容则直接跳过
784
- if (!item)
785
- continue;
786
- // 从动态数据中取出UP主名称、UID和动态ID
787
- const upUID = item.modules.module_author.mid.toString();
788
- const upName = item.modules.module_author.name;
789
- const dynamicId = item.id_str;
790
- // 寻找关注的UP主的动态
791
- for (const sub of this.subManager) {
792
- // 判断是否是订阅的UP主
793
- if (sub.dynamic && sub.uid === upUID) {
794
- // 订阅该UP主,推送该动态
795
- this.logger.info(`寻找到需要推送的动态,订阅的UP主:${upName}(${upUID}),动态ID:${dynamicId}`);
796
- this.logger.info("渲染推送卡片中...");
797
- // 推送该条动态
798
- const buffer = await (0, utils_1.withRetry)(async () => {
799
- // 渲染图片
800
- return await this.ctx.gi.generateDynamicImg(item, sub.card);
801
- }, 1).catch(async (e) => {
802
- // 直播开播动态,不做处理
803
- if (e.message === "直播开播动态,不做处理")
804
- return;
805
- if (e.message === "出现关键词,屏蔽该动态") {
806
- // 如果需要发送才发送
807
- if (this.config.filter.notify) {
808
- await this.sendMsg(sub.target, `${upName}发布了一条含有屏蔽关键字的动态`);
791
+ // logger
792
+ this.logger.info(`当前动态时间线:${item.modules.module_author.pub_ts}`);
793
+ this.logger.info(`上一次获取到第一条动态时间线:${timeline}`);
794
+ // 判断动态时间戳是否大于时间线
795
+ if (item.modules.module_author.pub_ts > timeline) {
796
+ // logger
797
+ this.logger.info("动态时间线大于上一次获取到第一条动态时间线,开始判断是否是订阅的UP主...");
798
+ // 从动态数据中取出UP主名称、UID
799
+ const upUID = item.modules.module_author.mid.toString();
800
+ const upName = item.modules.module_author.name;
801
+ // logger
802
+ this.logger.info(`当前动态UP主UID:${upUID},UP主名称:${upName}`);
803
+ // 寻找关注的UP主的动态
804
+ for (const sub of this.subManager) {
805
+ // 判断是否是订阅的UP主
806
+ if (sub.dynamic && sub.uid === upUID) {
807
+ // logger:订阅该UP主,推送该动态
808
+ this.logger.info("订阅该UP主,开始推送该动态...");
809
+ // logger
810
+ this.logger.info("开始生成推送卡片...");
811
+ // 推送该条动态
812
+ const buffer = await (0, utils_1.withRetry)(async () => {
813
+ // 渲染图片
814
+ return await this.ctx.gi.generateDynamicImg(item, sub.card);
815
+ }, 1).catch(async (e) => {
816
+ // 直播开播动态,不做处理
817
+ if (e.message === "直播开播动态,不做处理")
818
+ return;
819
+ if (e.message === "出现关键词,屏蔽该动态") {
820
+ // 如果需要发送才发送
821
+ if (this.config.filter.notify) {
822
+ await this.sendMsg(sub.target, `${upName}发布了一条含有屏蔽关键字的动态`);
823
+ }
824
+ return;
809
825
  }
810
- return;
811
- }
812
- if (e.message === "已屏蔽转发动态") {
813
- if (this.config.filter.notify) {
814
- await this.sendMsg(sub.target, `${upName}转发了一条动态,已屏蔽`);
826
+ if (e.message === "已屏蔽转发动态") {
827
+ if (this.config.filter.notify) {
828
+ await this.sendMsg(sub.target, `${upName}转发了一条动态,已屏蔽`);
829
+ }
830
+ return;
815
831
  }
816
- return;
832
+ // 未知错误
833
+ this.logger.error(`dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:${e.message}`);
834
+ // 发送私聊消息并重启服务
835
+ await this.sendPrivateMsgAndStopService();
836
+ });
837
+ // 判断是否执行成功,未执行成功直接返回
838
+ if (!buffer) {
839
+ // logger
840
+ this.logger.info("推送卡片生成失败,或该动态为屏蔽动态,跳过该动态!");
841
+ // 结束循环
842
+ continue;
817
843
  }
818
- // 未知错误
819
- this.logger.error(`dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:${e.message}`);
820
- // 发送私聊消息并重启服务
821
- await this.sendPrivateMsgAndStopService();
822
- });
823
- // 判断是否执行成功,未执行成功直接返回
824
- if (!buffer) {
825
- this.logger.error("渲染推送卡片失败");
826
- // 下一条
827
- continue;
828
- }
829
- // 判断是否需要发送URL
830
- const dUrl = this.config.dynamicUrl
831
- ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}`
832
- : "";
833
- // logger
834
- this.logger.info("推送动态中...");
835
- // 发送推送卡片
836
- await this.sendMsg(sub.target, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, "image/png"), dUrl] }));
837
- // 判断是否需要发送动态中的图片
838
- if (this.config.pushImgsInDynamic) {
839
- // 判断是否为图文动态,且存在draw
840
- if (item.type === "DYNAMIC_TYPE_DRAW" &&
841
- item.modules.module_dynamic.major?.draw) {
842
- this.logger.info("推送动态图片中...");
843
- for (const img of item.modules.module_dynamic.major.draw
844
- .items) {
845
- await this.sendMsg(sub.target, (0, jsx_runtime_1.jsx)("img", { src: img.src, alt: "\u52A8\u6001\u56FE\u7247" }));
844
+ // 定义动态链接
845
+ let dUrl = "";
846
+ // 判断是否需要发送URL
847
+ if (this.config.dynamicUrl) {
848
+ // logger
849
+ this.logger.info("生成动态链接中...");
850
+ // 生成动态链接
851
+ dUrl = `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}`;
852
+ }
853
+ // logger
854
+ this.logger.info("推送动态中...");
855
+ // 发送推送卡片
856
+ await this.sendMsg(sub.target, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, "image/png"), dUrl] }));
857
+ // logger
858
+ this.logger.info("动态推送完毕!");
859
+ // 判断是否需要发送动态中的图片
860
+ if (this.config.pushImgsInDynamic) {
861
+ // logger
862
+ this.logger.info("开始推送动态中的图片...");
863
+ // 判断是否为图文动态,且存在draw
864
+ if (item.type === "DYNAMIC_TYPE_DRAW" &&
865
+ item.modules.module_dynamic.major?.draw) {
866
+ for (const img of item.modules.module_dynamic.major.draw
867
+ .items) {
868
+ await this.sendMsg(sub.target, (0, jsx_runtime_1.jsx)("img", { src: img.src, alt: "\u52A8\u6001\u56FE\u7247" }));
869
+ }
846
870
  }
847
- this.logger.info("动态图片推送完毕!");
871
+ // logger
872
+ this.logger.info("图片推送完毕!");
848
873
  }
874
+ // logger
875
+ this.logger.info("动态推送完毕!");
849
876
  }
850
- // logger
851
- this.logger.info("动态推送完毕!");
852
877
  }
853
878
  }
854
879
  }
855
880
  // 更新本次请求第一条动态的动态ID
856
- dynamicIdStr1st = items[0]?.id_str || "0";
857
- dynamicIdStr2nd = items[1]?.id_str || "0";
881
+ dynamicIdStr1st = items[0].id_str;
882
+ // logger
883
+ this.logger.info(`更新本次请求第一条动态的动态ID:${dynamicIdStr1st}`);
884
+ // 更新时间线
885
+ timeline = items[0].modules.module_author.pub_ts || luxon_1.DateTime.now().toSeconds();
886
+ // logger
887
+ this.logger.info(`更新时间线:${timeline}`);
858
888
  };
859
889
  // 返回一个闭包函数
860
890
  return (0, utils_1.withLock)(handler);
@@ -70,6 +70,7 @@ export type AllDynamicInfo = {
70
70
  mid: number;
71
71
  name: string;
72
72
  face: string;
73
+ pub_ts: number;
73
74
  };
74
75
  module_dynamic: {
75
76
  major: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-bilibili-notify",
3
3
  "description": "Koishi bilibili notify plugin",
4
- "version": "3.0.3",
4
+ "version": "3.0.4",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],
package/readme.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  ## 注意事项
29
29
 
30
- 0. 动态监测,当您订阅之后,会在您设置的dynamicLoopTime(默认为2分钟)之后才会开启监测。如果您需要测试则需要等待您设置的dynamicLoopTime的时间之后再发送测试动态
30
+ 0. 由于 `3.0.2` 动态监测定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以通过控制台日志输出观察,打印 `动态监测初始化完毕!` 后,可进行测试
31
31
 
32
32
  1. 此插件依赖于 `database` 和 `puppeteer` 服务,同时受权限控制,需要具备 `authority:3` 及以上的权限才能使用本插件提供的指令,你可以参考下方配置登录插件中的方法得到一个超级管理员账号(具有 `authority:5` 的最高权限)
33
33
 
@@ -38,6 +38,7 @@
38
38
  [权限管理](https://koishi.chat/zh-CN/manual/usage/customize.html)
39
39
 
40
40
  3. 指令使用方法请参考 `help bili`,子命令使用方法请加 `-h` ,例如 `bili login -h`
41
+
41
42
  4. 登录方式为二维码,输入命令 `bili login` 之后扫码登录,您的登录凭证将存储在您的本地数据库,并由您自己填写的密钥加密,所以请保管好你的密钥
42
43
 
43
44
  ## 安装
@@ -219,6 +220,7 @@
219
220
  - ver 3.0.1 修复:动态推送过程中,如果上一次请求的第一条动态被删除,可能导致动态重复推送(本次修复并不能完全保障不重复推送,如果第一条和第二条都被删除则可能会出现重复推送); 新增:配置项 `subTimeout` 设置订阅超时时间
220
221
  - ver 3.0.2 优化:动态监测,新增依赖服务 `cron`
221
222
  - ver 3.0.3 移除:配置项 `dynamicLoopTime` ,动态循环时间将不再可选,默认为两分钟
223
+ - ver 3.0.4 优化:动态监测,增加时间判断,防止出现重复推送问题; 由于 `3.0.2` 动态监测定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以通过控制台日志输出观察,打印 `动态监测初始化完毕!` 后,可进行测试
222
224
 
223
225
  ## 交流群
224
226
 
@@ -227,7 +229,9 @@
227
229
  ## 感谢
228
230
 
229
231
  [koishijs](https://github.com/koishijs/koishi) 感谢官方提供的插件开发框架, 以及技术指导
232
+
230
233
  [blive-message-listener](https://github.com/ddiu8081/blive-message-listener) 感谢 `ddiu8081` 提供简单方便的B站直播监听依赖
234
+
231
235
  [bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect) 感谢 `SocialSisterYi` 提供B站API参考
232
236
 
233
237
  ## License