koishi-plugin-bilibili-notify 1.2.10 → 1.2.11-alpha.1

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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Context, Service } from "koishi";
1
+ import { Context, Schema, Service } from "koishi";
2
2
  import { CookieJar } from 'tough-cookie';
3
3
  import { Notifier } from "@koishijs/plugin-notifier";
4
4
  declare module 'koishi' {
@@ -10,11 +10,12 @@ declare class BiliAPI extends Service {
10
10
  static inject: string[];
11
11
  jar: CookieJar;
12
12
  client: any;
13
+ apiConfig: BiliAPI.Config;
13
14
  loginData: any;
14
15
  loginNotifier: Notifier;
15
16
  refreshCookieTimer: Function;
16
17
  loginInfoIsLoaded: boolean;
17
- constructor(ctx: Context);
18
+ constructor(ctx: Context, config: BiliAPI.Config);
18
19
  protected start(): void | Promise<void>;
19
20
  protected stop(): void | Promise<void>;
20
21
  getServerUTCTime(): Promise<number>;
@@ -41,4 +42,10 @@ declare class BiliAPI extends Service {
41
42
  enableRefreshCookiesDetect(): void;
42
43
  checkIfTokenNeedRefresh(refreshToken: string, csrf: string, times?: number): Promise<void>;
43
44
  }
45
+ declare namespace BiliAPI {
46
+ interface Config {
47
+ userAgent: string;
48
+ }
49
+ const Config: Schema<Config>;
50
+ }
44
51
  export default BiliAPI;
package/lib/biliAPI.js CHANGED
@@ -26,19 +26,20 @@ class BiliAPI extends koishi_1.Service {
26
26
  static inject = ['database', 'wbi', 'notifier'];
27
27
  jar;
28
28
  client;
29
+ apiConfig;
29
30
  loginData;
30
31
  loginNotifier;
31
32
  refreshCookieTimer;
32
33
  loginInfoIsLoaded = false;
33
- constructor(ctx) {
34
+ constructor(ctx, config) {
34
35
  super(ctx, 'biliAPI');
36
+ this.apiConfig = config;
35
37
  }
36
38
  start() {
37
39
  // 创建新的http客户端(axios)
38
40
  this.createNewClient();
39
41
  // 从数据库加载cookies
40
42
  this.loadCookiesFromDatabase();
41
- // logger
42
43
  // this.logger.info('工作中')
43
44
  }
44
45
  stop() {
@@ -167,7 +168,8 @@ class BiliAPI extends koishi_1.Service {
167
168
  jar: this.jar,
168
169
  headers: {
169
170
  'Content-Type': 'application/json',
170
- 'User-Agent': this.getRandomUserAgent(),
171
+ 'User-Agent': this.apiConfig.userAgent !== 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36' ?
172
+ this.apiConfig.userAgent : this.getRandomUserAgent(),
171
173
  'Origin': 'https://www.bilibili.com',
172
174
  'Referer': 'https://www.bilibili.com/'
173
175
  }
@@ -389,4 +391,9 @@ class BiliAPI extends koishi_1.Service {
389
391
  // 没有问题,cookies已更新完成
390
392
  }
391
393
  }
394
+ (function (BiliAPI) {
395
+ BiliAPI.Config = koishi_1.Schema.object({
396
+ userAgent: koishi_1.Schema.string()
397
+ });
398
+ })(BiliAPI || (BiliAPI = {}));
392
399
  exports.default = BiliAPI;
@@ -38,6 +38,7 @@ declare class ComRegister {
38
38
  checkIfLoginInfoIsLoaded(ctx: Context): Promise<unknown>;
39
39
  getSubFromDatabase(ctx: Context): Promise<void>;
40
40
  unsubSingle(ctx: Context, id: string, type: number): string;
41
+ unsubAll(ctx: Context, bot: Bot<Context>, uid: string): void;
41
42
  checkIfIsLogin(ctx: Context): Promise<boolean>;
42
43
  }
43
44
  declare namespace ComRegister {
@@ -364,7 +364,7 @@ class ComRegister {
364
364
  content = await ctx.biliAPI.getUserInfo(mid);
365
365
  }
366
366
  catch (e) {
367
- return 'bili sub getUserInfo() 发生了错误,错误为:' + e.toString();
367
+ return 'bili sub getUserInfo() 发生了错误,错误为:' + e.message;
368
368
  }
369
369
  // 判断是否有其他问题
370
370
  if (content.code !== 0) {
@@ -501,7 +501,7 @@ class ComRegister {
501
501
  userData = data;
502
502
  }
503
503
  catch (e) {
504
- this.logger.error('bili sub指令 getMasterInfo() 发生了错误,错误为:' + e.toString());
504
+ this.logger.error('bili sub指令 getMasterInfo() 发生了错误,错误为:' + e.message);
505
505
  return '订阅出错啦,请重试';
506
506
  }
507
507
  // 需要订阅直播
@@ -577,7 +577,7 @@ class ComRegister {
577
577
  content = await ctx.biliAPI.getLiveRoomInfo(roomId);
578
578
  }
579
579
  catch (e) {
580
- return 'bili status指令 getLiveRoomInfo() 发生了错误,错误为:' + e.toString();
580
+ return 'bili status指令 getLiveRoomInfo() 发生了错误,错误为:' + e.message;
581
581
  }
582
582
  const { data } = content;
583
583
  let userData;
@@ -586,7 +586,7 @@ class ComRegister {
586
586
  userData = userInfo;
587
587
  }
588
588
  catch (e) {
589
- return 'bili status指令 getMasterInfo() 发生了错误,错误为:' + e.toString();
589
+ return 'bili status指令 getMasterInfo() 发生了错误,错误为:' + e.message;
590
590
  }
591
591
  // B站出问题了
592
592
  if (content.code !== 0) {
@@ -757,7 +757,7 @@ class ComRegister {
757
757
  }
758
758
  catch (e) {
759
759
  if (i === attempts - 1) { // 已尝试三次
760
- this.logger.error(`发送群组ID:${guildId}消息失败!原因: ` + e.toString());
760
+ this.logger.error(`发送群组ID:${guildId}消息失败!原因: ` + e.message);
761
761
  this.sendPrivateMsg(bot, `发送群组ID:${guildId}消息失败,请检查机器人状态`);
762
762
  }
763
763
  }
@@ -782,7 +782,7 @@ class ComRegister {
782
782
  content = await ctx.biliAPI.getUserSpaceDynamic(uid);
783
783
  }
784
784
  catch (e) {
785
- return this.logger.error('dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:' + e.toString());
785
+ return this.logger.error('dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:' + e.message);
786
786
  }
787
787
  // 判断是否出现其他问题
788
788
  if (content.code !== 0) {
@@ -794,9 +794,7 @@ class ComRegister {
794
794
  default: await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
795
795
  }
796
796
  // 取消订阅
797
- this.unsubSingle(ctx, uid, 1); /* 1为取消动态订阅 */
798
- // 发送取消订阅消息
799
- await this.sendPrivateMsg(bot, `UID:${uid},已取消订阅动态`);
797
+ this.unsubAll(ctx, bot, uid);
800
798
  // 结束循环
801
799
  return;
802
800
  }
@@ -822,8 +820,11 @@ class ComRegister {
822
820
  try {
823
821
  // 渲染图片
824
822
  const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gimg.generateDynamicImg(items[num]);
823
+ // 赋值
825
824
  pic = gimgPic;
826
825
  buffer = gimgBuffer;
826
+ // 成功则跳出循环
827
+ break;
827
828
  }
828
829
  catch (e) {
829
830
  // 直播开播动态,不做处理
@@ -840,7 +841,7 @@ class ComRegister {
840
841
  }
841
842
  // 未知错误
842
843
  if (i === attempts - 1) {
843
- this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.toString());
844
+ this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
844
845
  // 发送私聊消息并重启服务
845
846
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
846
847
  }
@@ -854,10 +855,13 @@ class ComRegister {
854
855
  // pic存在,使用的是render模式
855
856
  await this.sendMsg(ctx, guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
856
857
  }
857
- else {
858
+ else if (buffer) {
858
859
  this.logger.info('推送动态中,使用page模式');
859
860
  // pic不存在,说明使用的是page模式
860
- await this.sendMsg(ctx, guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("img", { src: 'data:image/png;base64,' + buffer.toString('base64') }), " ", dUrl] }));
861
+ await this.sendMsg(ctx, guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), " ", dUrl] }));
862
+ }
863
+ else {
864
+ this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
861
865
  }
862
866
  // 更新时间点为最新发布动态的发布时间
863
867
  switch (num) {
@@ -899,7 +903,7 @@ class ComRegister {
899
903
  }
900
904
  catch (e) {
901
905
  if (i === attempts - 1) { // 已尝试三次
902
- this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.toString());
906
+ this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.message);
903
907
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
904
908
  }
905
909
  }
@@ -911,7 +915,7 @@ class ComRegister {
911
915
  return await this.sendMsg(ctx, guildId, bot, pic + msg);
912
916
  }
913
917
  // pic不存在,说明使用的是page模式
914
- await this.sendMsg(ctx, guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("img", { src: 'data:image/png;base64,' + buffer.toString('base64') }), " ", atAll && (0, jsx_runtime_1.jsx)("at", { type: "all" }), " ", liveStartMsg && liveStartMsg] }));
918
+ await this.sendMsg(ctx, guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), " ", atAll && (0, jsx_runtime_1.jsx)("at", { type: "all" }), " ", liveStartMsg && liveStartMsg] }));
915
919
  };
916
920
  return async () => {
917
921
  try {
@@ -930,7 +934,7 @@ class ComRegister {
930
934
  break;
931
935
  }
932
936
  catch (e) {
933
- this.logger.error('liveDetect getLiveRoomInfo 发生了错误,错误为:' + e.toString());
937
+ this.logger.error('liveDetect getLiveRoomInfo 发生了错误,错误为:' + e.message);
934
938
  if (i === attempts - 1) { // 已尝试三次
935
939
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
936
940
  }
@@ -952,7 +956,7 @@ class ComRegister {
952
956
  break;
953
957
  }
954
958
  catch (e) {
955
- this.logger.error('liveDetect getMasterInfo() 发生了错误,错误为:' + e.toString());
959
+ this.logger.error('liveDetect getMasterInfo() 发生了错误,错误为:' + e.message);
956
960
  if (i === attempts - 1) { // 已尝试三次
957
961
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
958
962
  }
@@ -1022,7 +1026,7 @@ class ComRegister {
1022
1026
  break;
1023
1027
  }
1024
1028
  catch (e) {
1025
- this.logger.error('liveDetect open getMasterInfo() 发生了错误,错误为:' + e.toString());
1029
+ this.logger.error('liveDetect open getMasterInfo() 发生了错误,错误为:' + e.message);
1026
1030
  if (i === attempts - 1) { // 已尝试三次
1027
1031
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
1028
1032
  }
@@ -1229,7 +1233,7 @@ class ComRegister {
1229
1233
  break;
1230
1234
  }
1231
1235
  catch (e) {
1232
- this.logger.error('getSubFromDatabase() getUserInfo() 发生了错误,错误为:' + e.toString());
1236
+ this.logger.error('getSubFromDatabase() getUserInfo() 发生了错误,错误为:' + e.message);
1233
1237
  if (i === attempts - 1) { // 已尝试三次
1234
1238
  return await this.sendPrivateMsgAndRebootService(ctx, bot, '你的网络可能出现了某些问题,请检查后重启插件');
1235
1239
  }
@@ -1368,6 +1372,25 @@ class ComRegister {
1368
1372
  this.updateSubNotifier(ctx);
1369
1373
  }
1370
1374
  }
1375
+ unsubAll(ctx, bot, uid) {
1376
+ this.subManager.filter(sub => sub.uid === uid).map(async (sub, i) => {
1377
+ // 取消全部订阅 执行dispose方法,销毁定时器
1378
+ if (sub.dynamic)
1379
+ this.subManager[i].dynamicDispose();
1380
+ if (sub.live)
1381
+ this.subManager[i].liveDispose();
1382
+ // 从数据库中删除订阅
1383
+ await ctx.database.remove('bilibili', { uid: this.subManager[i].uid });
1384
+ // 将该订阅对象从订阅管理对象中移除
1385
+ this.subManager.splice(i, 1);
1386
+ // id--
1387
+ this.num--;
1388
+ // 发送成功通知
1389
+ this.sendPrivateMsg(bot, `UID:${uid},已取消订阅该用户`);
1390
+ // 更新控制台提示
1391
+ this.updateSubNotifier(ctx);
1392
+ });
1393
+ }
1371
1394
  async checkIfIsLogin(ctx) {
1372
1395
  if ((await ctx.database.get('loginBili', 1)).length !== 0) { // 数据库中有数据
1373
1396
  // 检查cookie中是否有值
package/lib/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export interface Config {
13
13
  basicSettings: {};
14
14
  unlockSubLimits: boolean;
15
15
  renderType: 'render' | 'page';
16
+ userAgent: string;
16
17
  dynamic: {};
17
18
  dynamicUrl: boolean;
18
19
  dynamicCheckNumber: number;
package/lib/index.js CHANGED
@@ -76,6 +76,9 @@ exports.Config = koishi_1.Schema.object({
76
76
  .role('')
77
77
  .default('render')
78
78
  .description('渲染类型,默认为render模式,渲染速度更快,但会出现乱码问题,若出现乱码问题,请切换到page模式。若使用自定义字体,建议选择render模式'),
79
+ userAgent: koishi_1.Schema.string()
80
+ .default('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36')
81
+ .description('设置请求头User-Agen,请求出现-352时可以尝试修改'),
79
82
  dynamic: koishi_1.Schema.object({}).description('动态推送设置'),
80
83
  dynamicUrl: koishi_1.Schema.boolean()
81
84
  .default(false)
@@ -172,7 +175,9 @@ class ServerManager extends koishi_1.Service {
172
175
  this.registerPlugin();
173
176
  }
174
177
  registerPlugin = () => {
175
- const biliApi = this.ctx.plugin(biliAPI_1.default);
178
+ const biliApi = this.ctx.plugin(biliAPI_1.default, {
179
+ userAgent: globalConfig.userAgent
180
+ });
176
181
  const generateImg = this.ctx.plugin(generateImg_1.default, {
177
182
  renderType: this.renderType,
178
183
  filter: globalConfig.filter,
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.2.10",
4
+ "version": "1.2.11-alpha.1",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],
package/readme.md CHANGED
@@ -144,6 +144,7 @@
144
144
  - ver 1.2.8 修复例如像UP主籽岷使用webp格式的头像,下播通知无法发出的bug
145
145
  - ver 1.2.9-alpha.0 bug测试版本,请跳过
146
146
  - ver 1.2.10 修复插件启动一段时间后一直报错的问题,更新了UA列表,新增了更多日志输出
147
+ - ver 1.2.11-alpha.0 新增自定义UA的设置。动态推送出错时,现在会直接取消订阅该UP主而不是取消订阅动态
147
148
 
148
149
  ## 交流群
149
150