koishi-plugin-bilibili-notify 1.0.0-beta.0 → 1.0.0-rc.0

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.
@@ -18,11 +18,12 @@ declare class ComRegister {
18
18
  qqguildBot: Bot<Context>;
19
19
  constructor(ctx: Context, config: ComRegister.Config);
20
20
  dynamicDetect(ctx: Context, bot: Bot<Context>, guildId: string, uid: string): () => Promise<void>;
21
- liveDetect(ctx: Context, bot: Bot<Context>, guildId: string, roomId: string): () => Promise<false | void>;
21
+ liveDetect(ctx: Context, bot: Bot<Context>, guildId: string, roomId: string): () => Promise<void>;
22
22
  checkIfNeedSub(comNeed: boolean, subType: string, session: Session, data?: any): Promise<boolean>;
23
23
  getSubFromDatabase(ctx: Context): Promise<void>;
24
24
  unsubSingle(ctx: Context, id: string, type: number): string;
25
25
  checkIfIsLogin(ctx: Context): Promise<boolean>;
26
+ test_dynamicDetect(ctx: Context, session: Session, uid: string): () => Promise<void>;
26
27
  }
27
28
  declare namespace ComRegister {
28
29
  interface Config {
@@ -72,7 +72,7 @@ class ComRegister {
72
72
  .subcommand('.gimg <uid:string> <index:number>')
73
73
  .usage('测试图片生成')
74
74
  .example('test.gimg')
75
- .action(async ({ session }, uid, index) => {
75
+ .action(async (_, uid, index) => {
76
76
  // 获取用户空间动态数据
77
77
  const { data } = await ctx.biliAPI.getUserSpaceDynamic(uid);
78
78
  const [pic] = await ctx.gimg.generateDynamicImg(data.items[index]);
@@ -92,6 +92,13 @@ class ComRegister {
92
92
  .action(({ session }) => {
93
93
  console.log(session);
94
94
  });
95
+ ctx.command('test')
96
+ .subcommand('.dynamic <uid:string>')
97
+ .usage('测试动态监测')
98
+ .example('test dynamic uid')
99
+ .action(({ session }, uid) => {
100
+ ctx.setInterval(this.test_dynamicDetect(ctx, session, uid), 30000);
101
+ });
95
102
  ctx.command('bili', 'bili-notify插件相关指令', { permissions: ['authority:3'] })
96
103
  .subcommand('.login', '登录B站之后才可以进行之后的操作')
97
104
  .usage('使用二维码登录,登录B站之后才可以进行之后的操作')
@@ -539,8 +546,19 @@ class ComRegister {
539
546
  case 1: timePoint = items[num].modules.module_author.pub_ts;
540
547
  }
541
548
  // 推送该条动态
542
- const [pic] = await ctx.gimg.generateDynamicImg(items[num]);
543
- await bot.sendMessage(guildId, pic);
549
+ let attempts = 3;
550
+ for (let i = 0; i < attempts; i++) {
551
+ try {
552
+ const [pic] = await ctx.gimg.generateDynamicImg(items[num]);
553
+ await bot.sendMessage(guildId, pic);
554
+ break; // 如果成功,那么跳出循环
555
+ }
556
+ catch (e) {
557
+ if (i === attempts - 1) { // 如果已经尝试了三次,那么抛出错误
558
+ throw e;
559
+ }
560
+ }
561
+ }
544
562
  }
545
563
  }
546
564
  };
@@ -555,9 +573,12 @@ class ComRegister {
555
573
  let flag = true;
556
574
  return async () => {
557
575
  try {
576
+ // console.log('start before' + ' ' + flag);
558
577
  // 如果flag为false则说明前面的代码还未执行完,则直接返回
559
578
  if (!flag)
560
- return flag = false;
579
+ return;
580
+ flag && (flag = false);
581
+ // console.log('start after' + ' ' + flag);
561
582
  // 发送请求检测直播状态
562
583
  let content;
563
584
  try {
@@ -657,8 +678,10 @@ class ComRegister {
657
678
  }
658
679
  }
659
680
  finally {
681
+ // console.log('end before' + ' ' + flag);
660
682
  // 执行完方法体不论如何都把flag设置为true
661
683
  flag = true;
684
+ // console.log('end after' + ' ' + flag);
662
685
  }
663
686
  };
664
687
  }
@@ -815,12 +838,82 @@ class ComRegister {
815
838
  }
816
839
  return false;
817
840
  }
841
+ test_dynamicDetect(ctx, session, uid) {
842
+ let firstSubscription = true;
843
+ let timePoint;
844
+ // Test code
845
+ let timer = 0;
846
+ return async () => {
847
+ // Test code
848
+ console.log('timer:' + timer++);
849
+ console.log('firstSubscription:' + firstSubscription);
850
+ console.log(`timePoint: ${timePoint}`);
851
+ console.log(`timePoint: ${ctx.gimg.unixTimestampToString(timePoint)}`);
852
+ // 第一次订阅判断
853
+ if (firstSubscription) {
854
+ // 设置第一次的时间点
855
+ timePoint = Math.floor(Date.now() / 1000);
856
+ // 设置第一次为false
857
+ firstSubscription = false;
858
+ return;
859
+ }
860
+ // 获取用户空间动态数据
861
+ let content;
862
+ try {
863
+ content = await ctx.biliAPI.getUserSpaceDynamic(uid);
864
+ }
865
+ catch (e) {
866
+ return this.logger.error('dynamicDetect getUserSpaceDynamic() 网络请求失败');
867
+ }
868
+ // 判断是否出现其他问题
869
+ if (content.code !== 0) {
870
+ switch (content.code) {
871
+ case -101: { // 账号未登录
872
+ await session.send('账号未登录,请登录后重新订阅动态');
873
+ }
874
+ default: { // 未知错误
875
+ await session.send('未知错误,请重新订阅动态');
876
+ }
877
+ }
878
+ // 取消订阅
879
+ this.unsubSingle(ctx, uid, 1); /* 1为取消动态订阅 */
880
+ return;
881
+ }
882
+ // 获取数据内容
883
+ const items = content.data.items;
884
+ // 发送请求 只查看前五条数据
885
+ for (let num = 4; num >= 0; num--) {
886
+ // 没有动态内容则直接跳过
887
+ if (!items[num])
888
+ continue;
889
+ // Test code
890
+ console.log(`items[${num}].modules.module_author.pub_ts: ${ctx.gimg.unixTimestampToString(items[num].modules.module_author.pub_ts)}`);
891
+ // 寻找发布时间比时间点时间更晚的动态
892
+ if (items[num].modules.module_author.pub_ts > timePoint) {
893
+ // 如果这是遍历的最后一条,将时间点设置为这条动态的发布时间
894
+ /* if (num === 1) timePoint = items[num].modules.module_author.pub_ts
895
+ if (num === 0) {
896
+ timePoint = items[num].modules.module_author.pub_ts
897
+ } */
898
+ switch (num) {
899
+ // 如果是置顶动态,则跳过
900
+ case 0: if (items[num].modules.module_tag)
901
+ continue;
902
+ case 1: timePoint = items[num].modules.module_author.pub_ts;
903
+ }
904
+ // 推送该条动态
905
+ const [pic] = await ctx.gimg.generateDynamicImg(items[num]);
906
+ await session.send(pic);
907
+ }
908
+ }
909
+ };
910
+ }
818
911
  }
819
912
  (function (ComRegister) {
820
913
  ComRegister.Config = koishi_1.Schema.object({
821
914
  pushTime: koishi_1.Schema.number().required(),
822
915
  liveLoopTime: koishi_1.Schema.number().default(10),
823
- dynamicLoopTime: koishi_1.Schema.number().default(30)
916
+ dynamicLoopTime: koishi_1.Schema.number().default(60)
824
917
  });
825
918
  })(ComRegister || (ComRegister = {}));
826
919
  exports.default = ComRegister;
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": "1.0.0-beta.0",
4
+ "version": "1.0.0-rc.0",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],