koishi-plugin-bilibili-notify 1.0.4-rc.1 → 1.0.5-alpha.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.
package/lib/biliAPI.js CHANGED
@@ -181,7 +181,6 @@ class BiliAPI extends koishi_1.Service {
181
181
  // 定义CSRF Token
182
182
  let csrf;
183
183
  cookies.forEach(cookieData => {
184
- // console.log(cookieData);
185
184
  // 获取key为bili_jct的值
186
185
  if (cookieData.key === 'bili_jct')
187
186
  csrf = cookieData.value;
@@ -574,8 +574,20 @@ class ComRegister {
574
574
  let attempts = 3;
575
575
  for (let i = 0; i < attempts; i++) {
576
576
  try {
577
+ // 定义变量
578
+ let pic;
579
+ let buffer;
577
580
  // 获取动态推送图片
578
- const { pic, buffer } = await ctx.gimg.generateDynamicImg(items[num]);
581
+ try {
582
+ const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gimg.generateDynamicImg(items[num]);
583
+ pic = gimgPic;
584
+ buffer = gimgBuffer;
585
+ }
586
+ catch (e) {
587
+ // 直播开播动态,不做处理
588
+ if (e.message === '直播开播动态,不做处理')
589
+ break;
590
+ }
579
591
  // 如果pic存在,则直接返回pic
580
592
  if (pic)
581
593
  return await bot.sendMessage(guildId, pic);
@@ -630,12 +642,10 @@ class ComRegister {
630
642
  }
631
643
  return async () => {
632
644
  try {
633
- // console.log('start before' + ' ' + flag);
634
645
  // 如果flag为false则说明前面的代码还未执行完,则直接返回
635
646
  if (!flag)
636
647
  return;
637
648
  flag && (flag = false);
638
- // console.log('start after' + ' ' + flag);
639
649
  // 发送请求检测直播状态
640
650
  let content;
641
651
  try {
@@ -733,10 +743,8 @@ class ComRegister {
733
743
  }
734
744
  }
735
745
  finally {
736
- // console.log('end before' + ' ' + flag);
737
746
  // 执行完方法体不论如何都把flag设置为true
738
747
  flag = true;
739
- // console.log('end after' + ' ' + flag);
740
748
  }
741
749
  };
742
750
  }
@@ -785,17 +793,67 @@ class ComRegister {
785
793
  this.num = subData.length;
786
794
  // 如果订阅数量超过三个则被非法修改数据库
787
795
  // 向管理员发送重新订阅通知
788
- if (this.num > 3)
796
+ if (this.num > 3) {
797
+ ctx.notifier.create({
798
+ type: 'danger',
799
+ content: '数据库被非法修改,请你删除bilibili表的所有内容后重启插件'
800
+ });
789
801
  return;
802
+ }
790
803
  // 定义Bot
791
804
  let bot;
792
805
  // 循环遍历
793
- subData.forEach(sub => {
806
+ subData.forEach(async (sub) => {
794
807
  // 拿到对应bot
795
808
  switch (sub.platform) {
796
809
  case 'qq': bot = this.qqBot;
797
810
  case 'qqguild': bot = this.qqguildBot;
798
811
  }
812
+ // 判断数据库是否被篡改
813
+ // 获取用户信息
814
+ let content;
815
+ let attempts = 3;
816
+ for (let i = 0; i < attempts; i++) {
817
+ try {
818
+ content = await ctx.biliAPI.getUserInfo(sub.uid);
819
+ break;
820
+ }
821
+ catch (e) {
822
+ this.logger.error('getSubFromDatabase() getUserInfo() 本次网络请求失败');
823
+ if (i === attempts - 1) { // 已尝试三次
824
+ return bot.sendMessage(sub.targetId, '你的网络可能出现了某些问题,请检查后重启插件');
825
+ }
826
+ }
827
+ }
828
+ // 获取data
829
+ const { data } = content;
830
+ // 定义函数删除数据和发送提示
831
+ const deleteSub = async () => {
832
+ // 从数据库删除该条数据
833
+ await ctx.database.remove('bilibili', { id: sub.id });
834
+ // 给用户发送提示
835
+ bot.sendMessage(sub.targetId, `UID:${sub.uid} 数据库内容被篡改,已取消对该UP主的订阅`);
836
+ };
837
+ // 判断是否有其他问题
838
+ if (content.code !== 0) {
839
+ switch (content.code) {
840
+ case -352:
841
+ case -403:
842
+ bot.sendMessage(sub.targetId, '你的登录信息已过期,请重新登录Bilibili');
843
+ return;
844
+ case -400:
845
+ case -404:
846
+ default:
847
+ deleteSub();
848
+ return;
849
+ }
850
+ }
851
+ // 检测房间号是否被篡改
852
+ if (sub.live && (!data.live_room || data.live_room.roomid.toString() !== sub.room_id)) {
853
+ // 房间号被篡改,删除该订阅
854
+ deleteSub();
855
+ return;
856
+ }
799
857
  // 构建订阅对象
800
858
  let subManagerItem = {
801
859
  id: sub.id,
@@ -481,7 +481,7 @@ class GenerateImg extends koishi_1.Service {
481
481
  case DYNAMIC_TYPE_UGC_SEASON: return [`${upName}更新了合集,我暂时无法渲染,请自行查看`, link];
482
482
  case DYNAMIC_TYPE_NONE: return [`${upName}发布了一条无效动态`, link];
483
483
  // 直播开播,不做处理
484
- case DYNAMIC_TYPE_LIVE_RCMD: return ['', ''];
484
+ case DYNAMIC_TYPE_LIVE_RCMD: throw new Error('直播开播动态,不做处理');
485
485
  case DYNAMIC_TYPE_SUBSCRIPTION_NEW:
486
486
  case DYNAMIC_TYPE_BANNER:
487
487
  case DYNAMIC_TYPE_SUBSCRIPTION:
@@ -494,6 +494,7 @@ class GenerateImg extends koishi_1.Service {
494
494
  }
495
495
  return [main, link, forwardInfo];
496
496
  }
497
+ // 获取动态主要内容
497
498
  const [main, link] = await getDynamicMajor(data, false);
498
499
  // 加载字体
499
500
  const fontURL = (0, url_1.pathToFileURL)((0, path_1.resolve)(__dirname, './HYZhengYuan-55W.ttf'));
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.4-rc.1",
4
+ "version": "1.0.5-alpha.0",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],
package/readme.md CHANGED
@@ -80,6 +80,7 @@
80
80
  - ver 1.0.2 修复时间bug和字体乱码问题
81
81
  - ver 1.0.3 修复了一些bug,提供用户自己选择推送卡片字体样式的选项
82
82
  - ver 1.0.4 修复了重复推送的bug,提供用户选择推送卡片渲染方式的选项
83
+ - ver 1.0.5 修复了用户非法篡改数据库内容可能导致程序异常运行的bug,修复了UP主开播动态推送空白卡片的bug
83
84
 
84
85
  ## 感谢
85
86