koishi-plugin-bilibili-notify 3.2.5 → 3.2.7-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.
Binary file
Binary file
package/lib/index.js CHANGED
@@ -443,7 +443,7 @@ var require_lib$3 = __commonJS$1({ "node_modules/@koishijs/plugin-help/lib/index
443
443
  //#endregion
444
444
  //#region src/utils/index.ts
445
445
  function Retry(options = { attempts: 3 }) {
446
- return (target, propertyKey, descriptor) => {
446
+ return (_target, _propertyKey, descriptor) => {
447
447
  const originalMethod = descriptor.value;
448
448
  descriptor.value = async function(...args) {
449
449
  let lastError;
@@ -588,7 +588,7 @@ var ComRegister = class {
588
588
  let content;
589
589
  try {
590
590
  content = await ctx.ba.getLoginQRCode();
591
- } catch (e$1) {
591
+ } catch (_$2) {
592
592
  return "bili login getLoginQRCode() 本次网络请求失败";
593
593
  }
594
594
  if (content.code !== 0) return await session.send("出问题咯,请联系管理员解决");
@@ -1479,37 +1479,37 @@ var ComRegister = class {
1479
1479
  msg: "账号被封停,无法进行订阅操作"
1480
1480
  };
1481
1481
  },
1482
- [22002]: () => {
1482
+ 22002: () => {
1483
1483
  return {
1484
1484
  code: subUserData.code,
1485
1485
  msg: "因对方隐私设置,无法进行订阅操作"
1486
1486
  };
1487
1487
  },
1488
- [22003]: () => {
1488
+ 22003: () => {
1489
1489
  return {
1490
1490
  code: subUserData.code,
1491
1491
  msg: "你已将对方拉黑,无法进行订阅操作"
1492
1492
  };
1493
1493
  },
1494
- [22013]: () => {
1494
+ 22013: () => {
1495
1495
  return {
1496
1496
  code: subUserData.code,
1497
1497
  msg: "账号已注销,无法进行订阅操作"
1498
1498
  };
1499
1499
  },
1500
- [40061]: () => {
1500
+ 40061: () => {
1501
1501
  return {
1502
1502
  code: subUserData.code,
1503
1503
  msg: "账号不存在,请检查uid输入是否正确或用户是否存在"
1504
1504
  };
1505
1505
  },
1506
- [22001]: () => {
1506
+ 22001: () => {
1507
1507
  return {
1508
1508
  code: 0,
1509
1509
  msg: "订阅对象为自己,无需添加到分组"
1510
1510
  };
1511
1511
  },
1512
- [22014]: async () => {
1512
+ 22014: async () => {
1513
1513
  const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
1514
1514
  if (copyUserToGroupData.code !== 0) return {
1515
1515
  code: copyUserToGroupData.code,
@@ -1520,7 +1520,7 @@ var ComRegister = class {
1520
1520
  msg: "订阅对象添加成功"
1521
1521
  };
1522
1522
  },
1523
- [0]: async () => {
1523
+ 0: async () => {
1524
1524
  const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
1525
1525
  if (copyUserToGroupData.code !== 0) return {
1526
1526
  code: copyUserToGroupData.code,
@@ -80287,6 +80287,7 @@ var require_once = __commonJS$1({ "node_modules/once/once.js"(exports, module) {
80287
80287
  var require_end_of_stream = __commonJS$1({ "node_modules/end-of-stream/index.js"(exports, module) {
80288
80288
  var once$1 = require_once();
80289
80289
  var noop$5 = function() {};
80290
+ var qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);
80290
80291
  var isRequest$1 = function(stream$3) {
80291
80292
  return stream$3.setHeader && typeof stream$3.abort === "function";
80292
80293
  };
@@ -80320,7 +80321,7 @@ var require_end_of_stream = __commonJS$1({ "node_modules/end-of-stream/index.js"
80320
80321
  callback.call(stream$3, err);
80321
80322
  };
80322
80323
  var onclose = function() {
80323
- process.nextTick(onclosenexttick);
80324
+ qnt(onclosenexttick);
80324
80325
  };
80325
80326
  var onclosenexttick = function() {
80326
80327
  if (cancelled) return;
@@ -80372,7 +80373,7 @@ var require_pump = __commonJS$1({ "node_modules/pump/index.js"(exports, module)
80372
80373
  fs$7 = require("fs");
80373
80374
  } catch (e$1) {}
80374
80375
  var noop$4 = function() {};
80375
- var ancient = /^v?\.0/.test(process.version);
80376
+ var ancient = typeof process === "undefined" ? false : /^v?\.0/.test(process.version);
80376
80377
  var isFn = function(fn) {
80377
80378
  return typeof fn === "function";
80378
80379
  };
@@ -83954,7 +83955,7 @@ var require_tar_fs = __commonJS$1({ "node_modules/tar-fs/index.js"(exports) {
83954
83955
  const pump = require_pump();
83955
83956
  const fs$3 = require("fs");
83956
83957
  const path$4 = require("path");
83957
- const win32$1 = (global.Bare?.platform || process.platform) === "win32";
83958
+ const win32$1 = (global.Bare ? global.Bare.platform : process.platform) === "win32";
83958
83959
  exports.pack = function pack(cwd, opts) {
83959
83960
  if (!cwd) cwd = ".";
83960
83961
  if (!opts) opts = {};
@@ -84040,10 +84041,10 @@ var require_tar_fs = __commonJS$1({ "node_modules/tar-fs/index.js"(exports) {
84040
84041
  return list.length ? list[list.length - 1] : null;
84041
84042
  }
84042
84043
  function processGetuid() {
84043
- return process.getuid ? process.getuid() : -1;
84044
+ return !global.Bare && process.getuid ? process.getuid() : -1;
84044
84045
  }
84045
84046
  function processUmask() {
84046
- return process.umask ? process.umask() : 0;
84047
+ return !global.Bare && process.umask ? process.umask() : 0;
84047
84048
  }
84048
84049
  exports.extract = function extract(cwd, opts) {
84049
84050
  if (!cwd) cwd = ".";
@@ -94411,6 +94412,11 @@ var BiliAPI = class extends koishi.Service {
94411
94412
  loginNotifier;
94412
94413
  refreshCookieTimer;
94413
94414
  loginInfoIsLoaded = false;
94415
+ wbiSign = {
94416
+ img_key: "",
94417
+ sub_key: ""
94418
+ };
94419
+ updateJob;
94414
94420
  constructor(ctx, config) {
94415
94421
  super(ctx, "ba");
94416
94422
  this.apiConfig = config;
@@ -94421,11 +94427,25 @@ var BiliAPI = class extends koishi.Service {
94421
94427
  this.cacheable.install(node_http.default.globalAgent);
94422
94428
  this.cacheable.install(node_https.default.globalAgent);
94423
94429
  await this.createNewClient();
94424
- this.loadCookiesFromDatabase();
94430
+ await this.loadCookiesFromDatabase();
94431
+ await this.updateBiliTicket();
94432
+ this.updateJob = new cron.CronJob("0 0 * * *", async () => {
94433
+ await this.updateBiliTicket();
94434
+ });
94435
+ this.updateJob.start();
94425
94436
  }
94426
94437
  stop() {
94427
94438
  this.cacheable.uninstall(node_http.default.globalAgent);
94428
94439
  this.cacheable.uninstall(node_https.default.globalAgent);
94440
+ this.updateJob.stop();
94441
+ }
94442
+ async updateBiliTicket() {
94443
+ const csrf = this.getCSRF();
94444
+ const ticket = await this.getBiliTicket(csrf);
94445
+ if (ticket.code !== 0) throw new Error(`获取BiliTicket失败: ${ticket.message}`);
94446
+ this.jar.setCookieSync(`bili_ticket=${ticket.data.ticket}; path=/; domain=.bilibili.com`, "https://www.bilibili.com");
94447
+ this.wbiSign.img_key = ticket.data.nav.img.slice(ticket.data.nav.img.lastIndexOf("/") + 1, ticket.data.nav.img.lastIndexOf("."));
94448
+ this.wbiSign.sub_key = ticket.data.nav.sub.slice(ticket.data.nav.sub.lastIndexOf("/") + 1, ticket.data.nav.sub.lastIndexOf("."));
94429
94449
  }
94430
94450
  getMixinKey = (orig) => mixinKeyEncTab.map((n$2) => orig[n$2]).join("").slice(0, 32);
94431
94451
  encWbi(params, img_key, sub_key) {
@@ -94441,7 +94461,7 @@ var BiliAPI = class extends koishi.Service {
94441
94461
  return `${query}&w_rid=${wbi_sign}`;
94442
94462
  }
94443
94463
  async getWbi(params) {
94444
- const web_keys = await this.getWbiKeys();
94464
+ const web_keys = this.wbiSign || await this.getWbiKeys();
94445
94465
  const img_key = web_keys.img_key;
94446
94466
  const sub_key = web_keys.sub_key;
94447
94467
  const query = this.encWbi(params, img_key, sub_key);
@@ -94586,16 +94606,39 @@ var BiliAPI = class extends koishi.Service {
94586
94606
  disposeNotifier() {
94587
94607
  if (this.loginNotifier) this.loginNotifier.dispose();
94588
94608
  }
94589
- getRandomUserAgent() {
94590
- const userAgents = [
94591
- "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",
94592
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
94593
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
94594
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0",
94595
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
94596
- ];
94597
- const index = Math.floor(Math.random() * userAgents.length);
94598
- return userAgents[index];
94609
+ /**
94610
+ * Generate HMAC-SHA256 signature
94611
+ * @param {string} key The key string to use for the HMAC-SHA256 hash
94612
+ * @param {string} message The message string to hash
94613
+ * @returns {string} The HMAC-SHA256 signature as a hex string
94614
+ */
94615
+ hmacSha256(key, message$1) {
94616
+ const hmac = node_crypto.default.createHmac("sha256", key);
94617
+ hmac.update(message$1);
94618
+ return hmac.digest("hex");
94619
+ }
94620
+ /**
94621
+ * Get Bilibili web ticket
94622
+ * @param {string} csrf CSRF token, can be empty or null
94623
+ * @returns {Promise<any>} Promise of the ticket response in JSON format
94624
+ */
94625
+ async getBiliTicket(csrf) {
94626
+ const ts = Math.floor(Date.now() / 1e3);
94627
+ const hexSign = this.hmacSha256("XgwSnGZ1p", `ts${ts}`);
94628
+ const params = new URLSearchParams({
94629
+ key_id: "ec02",
94630
+ hexsign: hexSign,
94631
+ "context[ts]": ts.toString(),
94632
+ csrf: csrf || ""
94633
+ });
94634
+ const url = "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket";
94635
+ const resp = await this.client.post(`${url}?${params.toString()}`, {}, { headers: {
94636
+ "Content-Type": "application/x-www-form-urlencoded",
94637
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0"
94638
+ } }).catch((e$1) => {
94639
+ throw e$1;
94640
+ });
94641
+ return resp.data;
94599
94642
  }
94600
94643
  async createNewClient() {
94601
94644
  const wrapper = (await import("axios-cookiejar-support")).wrapper;
@@ -94604,7 +94647,7 @@ var BiliAPI = class extends koishi.Service {
94604
94647
  jar: this.jar,
94605
94648
  headers: {
94606
94649
  "Content-Type": "application/json",
94607
- "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" ? this.apiConfig.userAgent : this.getRandomUserAgent(),
94650
+ "User-Agent": this.apiConfig.userAgent || "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0",
94608
94651
  Origin: "https://www.bilibili.com",
94609
94652
  Referer: "https://www.bilibili.com/"
94610
94653
  }
@@ -94647,7 +94690,7 @@ var BiliAPI = class extends koishi.Service {
94647
94690
  cookies,
94648
94691
  refresh_token: decryptedRefreshToken
94649
94692
  };
94650
- } catch (e$1) {
94693
+ } catch (_$2) {
94651
94694
  this.loginNotifier = this.ctx.notifier.create({
94652
94695
  type: "warning",
94653
94696
  content: "数据库被篡改,请重新登录"
@@ -94736,7 +94779,7 @@ var BiliAPI = class extends koishi.Service {
94736
94779
  try {
94737
94780
  const { data: data$1 } = await this.getCookieInfo(refreshToken);
94738
94781
  if (!data$1.refresh) return;
94739
- } catch (e$1) {
94782
+ } catch (_$2) {
94740
94783
  if (times$1 >= 1) this.ctx.setTimeout(() => {
94741
94784
  this.checkIfTokenNeedRefresh(refreshToken, csrf, times$1 - 1);
94742
94785
  }, 3e3);
@@ -95112,7 +95155,7 @@ const Config = koishi.Schema.object({
95112
95155
  masterAccountGuildId: koishi.Schema.string().role("secret").description("主人账号所在的群组ID,只有在QQ频道、Discord这样的环境才需要填写,请使用inspect插件获取群组ID")
95113
95156
  }), koishi.Schema.object({})])]),
95114
95157
  basicSettings: koishi.Schema.object({}).description("基本设置"),
95115
- userAgent: koishi.Schema.string().required().description("设置请求头User-Agen,请求出现-352时可以尝试修改,UA获取方法可参考:https://blog.csdn.net/qq_44503987/article/details/104929111"),
95158
+ userAgent: koishi.Schema.string().description("设置请求头User-Agen,请求出现-352时可以尝试修改,UA获取方法可参考:https://blog.csdn.net/qq_44503987/article/details/104929111"),
95116
95159
  subTitle: koishi.Schema.object({}).description("订阅配置"),
95117
95160
  sub: koishi.Schema.array(koishi.Schema.object({
95118
95161
  name: koishi.Schema.string().description("订阅用户昵称,只是给你自己看的(相当于备注),可填可不填"),
package/lib/index.mjs CHANGED
@@ -445,7 +445,7 @@ var require_lib$3 = __commonJS$1({ "node_modules/@koishijs/plugin-help/lib/index
445
445
  //#endregion
446
446
  //#region src/utils/index.ts
447
447
  function Retry(options = { attempts: 3 }) {
448
- return (target, propertyKey, descriptor) => {
448
+ return (_target, _propertyKey, descriptor) => {
449
449
  const originalMethod = descriptor.value;
450
450
  descriptor.value = async function(...args) {
451
451
  let lastError;
@@ -590,7 +590,7 @@ var ComRegister = class {
590
590
  let content;
591
591
  try {
592
592
  content = await ctx.ba.getLoginQRCode();
593
- } catch (e$1) {
593
+ } catch (_$2) {
594
594
  return "bili login getLoginQRCode() 本次网络请求失败";
595
595
  }
596
596
  if (content.code !== 0) return await session.send("出问题咯,请联系管理员解决");
@@ -1481,37 +1481,37 @@ var ComRegister = class {
1481
1481
  msg: "账号被封停,无法进行订阅操作"
1482
1482
  };
1483
1483
  },
1484
- [22002]: () => {
1484
+ 22002: () => {
1485
1485
  return {
1486
1486
  code: subUserData.code,
1487
1487
  msg: "因对方隐私设置,无法进行订阅操作"
1488
1488
  };
1489
1489
  },
1490
- [22003]: () => {
1490
+ 22003: () => {
1491
1491
  return {
1492
1492
  code: subUserData.code,
1493
1493
  msg: "你已将对方拉黑,无法进行订阅操作"
1494
1494
  };
1495
1495
  },
1496
- [22013]: () => {
1496
+ 22013: () => {
1497
1497
  return {
1498
1498
  code: subUserData.code,
1499
1499
  msg: "账号已注销,无法进行订阅操作"
1500
1500
  };
1501
1501
  },
1502
- [40061]: () => {
1502
+ 40061: () => {
1503
1503
  return {
1504
1504
  code: subUserData.code,
1505
1505
  msg: "账号不存在,请检查uid输入是否正确或用户是否存在"
1506
1506
  };
1507
1507
  },
1508
- [22001]: () => {
1508
+ 22001: () => {
1509
1509
  return {
1510
1510
  code: 0,
1511
1511
  msg: "订阅对象为自己,无需添加到分组"
1512
1512
  };
1513
1513
  },
1514
- [22014]: async () => {
1514
+ 22014: async () => {
1515
1515
  const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
1516
1516
  if (copyUserToGroupData.code !== 0) return {
1517
1517
  code: copyUserToGroupData.code,
@@ -1522,7 +1522,7 @@ var ComRegister = class {
1522
1522
  msg: "订阅对象添加成功"
1523
1523
  };
1524
1524
  },
1525
- [0]: async () => {
1525
+ 0: async () => {
1526
1526
  const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
1527
1527
  if (copyUserToGroupData.code !== 0) return {
1528
1528
  code: copyUserToGroupData.code,
@@ -80289,6 +80289,7 @@ var require_once = __commonJS$1({ "node_modules/once/once.js"(exports, module) {
80289
80289
  var require_end_of_stream = __commonJS$1({ "node_modules/end-of-stream/index.js"(exports, module) {
80290
80290
  var once$1 = require_once();
80291
80291
  var noop$5 = function() {};
80292
+ var qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);
80292
80293
  var isRequest$1 = function(stream$3) {
80293
80294
  return stream$3.setHeader && typeof stream$3.abort === "function";
80294
80295
  };
@@ -80322,7 +80323,7 @@ var require_end_of_stream = __commonJS$1({ "node_modules/end-of-stream/index.js"
80322
80323
  callback.call(stream$3, err);
80323
80324
  };
80324
80325
  var onclose = function() {
80325
- process.nextTick(onclosenexttick);
80326
+ qnt(onclosenexttick);
80326
80327
  };
80327
80328
  var onclosenexttick = function() {
80328
80329
  if (cancelled) return;
@@ -80374,7 +80375,7 @@ var require_pump = __commonJS$1({ "node_modules/pump/index.js"(exports, module)
80374
80375
  fs$7 = __require("fs");
80375
80376
  } catch (e$1) {}
80376
80377
  var noop$4 = function() {};
80377
- var ancient = /^v?\.0/.test(process.version);
80378
+ var ancient = typeof process === "undefined" ? false : /^v?\.0/.test(process.version);
80378
80379
  var isFn = function(fn) {
80379
80380
  return typeof fn === "function";
80380
80381
  };
@@ -83956,7 +83957,7 @@ var require_tar_fs = __commonJS$1({ "node_modules/tar-fs/index.js"(exports) {
83956
83957
  const pump = require_pump();
83957
83958
  const fs$3 = __require("fs");
83958
83959
  const path$3 = __require("path");
83959
- const win32$1 = (global.Bare?.platform || process.platform) === "win32";
83960
+ const win32$1 = (global.Bare ? global.Bare.platform : process.platform) === "win32";
83960
83961
  exports.pack = function pack(cwd, opts) {
83961
83962
  if (!cwd) cwd = ".";
83962
83963
  if (!opts) opts = {};
@@ -84042,10 +84043,10 @@ var require_tar_fs = __commonJS$1({ "node_modules/tar-fs/index.js"(exports) {
84042
84043
  return list.length ? list[list.length - 1] : null;
84043
84044
  }
84044
84045
  function processGetuid() {
84045
- return process.getuid ? process.getuid() : -1;
84046
+ return !global.Bare && process.getuid ? process.getuid() : -1;
84046
84047
  }
84047
84048
  function processUmask() {
84048
- return process.umask ? process.umask() : 0;
84049
+ return !global.Bare && process.umask ? process.umask() : 0;
84049
84050
  }
84050
84051
  exports.extract = function extract(cwd, opts) {
84051
84052
  if (!cwd) cwd = ".";
@@ -94413,6 +94414,11 @@ var BiliAPI = class extends Service {
94413
94414
  loginNotifier;
94414
94415
  refreshCookieTimer;
94415
94416
  loginInfoIsLoaded = false;
94417
+ wbiSign = {
94418
+ img_key: "",
94419
+ sub_key: ""
94420
+ };
94421
+ updateJob;
94416
94422
  constructor(ctx, config) {
94417
94423
  super(ctx, "ba");
94418
94424
  this.apiConfig = config;
@@ -94423,11 +94429,25 @@ var BiliAPI = class extends Service {
94423
94429
  this.cacheable.install(http.globalAgent);
94424
94430
  this.cacheable.install(https.globalAgent);
94425
94431
  await this.createNewClient();
94426
- this.loadCookiesFromDatabase();
94432
+ await this.loadCookiesFromDatabase();
94433
+ await this.updateBiliTicket();
94434
+ this.updateJob = new CronJob("0 0 * * *", async () => {
94435
+ await this.updateBiliTicket();
94436
+ });
94437
+ this.updateJob.start();
94427
94438
  }
94428
94439
  stop() {
94429
94440
  this.cacheable.uninstall(http.globalAgent);
94430
94441
  this.cacheable.uninstall(https.globalAgent);
94442
+ this.updateJob.stop();
94443
+ }
94444
+ async updateBiliTicket() {
94445
+ const csrf = this.getCSRF();
94446
+ const ticket = await this.getBiliTicket(csrf);
94447
+ if (ticket.code !== 0) throw new Error(`获取BiliTicket失败: ${ticket.message}`);
94448
+ this.jar.setCookieSync(`bili_ticket=${ticket.data.ticket}; path=/; domain=.bilibili.com`, "https://www.bilibili.com");
94449
+ this.wbiSign.img_key = ticket.data.nav.img.slice(ticket.data.nav.img.lastIndexOf("/") + 1, ticket.data.nav.img.lastIndexOf("."));
94450
+ this.wbiSign.sub_key = ticket.data.nav.sub.slice(ticket.data.nav.sub.lastIndexOf("/") + 1, ticket.data.nav.sub.lastIndexOf("."));
94431
94451
  }
94432
94452
  getMixinKey = (orig) => mixinKeyEncTab.map((n$2) => orig[n$2]).join("").slice(0, 32);
94433
94453
  encWbi(params, img_key, sub_key) {
@@ -94443,7 +94463,7 @@ var BiliAPI = class extends Service {
94443
94463
  return `${query}&w_rid=${wbi_sign}`;
94444
94464
  }
94445
94465
  async getWbi(params) {
94446
- const web_keys = await this.getWbiKeys();
94466
+ const web_keys = this.wbiSign || await this.getWbiKeys();
94447
94467
  const img_key = web_keys.img_key;
94448
94468
  const sub_key = web_keys.sub_key;
94449
94469
  const query = this.encWbi(params, img_key, sub_key);
@@ -94588,16 +94608,39 @@ var BiliAPI = class extends Service {
94588
94608
  disposeNotifier() {
94589
94609
  if (this.loginNotifier) this.loginNotifier.dispose();
94590
94610
  }
94591
- getRandomUserAgent() {
94592
- const userAgents = [
94593
- "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",
94594
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
94595
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
94596
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0",
94597
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
94598
- ];
94599
- const index = Math.floor(Math.random() * userAgents.length);
94600
- return userAgents[index];
94611
+ /**
94612
+ * Generate HMAC-SHA256 signature
94613
+ * @param {string} key The key string to use for the HMAC-SHA256 hash
94614
+ * @param {string} message The message string to hash
94615
+ * @returns {string} The HMAC-SHA256 signature as a hex string
94616
+ */
94617
+ hmacSha256(key, message$1) {
94618
+ const hmac = crypto.createHmac("sha256", key);
94619
+ hmac.update(message$1);
94620
+ return hmac.digest("hex");
94621
+ }
94622
+ /**
94623
+ * Get Bilibili web ticket
94624
+ * @param {string} csrf CSRF token, can be empty or null
94625
+ * @returns {Promise<any>} Promise of the ticket response in JSON format
94626
+ */
94627
+ async getBiliTicket(csrf) {
94628
+ const ts = Math.floor(Date.now() / 1e3);
94629
+ const hexSign = this.hmacSha256("XgwSnGZ1p", `ts${ts}`);
94630
+ const params = new URLSearchParams({
94631
+ key_id: "ec02",
94632
+ hexsign: hexSign,
94633
+ "context[ts]": ts.toString(),
94634
+ csrf: csrf || ""
94635
+ });
94636
+ const url = "https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket";
94637
+ const resp = await this.client.post(`${url}?${params.toString()}`, {}, { headers: {
94638
+ "Content-Type": "application/x-www-form-urlencoded",
94639
+ "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0"
94640
+ } }).catch((e$1) => {
94641
+ throw e$1;
94642
+ });
94643
+ return resp.data;
94601
94644
  }
94602
94645
  async createNewClient() {
94603
94646
  const wrapper = (await import("axios-cookiejar-support")).wrapper;
@@ -94606,7 +94649,7 @@ var BiliAPI = class extends Service {
94606
94649
  jar: this.jar,
94607
94650
  headers: {
94608
94651
  "Content-Type": "application/json",
94609
- "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" ? this.apiConfig.userAgent : this.getRandomUserAgent(),
94652
+ "User-Agent": this.apiConfig.userAgent || "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0",
94610
94653
  Origin: "https://www.bilibili.com",
94611
94654
  Referer: "https://www.bilibili.com/"
94612
94655
  }
@@ -94649,7 +94692,7 @@ var BiliAPI = class extends Service {
94649
94692
  cookies,
94650
94693
  refresh_token: decryptedRefreshToken
94651
94694
  };
94652
- } catch (e$1) {
94695
+ } catch (_$2) {
94653
94696
  this.loginNotifier = this.ctx.notifier.create({
94654
94697
  type: "warning",
94655
94698
  content: "数据库被篡改,请重新登录"
@@ -94738,7 +94781,7 @@ var BiliAPI = class extends Service {
94738
94781
  try {
94739
94782
  const { data: data$1 } = await this.getCookieInfo(refreshToken);
94740
94783
  if (!data$1.refresh) return;
94741
- } catch (e$1) {
94784
+ } catch (_$2) {
94742
94785
  if (times$1 >= 1) this.ctx.setTimeout(() => {
94743
94786
  this.checkIfTokenNeedRefresh(refreshToken, csrf, times$1 - 1);
94744
94787
  }, 3e3);
@@ -95114,7 +95157,7 @@ const Config = Schema.object({
95114
95157
  masterAccountGuildId: Schema.string().role("secret").description("主人账号所在的群组ID,只有在QQ频道、Discord这样的环境才需要填写,请使用inspect插件获取群组ID")
95115
95158
  }), Schema.object({})])]),
95116
95159
  basicSettings: Schema.object({}).description("基本设置"),
95117
- userAgent: Schema.string().required().description("设置请求头User-Agen,请求出现-352时可以尝试修改,UA获取方法可参考:https://blog.csdn.net/qq_44503987/article/details/104929111"),
95160
+ userAgent: Schema.string().description("设置请求头User-Agen,请求出现-352时可以尝试修改,UA获取方法可参考:https://blog.csdn.net/qq_44503987/article/details/104929111"),
95118
95161
  subTitle: Schema.object({}).description("订阅配置"),
95119
95162
  sub: Schema.array(Schema.object({
95120
95163
  name: Schema.string().description("订阅用户昵称,只是给你自己看的(相当于备注),可填可不填"),
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.2.5",
4
+ "version": "3.2.7-alpha.0",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "@akokko/blive-message-listener": "^0.5.1",
39
39
  "@satorijs/element": "^3.1.8",
40
- "axios": "^1.9.0",
40
+ "axios": "^1.10.0",
41
41
  "axios-cookiejar-support": "^6.0.2",
42
42
  "cacheable-lookup": "^7.0.0",
43
43
  "cron": "^4.3.1",
@@ -48,9 +48,9 @@
48
48
  "tough-cookie": "^5.1.2"
49
49
  },
50
50
  "devDependencies": {
51
- "@biomejs/biome": "^1.9.4",
51
+ "@biomejs/biome": "^2.0.0",
52
52
  "@koishijs/cache": "^2.1.0",
53
- "@koishijs/client": "^5.30.8",
53
+ "@koishijs/client": "^5.30.9",
54
54
  "@koishijs/plugin-help": "^2.4.5",
55
55
  "@koishijs/plugin-hmr": "^1.2.9",
56
56
  "@koishijs/plugin-notifier": "^1.2.1",
@@ -60,18 +60,12 @@
60
60
  "@types/md5": "^2.3.5",
61
61
  "@types/qrcode": "^1.5.5",
62
62
  "@types/tough-cookie": "^4.0.5",
63
- "esbuild": "^0.25.5",
64
- "esbuild-register": "^3.6.0",
65
63
  "globals": "^16.2.0",
66
64
  "koishi": "^4.18.8",
67
65
  "koishi-plugin-puppeteer": "^3.9.0",
68
- "tsdown": "^0.12.7",
69
- "tsx": "^4.19.4",
70
- "typescript": "5.8.3",
71
- "yakumo": "^1.0.0",
72
- "yakumo-esbuild": "^1.0.0",
73
- "yakumo-tsc": "^1.0.0",
74
- "yml-register": "^1.2.5"
66
+ "tsdown": "^0.12.8",
67
+ "tsx": "^4.20.3",
68
+ "typescript": "5.8.3"
75
69
  },
76
70
  "engines": {
77
71
  "node": ">= 18.0.0"
@@ -87,5 +81,8 @@
87
81
  "description": {
88
82
  "zh": "Bilibili动态推送,直播通知插件。具体使用方法请参考readme.md"
89
83
  }
84
+ },
85
+ "publishConfig": {
86
+ "access": "public"
90
87
  }
91
88
  }
package/readme.md CHANGED
@@ -17,11 +17,11 @@
17
17
  - [License](#License)
18
18
 
19
19
  ## 重要通知
20
- > [!important]
20
+ > [!WARNING]
21
21
  > `3.2.5-alpha.x` 目前均为测试版本,请不要更新🙅
22
22
 
23
23
  ## 重新订阅
24
- > [!important]
24
+ > [!NOTE]
25
25
  >由于版本 `2.0.0-alpha.7` 重构了订阅功能,从 `2.0.0-alpha.7` 以前版本升级到以后版本的需重新订阅
26
26
 
27
27
  ## 功能
@@ -32,19 +32,20 @@
32
32
 
33
33
  ## 注意事项
34
34
 
35
- 0. 由于 `3.0.2` 动态监测定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以通过控制台日志输出观察,打印 `动态监测初始化完毕!` 后,可进行测试
36
-
37
- 1. 此插件依赖于 `database` 和 `puppeteer` 服务,同时受权限控制,需要具备 `authority:3` 及以上的权限才能使用本插件提供的指令,你可以参考下方配置登录插件中的方法得到一个超级管理员账号(具有 `authority:5` 的最高权限)
38
-
39
- [配置登录插件](https://koishi.chat/zh-CN/manual/usage/platform.html#%E9%85%8D%E7%BD%AE%E7%99%BB%E5%BD%95%E6%8F%92%E4%BB%B6)
40
-
41
- 2. 您还可以安装 `admin` 插件,给其他用户授予权限,操作方法请参考下方的权限管理
42
-
43
- [权限管理](https://koishi.chat/zh-CN/manual/usage/customize.html)
44
-
45
- 3. 指令使用方法请参考 `help bili`,子命令使用方法请加 `-h` ,例如 `bili login -h`
46
-
47
- 4. 登录方式为二维码,输入命令 `bili login` 之后扫码登录,您的登录凭证将存储在您的本地数据库,并由您自己填写的密钥加密,所以请保管好你的密钥
35
+ > [!IMPORTANT]
36
+ > 0. 由于 `3.0.2` 动态监测定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以> 通过控制台日志输出观察,打印 `动态监测初始化完毕!` 后,可进行测试
37
+ >
38
+ > 1. 此插件依赖于 `database` 和 `puppeteer` 服务,同时受权限控制,需要具备 > `authority:3` 及以上的权限才能使用本插件提供的指令,你可以参考下方配置登录插件中的方法得> 到一个超级管理员账号(具有 `authority:5` 的最高权限)
39
+ >
40
+ > [配置登录插件](https://koishi.chat/zh-CN/manual/usage/platform.> html#%E9%85%8D%E7%BD%AE%E7%99%BB%E5%BD%95%E6%8F%92%E4%BB%B6)
41
+ >
42
+ > 2. 您还可以安装 `admin` 插件,给其他用户授予权限,操作方法请参考下方的权限管理
43
+ >
44
+ > [权限管理](https://koishi.chat/zh-CN/manual/usage/customize.html)
45
+ >
46
+ > 3. 指令使用方法请参考 `help bili`,子命令使用方法请加 `-h` ,例如 `bili login -h`
47
+ >
48
+ > 4. 登录方式为二维码,输入命令 `bili login` 之后扫码登录,您的登录凭证将存储在您的本地数据库,并由您自己填写的密钥加密,所以请保管好你的密钥
48
49
 
49
50
  ## 安装
50
51
 
@@ -82,202 +83,200 @@ uid为必填参数,为要推送的UP主的UID,index为可选参数,为要
82
83
 
83
84
  ## 更新日志
84
85
 
85
- - ver 1.0.1 修复了一些bug,提供用户自己选择动态检测时间的选项
86
- - ver 1.0.2 修复时间bug和字体乱码问题
87
- - ver 1.0.3 修复了一些bug,提供用户自己选择推送卡片字体样式的选项
88
- - ver 1.0.4 修复了重复推送的bug,提供用户选择推送卡片渲染方式的选项
89
- - ver 1.0.5 修复了用户非法篡改数据库内容可能导致程序异常运行的bug,修复了UP主开播动态推送空白卡片的bug
90
- - ver 1.0.6 修复了转发动态转发信息出现`undefined`的bug,修复了再次登录订阅显示错误的bug,优化了动态推送的逻辑
91
- - ver 1.0.7 修复了在已登录情况下,再次登录会导致重复订阅和提示用户未订阅任何UP主的提示(实际上已订阅)的bug,新增了订阅对象在控制台的显示,优化了`bili show`指令的逻辑
92
- - ver 1.0.8 修复了取消订阅的bug
93
- - ver 1.0.9 更新请求客户端header信息。优化了动态推送卡片的页面布局,增加了字体大小。提供用户开放订阅数量限制的选项,提供用户移除推送卡片边框的选项。在控制台页面增加订阅信息提示
94
- - ver 1.0.10 增加对`onebot`的支持,添加动态关键字屏蔽功能
95
- - ver 1.0.11 修复了`render`渲染模式下,动态重复推送的问题,修复了没有订阅时,控制台空白提示的问题。优化了视频动态缩略图显示不全的问题,优化了部分逻辑。增强容错和增加错误提示
96
- - ver 1.0.12 提供用户选择动态推送卡片字体增大的选项
97
- - ver 1.0.13 修复了直播通知卡片连续发三次的bug,修复了多次调用指令 `bili login` 产生的bug
98
- - ver 1.0.14 修复了获取二维码,二维码失效后会多次发送提示的bug,新增对`red`的支持,新增开播艾特全体成员功能,优化了部分逻辑
99
- - ver 1.1.0-alpha.0 修复了直播订阅一段时间过后提示房间不存在的bug,修复了自动登录刷新错误的bug
100
- - ver 1.1.0-beta.0 修复了一个bug(如果本身已经存在乱码问题的情况下,使用page模式仍然会乱码),修复了日志bug
101
- - ver 1.1.0-rc.0 修复了订阅用户直播一段时间后提示用户直播间不存在并自动取消订阅的bug
102
- - ver 1.1.0 移除了直播艾特全体成员选项实验性的标志,优化了直播房间号的获取逻辑,移除了部分测试代码
103
- - ver 1.1.1 新增依赖axios
104
- - ver 1.1.2 修复了对red协议支持的一个bug
105
- - ver 1.2.0-alpha.0 对自动更新登录信息的功能做了提升,修复了一些bug
106
- - ver 1.2.0-alpha.1 对推送进行了改进:在开启直播开播艾特全体成员的情况下,发送图片后才会艾特全体成员
107
- - ver 1.2.0-alpha.2 支持QQ群多群推送(实验性),修复了一些bug
108
- - ver 1.2.0-alpha.3 修复了指定QQ群订阅时的一个bug
109
- - ver 1.2.0-alpha.4 对时间获取进行了优化,能够适应不同环境下的时间获取,修复了一些bug
110
- - ver 1.2.0-alpha.5 修复了与PostgreSQL不兼容的问题,优化了图片推送,增强了推送容错
111
- - ver 1.2.0-rc.0 现已支持自定义开播和下播提示语(实验性)
112
- - ver 1.2.0-rc.1 现已支持Telegram平台(实验性)
113
- - ver 1.2.0-rc.2 添加更多日志输出
114
- - ver 1.2.0-rc.3 针对Telegram的bug测试版本
115
- - ver 1.2.0-rc.4 修复了订阅指令的一个bug
116
- - ver 1.2.0-rc.5 屏蔽动态设置新增是否发送动态被屏蔽消息的选项
117
- - ver 1.2.0 添加屏蔽转发动态功能,添加发送动态卡片时附带文本信息和动态链接功能,支持订阅哔哩哔哩番剧出差
118
- - ver 1.2.1 现已支持Satori平台(实验性)
119
- - ver 1.2.2-alpha.0 bug测试
120
- - ver 1.2.2-beta.0 修复重启koishi后,提示没有任何订阅的bug,新增对chronocat的支持(实验性)
121
- - ver 1.2.2-beta.1 现已支持直播开播发送链接(实验性)
122
- - ver 1.2.2-beta.2 修复了动态推送时图片下方出现空行的情况
123
- - ver 1.2.3-alpha.0 新增主人账号功能,开启后,会将插件的错误消息向主人账号发送(实验性)。修复订阅消息推送失败刷屏的bug
124
- - ver 1.2.3-beta.0 优化错误推送逻辑,现在只有设置主人账号后才会推送错误消息
125
- - ver 1.2.3-beta.1 新增指令 `bili private` 方便测试主人账号功能
126
- - ver 1.2.3-beta.2 功能测试版本,请跳过该版本
127
- - ver 1.2.3-rc.0 现已支持向机器人加入的所有群发送推送消息(仅支持Q群,实验性),修复预约动态无法正常推送的bug
128
- - ver 1.2.3-rc.1 修复 `1.2.3-rc.0` 出现的重复推送bug
129
- - ver 1.2.3-rc.2 bug测试版本,请跳过
130
- - ver 1.2.3-rc.3 bug测试版本,请跳过
131
- - ver 1.2.3-rc.4 bug测试版本,请跳过
132
- - ver 1.2.3-rc.5 修复了第一次使用插件时,扫码登录后没有任何反应,并且仍提示没有登录的bug
133
- - ver 1.2.3-rc.6 bug测试版本,请跳过
134
- - ver 1.2.3-rc.7 尝试修复多群推送时部分群未推送的bug
135
- - ver 1.2.3-rc.8 修复在 `1.2.3-rc.7` 版本引入的连续推送三次的bug
136
- - ver 1.2.3-rc.9 完善了插件出错时的日志输出
137
- - ver 1.2.3-rc.10 修复不能移除边框的bug,对图片布局进行了调整,新增下播消息发送主播头像
138
- - ver 1.2.3-rc.11 测试版本,请跳过
139
- - ver 1.2.3 完善主播下播消息发送头像功能,优化控制台订阅信息显示
140
- - ver 1.2.4 优化了下播消息发送头像图片的质量和插件重启提示
141
- - ver 1.2.5 修复了在多群订阅的情况下,其中一个群推送失败会导致其余的群全部重新推送的bug。更换图片处理依赖以解决在插件市场中被标记为不安全插件的问题
142
- - ver 1.2.6 现在可以随机生成UA,并更新了UA
143
- - ver 1.2.7 修复不论选择什么渲染模式都是render模式的bug,优化直播卡片推送逻辑
144
- - ver 1.2.8 修复例如像UP主籽岷使用webp格式的头像,下播通知无法发出的bug
145
- - ver 1.2.9-alpha.0 bug测试版本,请跳过
146
- - ver 1.2.10 修复插件启动一段时间后一直报错的问题,更新了UA列表,新增了更多日志输出
147
- - ver 1.2.11-alpha.0 新增自定义UA的设置。动态推送出错时,现在会直接取消订阅该UP主而不是取消订阅动态
148
- - ver 1.2.11-alpha.1 修复报错 `app TypeError: Cannot read properties of undefined (reading 'toString')`,添加更多日志输出
149
- - ver 1.2.12-alpha.0 新增 `sys` 类指令,包括子命令:`start`、`stop`、`restart` 分别为插件的启动、停止和重启,需要权限等级5才能使用。现在,账号出现某些问题后,不会再清除订阅信息,而是停止插件,在排除问题后需要使用指令 `sys start` 手动启动插件。修复一个动态推送的bug
150
- - ver 1.2.12-alpha.1 删除直播推送时的多余空格
151
- - ver 1.2.12-alpha.2 尝试修复版本 `1.2.12-alpha.0 账号出现某些问题后,不会再清除订阅信息` 仍然会清除订阅信息的bug
152
- - ver 1.2.12-alpha.3 尝试修复订阅时使用 `all` 报错的bug
153
- - ver 1.2.12 新增动态错误处理
154
- - ver 1.2.13 现已支持调试模式,目前支持对动态的调试。需要调试模式可在控制台中开启
155
- - ver 1.2.14 优化调试模式输出,直播推送卡片添加分区信息
156
- - ver 1.2.15 新增直播推送卡片简介隐藏选项
157
- - ver 1.2.16 当存储在数据库中的登录信息被篡改时,新增控制台提示
158
- - ver 1.3.0-alpha.0 对直播推送逻辑进行小型重构,优化了性能。新增功能:定时推送直播卡片可选是否发送直播链接;在遇到getMasterInfo()错误时,可切换获取主播信息Api
159
- - ver 1.3.0-alpha.1 修复bug:发送直播开播通知时,如果在开播语中加入链接,同时开启了推送直播卡片发送直播链接,则会发送两条链接
160
- - ver 1.3.0-rc.0 修复bug:发送直播开播通知时,如果开启了开播发送链接,会在链接末尾添加一个false
161
- - ver 1.3.0 修复bug:渲染动态时,过长的单图会导致渲染错误
162
- - ver 1.3.1 优化过长单图的显示样式
163
- - ver 1.3.2 增加对飞书平台的支持
164
- - ver 1.3.3 新增直播推送人气信息展示
165
- - ver 1.3.4 新增消息推送失败是否自动重发的选项,修复了一些潜在的bug
166
- - ver 1.3.5 动态监测循环时间新增20分钟选项
167
- - ver 1.3.6-alpha.0 修复bug:无限重复的报错提示
168
- - ver 1.3.6-beta.0 取消出错自动重启插件功能
169
- - ver 1.3.6-rc.0 修复重启或更新后提示未登录或订阅时提示请登录后再订阅的问题
170
- - ver 1.3.6 现在基本设置中的userAgent选项为必填项,当因风控订阅失败时会提示更换UA,优化直播人气显示
171
- - ver 1.3.7 新增设置项:插件重启后是否进行直播推送。优化直播人气显示
172
-
173
- - ver 2.0.0-alpha.0 重构:对动态订阅进行了重构,优化了订阅流程
174
- - ver 2.0.0-alpha.1 修复:无法成功取消订阅自己、用户没有直播间订阅直播出错。对直播订阅进行了限制,继承自以前的unlockSubLimits配置项。优化了一些配置项
175
- - ver 2.0.0-alpha.2 新增:支持Discord平台。优化了下播通知
176
- - ver 2.0.0-alpha.3 修复:订阅和取消订阅的bug,下播通知的bug
177
- - ver 2.0.0-alpha.4 修复:初次订阅后不推送动态的bug 优化:下播不再发送链接
178
- - ver 2.0.0-alpha.5 移除:选项pushUrl,选项platform 新增:选项customLive,主人账号中platform选项。支持多平台,且可同时推送不同平台,单个UP主只能推送一个平台
179
- - ver 2.0.0-alpha.6 修复:直播推送发送失败的bug
180
- - ver 2.0.0-alpha.7 重构:现已支持同一UP多平台推送
181
- - ver 2.0.0-alpha.8 新增:重新订阅提示
182
- - ver 2.0.0-alpha.9 修复:订阅反复提示未加入群组的bug,实际已加入
183
- - ver 2.0.0-alpha.10 新增:可对每个群聊针对性设置是否艾特全体成员 优化:直播下播通知
184
- - ver 2.0.0-alpha.11 回档:订阅时可直接接收群号/频道号 修复:直播过程推送消息不成功的bug
185
- - ver 2.0.0-alpha.12 更改:开启艾特全体成员后,只有在开播时才艾特全体成员
186
- - ver 2.0.0-alpha.13 修复:无法对TG群组的特殊频道号进行订阅处理;提示 `您未配置对应平台的机器人,不能在该平台进行订阅操作` 仍进行订阅操作
187
- - ver 2.0.0-alpha.14 修复:订阅TG群组时提示输入无效
188
- - ver 2.0.0-alpha.15 新增:手动订阅功能 修复:一些潜在的bug
189
- - ver 2.0.0-alpha.16 优化:手动订阅功能
190
- - ver 2.0.0-alpha.17 修复:直接订阅当前环境不会推送
191
- - ver 2.0.0-alpha.18 修复:手动订阅无法推送直播通知;自定义直播中通知语不会发送
192
- - ver 2.0.0-alpha.19 修复:开播通知后带false;下播通知卡片人气位置显示false
193
- - ver 2.0.0-alpha.20 修复:直播推送失败 `Error with request send_group_msg`
194
- - ver 2.0.0-alpha.21 修复:在某些场景下仍会出现 `2.0.0-alpha.19` `2.0.0-alpha.20` 版本已修复的问题
195
- - ver 2.0.0-alpha.22 移除:不需要的服务
196
- - ver 2.0.0-alpha.23 优化:将艾特全体成员消息单独发送
197
-
198
- - ver 3.0.0-alpha.0 重构:直播 新增:直播弹幕推送到群
199
- - ver 3.0.0-alpha.1 测试版本
200
- - ver 3.0.0-alpha.2 修复:只订阅直播也会将该UP主的动态进行推送、推送过的动态过一段时间又会再次推送
201
- - ver 3.0.0-alpha.3 修复:未开启弹幕推送也不会推送直播通知卡片
202
- - ver 3.0.0-alpha.4 修复:使用了手动订阅,数据库中的订阅不会加载
203
- - ver 3.0.0-alpha.5 修复:订阅的直播开播后,未开启弹幕推送会一直报错、主播开播推送下播卡片,直播时长显示NaN; 新增:直播检测模式选项; 优化:下播卡片内容
204
- - ver 3.0.0-alpha.6 修复:连续发送两次直播中通知卡片; 优化:下播通知卡片
205
- - ver 3.0.0-alpha.7 修复:`ver 3.0.0-alpha.5` 未能解决的bug; 优化:ba代码结构
206
- - ver 3.0.0-alpha.8 修复:开播通知连续发送两次,登录后不会加载手动订阅中的订阅; 优化:网络请求报错
207
- - ver 3.0.0-alpha.9 优化:加强直播推送对获取直播信息的错误处理
208
- - ver 3.0.0-alpha.10 修复:连续推送两次开播通知
209
- - ver 3.0.0-alpha.11 新增:直播结束后推送弹幕词云,直播推送上舰消息; 修复:直播推送都是同一张画面; 移除:直播推送弹幕消息
210
- - ver 3.0.0-alpha.12 修复:上一版本无法安装
211
- - ver 3.0.0-alpha.13 优化:将ESLint替换为Biome; 修复:增加弹幕词云功能产生的bug; 禁用:弹幕词云功能并不能正常运作,暂时将该功能禁用
212
- - ver 3.0.0-alpha.14 优化:移除不需要的服务
213
- - ver 3.0.0-alpha.15 修复:启动插件提示发送群组消息失败、直播推送时间显示为负数(不用再特别设置系统时区为UTC+8)
214
- - ver 3.0.0-alpha.16 重大更新:订阅不再依赖数据库,从指令订阅全面迁移到配置订阅; 修复:直播时长有误; 优化:`bili show` 指令更改为 `bili list`
215
- - ver 3.0.0-alpha.17 新增:更多的提示语变量,开播,当前粉丝数。正在直播,累计观看人数。下播,粉丝数变化。选项,新增的提示语变量是否展示到推送卡片中
216
- - ver 3.0.0-alpha.18 移除:直播检测API模式已被废弃; 优化:更多提示语数据显示优化
217
- - ver 3.0.0-alpha.19 修复:开播提示语粉丝数单位错误; 优化:订阅配置中所有配置项改为必填项
218
- - ver 3.0.0-alpha.20 优化:订阅配置中开关选项默认为关闭
219
- - ver 3.0.0-alpha.21 优化:部分代码; 新增:更新插件后,由于机器人还未启动,已开始发送消息报错 `this._request is not a function` ,新增报错后自动重新发送消息的功能
220
- - ver 3.0.0-alpha.22 优化:订阅配置展示优化
221
- - ver 3.0.0-alpha.23 新增:指令 `bili ll` 可以查看当前订阅直播的UP主们的开播情况
222
- - ver 3.0.0-alpha.24 新增:配置项,`cardBasePlateColor` `cardBasePlateBorder`,分别设置卡片底板颜色和底板边框宽度; 优化:部分代码结构
223
- - ver 3.0.0-alpha.25 修复:输入指令 `bili ll` 时报错 `TypeError: Cannot read properties of null (reading 'items')`,当某个订阅只订阅动态时无法成功订阅且后续订阅都无法加载; 优化:部分代码结构
224
- - ver 3.0.0-beta.0 移除:配置项 `renderType`,推送卡片渲染模式 `render`,现默认为 `page` 渲染模式; 优化:部分代码结构
225
- - ver 3.0.0-beta.1 修复:使用动态屏蔽时,同时开启动态debug模式,当检测到屏蔽动态时会直接报错关闭插件; 新增:配置项 `pushImgsInDynamic` 是否推送动态中的图片,默认不开启。开启后会单独推送动态中的图片,上舰信息直播间提示
226
- - ver 3.0.0-beta.2 新增:配置项 `sub.card`,能更改每个订阅的推送卡片样式,未更改的样式与全局样式保持一致
227
- - ver 3.0.0 优化:配置项 `sub.card` 添加实验性标识
228
- - ver 3.0.1-alpha.0 优化:动态推送逻辑
229
- - ver 3.0.1-alpha.1 新增:直播提示语换行符,配置项 `sub.name` 为可选项; 修复:debug模式下动态监测5S一次; 优化:加载订阅
230
- - ver 3.0.1-alpha.2 优化:改进错误提示,改进订阅加载方式
231
- - ver 3.0.1 修复:动态推送过程中,如果上一次请求的第一条动态被删除,可能导致动态重复推送(本次修复并不能完全保障不重复推送,如果第一条和第二条都被删除则可能会出现重复推送); 新增:配置项 `subTimeout` 设置订阅超时时间
232
- - ver 3.0.2 优化:动态监测,新增依赖服务 `cron`
233
- - ver 3.0.3 移除:配置项 `dynamicLoopTime` ,动态循环时间将不再可选,默认为两分钟
234
- - ver 3.0.4 优化:动态监测,增加时间判断,防止出现重复推送问题; 由于 `3.0.2` 动态监测定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以通过控制台日志输出观察,打印 `动态监测初始化完毕!` 后,可进行测试
235
- - ver 3.0.5-alpha.0 优化:推送卡片渲染,压缩图片; 新增:指令 `bili dyn` 可用于推送指定UP主指定动态
236
- - ver 3.0.5-alpha.1 优化:推送卡片渲染,调整渲染图片格式为 `jpeg`
237
- - ver 3.0.5-alpha.2 优化:移除多余依赖
238
- - ver 3.1.0-alpha.0 修复:新插件在第一次订阅时提示 `订阅失败,错误信息:该分组已经存在`; 移除:消息重发功能; 重构:将消息发送模式改为 `broadcast`
239
- - ver 3.1.0-alpha.1 修复:无法发送 `@全体成员` 消息,将消息发送模式改回
240
- - ver 3.1.0 修复:订阅某位UP主直播和动态后,某些群聊只开启推送直播也会推送动态
241
- - ver 3.1.1-alpha.0 修复:稿件重投后,会将之前日期的动态一起推送; 优化:加强动态debug输出; 移除:不必要选项 `live.liveDetectMode`
242
- - ver 3.1.2-alpha.0 重构:对消息发送模块进行小型重构,多群多平台推送将不再支持艾特全体成员,仅单平台单群聊支持; 移除:群聊 `all` 选项
243
- - ver 3.1.3-alpha.0 移除:订阅超时; 新增:屏蔽专栏动态功能; 优化:改进了加载插件的错误提示;
244
- - ver 3.1.4-alpha.0 修复:动态只推送视频; 优化:动态视频链接将直接发送为视频链接;
245
- - ver 3.1.5-alpha.0 修复:潜在动态推送bug; 优化:现在动态监测无需等待,当插件初始化完成即开始监测、移除多余依赖、移除对 `cron` 服务的依赖、移除选项 `超时订阅`
246
- - ver 3.1.5-alpha.1 修复:动态不推送的bug;
247
- - ver 3.1.5-alpha.2 修复:潜在动态推送bug;
248
- - ver 3.1.5-alpha.3 修复:动态推送时报错:dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:Cannot read properties of undefined (reading 'card')
249
- - ver 3.1.5 修复:非 `debug` 模式下动态推送,如果在一个监测周期内同一个订阅的up主发送多条动态,下一个监测周期会重复推送;
250
- - ver 3.1.6 修复:视频类动态推送时,发送的视频链接有误;
251
- - ver 3.1.7-alpha.0 修复:登录账号和订阅账号是同一个账号,动态不会推送,使用 `bili dyn` 指令,纯文本动态会被跳过; 新增:动态标题;
252
- - ver 3.1.7-alpha.1 修复:启用自定义卡片样式后取消仍是自定义样式;
253
- - ver 3.1.7-alpha.2 修复:`liveDetect generateLiveImg() 推送卡片生成失败,原因:Cannot read properties of undefined (reading 'cardColorStart')`;
254
- - ver 3.1.7-alpha.3 修复:推送视频类动态报错;
255
- - ver 3.1.7 修复:第一次使用插件报错 `TypeError: Cannot read properties of undefined (reading 'dynamic_group_id')`
256
- - ver 3.2.0-alpha.0 新增:直播检测 `API` 模式; 优化:提升直播检测 `WS` 模式使用体验;
257
- - ver 3.2.0-alpha.1 修复:直播检测 `API` 模式,中途加入推送语无法正确显示直播时长;
258
- - ver 3.2.0-alpha.2 修复:直播检测 `API` 模式,请求错误优化(防止不停向QQ发送消息);
259
- - ver 3.2.0-alpha.3 优化:增加直播检测 `API` 模式轮询时间,防止被暂时风控;
260
- - ver 3.2.0-alpha.4 修复:直播卡片推送时间会是设置的 `pushTime` 的两倍;
261
- - ver 3.2.0-alpha.5 修复:直播检测 `WS` 模式下,直播中推送卡片 `累计观看人数` 位置错误显示为 `粉丝数变化` 、转发动态的留言文字不显示; 优化:直播检测 `API` 模式下,直播推送语 `-watched` 固定显示为 `API模式无法获取`;
262
- - ver 3.2.0-alpha.6 优化:调整配置项;
263
- - ver 3.2.0-alpha.7 修复:自 `3.1.7` 版本 `pushImgsInDynamic` 功能失效;
264
- - ver 3.2.1-alpha.0 新增:多个相同平台bot可以选择某个群聊/频道指定机器人发送; 优化:直播检测 `WS` 模式下播后仍推送、添加依赖 `cacheable-lookup` 优化网络; 修复:打开 `pushImgsInDynamic` 功能时,如果发送的动态里没有图片则会报错 `TypeError: Cannot read properties of null (reading 'opus')`
265
- - ver 3.2.1-alpha.1 调整:将项目构建产物调整为 `esm`;
266
- - ver 3.2.1-alpha.2 调整:将项目构建产物调整回 `cjs` 、将依赖 `cacheable-lookup` 导入方式更改为动态导入;
267
- - ver 3.2.1-alpha.3 修复:直播检测 `WS` 初始化后自动断开连接;
268
- - ver 3.2.1-alpha.4 优化:直播监听初始化没有提示;
269
- - ver 3.2.1-alpha.4 - ver 3.2.1-alpha.8 `deprecate`
270
- - ver 3.2.1-alpha.9 修复:`bugs`
271
- - ver 3.2.1-alpha.10 修复:临时切换依赖 `blive-message-listener` 为 `@akokko/blive-message-listener` 以解决直播检测模式 `WS` 掉线问题、第一次使用插件报错 `TypeError: Cannot set properties of undefined (setting 'dynamic_group_id')`;
272
- - ver 3.2.1-alpha.11 WARNING:测试版本;
273
- - ver 3.2.1 优化:移除不必要成员变量、创建自动上传npm `github actions`,添加相关开发依赖;
274
- - ver 3.2.2 调整:修改 `github actions`;
275
- - ver 3.2.3 优化:移除不必要的代码;
276
- - ver 3.2.4-alpha.0 优化:选项 `pushImgsInDynamic` 发送多图会以转发消息的格式发送; 新增:选项 `dynamicVideoUrlToBV` 开启后将链接转换为bv号以用作特殊用途;
277
- - ver 3.2.4 修复:第一次使用插件时,使用登录指令报错; 插件配置页新增和删除提示信息;
278
-
279
- > [!important]
280
- > `3.2.5-alpha.x` 目前均为测试版本,请不要更新🙅
86
+ > [!NOTE]
87
+ > - ver 1.0.1 修复了一些bug,提供用户自己选择动态检测时间的选项
88
+ > - ver 1.0.2 修复时间bug和字体乱码问题
89
+ > - ver 1.0.3 修复了一些bug,提供用户自己选择推送卡片字体样式的选项
90
+ > - ver 1.0.4 修复了重复推送的bug,提供用户选择推送卡片渲染方式的选项
91
+ > - ver 1.0.5 修复了用户非法篡改数据库内容可能导致程序异常运行的bug,修复了UP主开播动态推> 送空白卡片的bug
92
+ > - ver 1.0.6 修复了转发动态转发信息出现`undefined`的bug,修复了再次登录订阅显示错误的> bug,优化了动态推送的逻辑
93
+ > - ver 1.0.7 修复了在已登录情况下,再次登录会导致重复订阅和提示用户未订阅任何UP主的提示> (实际上已订阅)的bug,新增了订阅对象在控制台的显示,优化了`bili show`指令的逻辑
94
+ > - ver 1.0.8 修复了取消订阅的bug
95
+ > - ver 1.0.9 更新请求客户端header信息。优化了动态推送卡片的页面布局,增加了字体大小。提供> 用户开放订阅数量限制的选项,提供用户移除推送卡片边框的选项。在控制台页面增加订阅信息提示
96
+ > - ver 1.0.10 增加对`onebot`的支持,添加动态关键字屏蔽功能
97
+ > - ver 1.0.11 修复了`render`渲染模式下,动态重复推送的问题,修复了没有订阅时,控制台空白> 提示的问题。优化了视频动态缩略图显示不全的问题,优化了部分逻辑。增强容错和增加错误提示
98
+ > - ver 1.0.12 提供用户选择动态推送卡片字体增大的选项
99
+ > - ver 1.0.13 修复了直播通知卡片连续发三次的bug,修复了多次调用指令 `bili login` 产生> 的bug
100
+ > - ver 1.0.14 修复了获取二维码,二维码失效后会多次发送提示的bug,新增对`red`的支持,新增> 开播艾特全体成员功能,优化了部分逻辑
101
+ > - ver 1.1.0-alpha.0 修复了直播订阅一段时间过后提示房间不存在的bug,修复了自动登录刷新> 错误的bug
102
+ > - ver 1.1.0-beta.0 修复了一个bug(如果本身已经存在乱码问题的情况下,使用page模式仍然会> 乱码),修复了日志bug
103
+ > - ver 1.1.0-rc.0 修复了订阅用户直播一段时间后提示用户直播间不存在并自动取消订阅的bug
104
+ > - ver 1.1.0 移除了直播艾特全体成员选项实验性的标志,优化了直播房间号的获取逻辑,移除了部> 分测试代码
105
+ > - ver 1.1.1 新增依赖axios
106
+ > - ver 1.1.2 修复了对red协议支持的一个bug
107
+ > - ver 1.2.0-alpha.0 对自动更新登录信息的功能做了提升,修复了一些bug
108
+ > - ver 1.2.0-alpha.1 对推送进行了改进:在开启直播开播艾特全体成员的情况下,发送图片后才> 会艾特全体成员
109
+ > - ver 1.2.0-alpha.2 支持QQ群多群推送(实验性),修复了一些bug
110
+ > - ver 1.2.0-alpha.3 修复了指定QQ群订阅时的一个bug
111
+ > - ver 1.2.0-alpha.4 对时间获取进行了优化,能够适应不同环境下的时间获取,修复了一些bug
112
+ > - ver 1.2.0-alpha.5 修复了与PostgreSQL不兼容的问题,优化了图片推送,增强了推送容错
113
+ > - ver 1.2.0-rc.0 现已支持自定义开播和下播提示语(实验性)
114
+ > - ver 1.2.0-rc.1 现已支持Telegram平台(实验性)
115
+ > - ver 1.2.0-rc.2 添加更多日志输出
116
+ > - ver 1.2.0-rc.3 针对Telegram的bug测试版本
117
+ > - ver 1.2.0-rc.4 修复了订阅指令的一个bug
118
+ > - ver 1.2.0-rc.5 屏蔽动态设置新增是否发送动态被屏蔽消息的选项
119
+ > - ver 1.2.0 添加屏蔽转发动态功能,添加发送动态卡片时附带文本信息和动态链接功能,支持订阅> 哔哩哔哩番剧出差
120
+ > - ver 1.2.1 现已支持Satori平台(实验性)
121
+ > - ver 1.2.2-alpha.0 bug测试
122
+ > - ver 1.2.2-beta.0 修复重启koishi后,提示没有任何订阅的bug,新增对chronocat的支持> (实验性)
123
+ > - ver 1.2.2-beta.1 现已支持直播开播发送链接(实验性)
124
+ > - ver 1.2.2-beta.2 修复了动态推送时图片下方出现空行的情况
125
+ > - ver 1.2.3-alpha.0 新增主人账号功能,开启后,会将插件的错误消息向主人账号发送(实验> 性)。修复订阅消息推送失败刷屏的bug
126
+ > - ver 1.2.3-beta.0 优化错误推送逻辑,现在只有设置主人账号后才会推送错误消息
127
+ > - ver 1.2.3-beta.1 新增指令 `bili private` 方便测试主人账号功能
128
+ > - ver 1.2.3-beta.2 功能测试版本,请跳过该版本
129
+ > - ver 1.2.3-rc.0 现已支持向机器人加入的所有群发送推送消息(仅支持Q群,实验性),修复预约> 动态无法正常推送的bug
130
+ > - ver 1.2.3-rc.1 修复 `1.2.3-rc.0` 出现的重复推送bug
131
+ > - ver 1.2.3-rc.2 bug测试版本,请跳过
132
+ > - ver 1.2.3-rc.3 bug测试版本,请跳过
133
+ > - ver 1.2.3-rc.4 bug测试版本,请跳过
134
+ > - ver 1.2.3-rc.5 修复了第一次使用插件时,扫码登录后没有任何反应,并且仍提示没有登录的> bug
135
+ > - ver 1.2.3-rc.6 bug测试版本,请跳过
136
+ > - ver 1.2.3-rc.7 尝试修复多群推送时部分群未推送的bug
137
+ > - ver 1.2.3-rc.8 修复在 `1.2.3-rc.7` 版本引入的连续推送三次的bug
138
+ > - ver 1.2.3-rc.9 完善了插件出错时的日志输出
139
+ > - ver 1.2.3-rc.10 修复不能移除边框的bug,对图片布局进行了调整,新增下播消息发送主播头像
140
+ > - ver 1.2.3-rc.11 测试版本,请跳过
141
+ > - ver 1.2.3 完善主播下播消息发送头像功能,优化控制台订阅信息显示
142
+ > - ver 1.2.4 优化了下播消息发送头像图片的质量和插件重启提示
143
+ > - ver 1.2.5 修复了在多群订阅的情况下,其中一个群推送失败会导致其余的群全部重新推送的> bug。更换图片处理依赖以解决在插件市场中被标记为不安全插件的问题
144
+ > - ver 1.2.6 现在可以随机生成UA,并更新了UA
145
+ > - ver 1.2.7 修复不论选择什么渲染模式都是render模式的bug,优化直播卡片推送逻辑
146
+ > - ver 1.2.8 修复例如像UP主籽岷使用webp格式的头像,下播通知无法发出的bug
147
+ > - ver 1.2.9-alpha.0 bug测试版本,请跳过
148
+ > - ver 1.2.10 修复插件启动一段时间后一直报错的问题,更新了UA列表,新增了更多日志输出
149
+ > - ver 1.2.11-alpha.0 新增自定义UA的设置。动态推送出错时,现在会直接取消订阅该UP主而不> 是取消订阅动态
150
+ > - ver 1.2.11-alpha.1 修复报错 `app TypeError: Cannot read properties of > undefined (reading 'toString')`,添加更多日志输出
151
+ > - ver 1.2.12-alpha.0 新增 `sys` 类指令,包括子命令:`start`、`stop`、`restart` > 分别为插件的启动、停止和重启,需要权限等级5才能使用。现在,账号出现某些问题后,不会再清除订> 阅信息,而是停止插件,在排除问题后需要使用指令 `sys start` 手动启动插件。修复一个动态推送> 的bug
152
+ > - ver 1.2.12-alpha.1 删除直播推送时的多余空格
153
+ > - ver 1.2.12-alpha.2 尝试修复版本 `1.2.12-alpha.0 账号出现某些问题后,不会再清除订> 阅信息` 仍然会清除订阅信息的bug
154
+ > - ver 1.2.12-alpha.3 尝试修复订阅时使用 `all` 报错的bug
155
+ > - ver 1.2.12 新增动态错误处理
156
+ > - ver 1.2.13 现已支持调试模式,目前支持对动态的调试。需要调试模式可在控制台中开启
157
+ > - ver 1.2.14 优化调试模式输出,直播推送卡片添加分区信息
158
+ > - ver 1.2.15 新增直播推送卡片简介隐藏选项
159
+ > - ver 1.2.16 当存储在数据库中的登录信息被篡改时,新增控制台提示
160
+ > - ver 1.3.0-alpha.0 对直播推送逻辑进行小型重构,优化了性能。新增功能:定时推送直播卡片> 可选是否发送直播链接;在遇到getMasterInfo()错误时,可切换获取主播信息Api
161
+ > - ver 1.3.0-alpha.1 修复bug:发送直播开播通知时,如果在开播语中加入链接,同时开启了推> 送直播卡片发送直播链接,则会发送两条链接
162
+ > - ver 1.3.0-rc.0 修复bug:发送直播开播通知时,如果开启了开播发送链接,会在链接末尾添加> 一个false
163
+ > - ver 1.3.0 修复bug:渲染动态时,过长的单图会导致渲染错误
164
+ > - ver 1.3.1 优化过长单图的显示样式
165
+ > - ver 1.3.2 增加对飞书平台的支持
166
+ > - ver 1.3.3 新增直播推送人气信息展示
167
+ > - ver 1.3.4 新增消息推送失败是否自动重发的选项,修复了一些潜在的bug
168
+ > - ver 1.3.5 动态监测循环时间新增20分钟选项
169
+ > - ver 1.3.6-alpha.0 修复bug:无限重复的报错提示
170
+ > - ver 1.3.6-beta.0 取消出错自动重启插件功能
171
+ > - ver 1.3.6-rc.0 修复重启或更新后提示未登录或订阅时提示请登录后再订阅的问题
172
+ > - ver 1.3.6 现在基本设置中的userAgent选项为必填项,当因风控订阅失败时会提示更换UA,优> 化直播人气显示
173
+ > - ver 1.3.7 新增设置项:插件重启后是否进行直播推送。优化直播人气显示
174
+ >
175
+ > - ver 2.0.0-alpha.0 重构:对动态订阅进行了重构,优化了订阅流程
176
+ > - ver 2.0.0-alpha.1 修复:无法成功取消订阅自己、用户没有直播间订阅直播出错。对直播订阅> 进行了限制,继承自以前的unlockSubLimits配置项。优化了一些配置项
177
+ > - ver 2.0.0-alpha.2 新增:支持Discord平台。优化了下播通知
178
+ > - ver 2.0.0-alpha.3 修复:订阅和取消订阅的bug,下播通知的bug
179
+ > - ver 2.0.0-alpha.4 修复:初次订阅后不推送动态的bug 优化:下播不再发送链接
180
+ > - ver 2.0.0-alpha.5 移除:选项pushUrl,选项platform 新增:选项customLive,主人账> 号中platform选项。支持多平台,且可同时推送不同平台,单个UP主只能推送一个平台
181
+ > - ver 2.0.0-alpha.6 修复:直播推送发送失败的bug
182
+ > - ver 2.0.0-alpha.7 重构:现已支持同一UP多平台推送
183
+ > - ver 2.0.0-alpha.8 新增:重新订阅提示
184
+ > - ver 2.0.0-alpha.9 修复:订阅反复提示未加入群组的bug,实际已加入
185
+ > - ver 2.0.0-alpha.10 新增:可对每个群聊针对性设置是否艾特全体成员 优化:直播下播通知
186
+ > - ver 2.0.0-alpha.11 回档:订阅时可直接接收群号/频道号 修复:直播过程推送消息不成功的> bug
187
+ > - ver 2.0.0-alpha.12 更改:开启艾特全体成员后,只有在开播时才艾特全体成员
188
+ > - ver 2.0.0-alpha.13 修复:无法对TG群组的特殊频道号进行订阅处理;提示 `您未配置对应平> 台的机器人,不能在该平台进行订阅操作` 仍进行订阅操作
189
+ > - ver 2.0.0-alpha.14 修复:订阅TG群组时提示输入无效
190
+ > - ver 2.0.0-alpha.15 新增:手动订阅功能 修复:一些潜在的bug
191
+ > - ver 2.0.0-alpha.16 优化:手动订阅功能
192
+ > - ver 2.0.0-alpha.17 修复:直接订阅当前环境不会推送
193
+ > - ver 2.0.0-alpha.18 修复:手动订阅无法推送直播通知;自定义直播中通知语不会发送
194
+ > - ver 2.0.0-alpha.19 修复:开播通知后带false;下播通知卡片人气位置显示false
195
+ > - ver 2.0.0-alpha.20 修复:直播推送失败 `Error with request send_group_msg`
196
+ > - ver 2.0.0-alpha.21 修复:在某些场景下仍会出现 `2.0.0-alpha.19` 和 `2.0.> 0-alpha.20` 版本已修复的问题
197
+ > - ver 2.0.0-alpha.22 移除:不需要的服务
198
+ > - ver 2.0.0-alpha.23 优化:将艾特全体成员消息单独发送
199
+ >
200
+ > - ver 3.0.0-alpha.0 重构:直播 新增:直播弹幕推送到群
201
+ > - ver 3.0.0-alpha.1 测试版本
202
+ > - ver 3.0.0-alpha.2 修复:只订阅直播也会将该UP主的动态进行推送、推送过的动态过一段时间> 又会再次推送
203
+ > - ver 3.0.0-alpha.3 修复:未开启弹幕推送也不会推送直播通知卡片
204
+ > - ver 3.0.0-alpha.4 修复:使用了手动订阅,数据库中的订阅不会加载
205
+ > - ver 3.0.0-alpha.5 修复:订阅的直播开播后,未开启弹幕推送会一直报错、主播开播推送下播> 卡片,直播时长显示NaN; 新增:直播检测模式选项; 优化:下播卡片内容
206
+ > - ver 3.0.0-alpha.6 修复:连续发送两次直播中通知卡片; 优化:下播通知卡片
207
+ > - ver 3.0.0-alpha.7 修复:`ver 3.0.0-alpha.5` 未能解决的bug; 优化:ba代码结构
208
+ > - ver 3.0.0-alpha.8 修复:开播通知连续发送两次,登录后不会加载手动订阅中的订阅; 优化:> 网络请求报错
209
+ > - ver 3.0.0-alpha.9 优化:加强直播推送对获取直播信息的错误处理
210
+ > - ver 3.0.0-alpha.10 修复:连续推送两次开播通知
211
+ > - ver 3.0.0-alpha.11 新增:直播结束后推送弹幕词云,直播推送上舰消息; 修复:直播推送都> 是同一张画面; 移除:直播推送弹幕消息
212
+ > - ver 3.0.0-alpha.12 修复:上一版本无法安装
213
+ > - ver 3.0.0-alpha.13 优化:将ESLint替换为Biome; 修复:增加弹幕词云功能产生的bug; > 禁用:弹幕词云功能并不能正常运作,暂时将该功能禁用
214
+ > - ver 3.0.0-alpha.14 优化:移除不需要的服务
215
+ > - ver 3.0.0-alpha.15 修复:启动插件提示发送群组消息失败、直播推送时间显示为负数(不用再> 特别设置系统时区为UTC+8)
216
+ > - ver 3.0.0-alpha.16 重大更新:订阅不再依赖数据库,从指令订阅全面迁移到配置订阅; 修> 复:直播时长有误; 优化:`bili show` 指令更改为 `bili list`
217
+ > - ver 3.0.0-alpha.17 新增:更多的提示语变量,开播,当前粉丝数。正在直播,累计观看人数。> 下播,粉丝数变化。选项,新增的提示语变量是否展示到推送卡片中
218
+ > - ver 3.0.0-alpha.18 移除:直播检测API模式已被废弃; 优化:更多提示语数据显示优化
219
+ > - ver 3.0.0-alpha.19 修复:开播提示语粉丝数单位错误; 优化:订阅配置中所有配置项改为必> 填项
220
+ > - ver 3.0.0-alpha.20 优化:订阅配置中开关选项默认为关闭
221
+ > - ver 3.0.0-alpha.21 优化:部分代码; 新增:更新插件后,由于机器人还未启动,已开始发送> 消息报错 `this._request is not a function` ,新增报错后自动重新发送消息的功能
222
+ > - ver 3.0.0-alpha.22 优化:订阅配置展示优化
223
+ > - ver 3.0.0-alpha.23 新增:指令 `bili ll` 可以查看当前订阅直播的UP主们的开播情况
224
+ > - ver 3.0.0-alpha.24 新增:配置项,`cardBasePlateColor` > `cardBasePlateBorder`,分别设置卡片底板颜色和底板边框宽度; 优化:部分代码结构
225
+ > - ver 3.0.0-alpha.25 修复:输入指令 `bili ll` 时报错 `TypeError: Cannot read > properties of null (reading 'items')`,当某个订阅只订阅动态时无法成功订阅且后续订阅> 都无法加载; 优化:部分代码结构
226
+ > - ver 3.0.0-beta.0 移除:配置项 `renderType`,推送卡片渲染模式 `render`,现默认为 > `page` 渲染模式; 优化:部分代码结构
227
+ > - ver 3.0.0-beta.1 修复:使用动态屏蔽时,同时开启动态debug模式,当检测到屏蔽动态时会直> 接报错关闭插件; 新增:配置项 `pushImgsInDynamic` 是否推送动态中的图片,默认不开启。开> 启后会单独推送动态中的图片,上舰信息直播间提示
228
+ > - ver 3.0.0-beta.2 新增:配置项 `sub.card`,能更改每个订阅的推送卡片样式,未更改的样> 式与全局样式保持一致
229
+ > - ver 3.0.0 优化:配置项 `sub.card` 添加实验性标识
230
+ > - ver 3.0.1-alpha.0 优化:动态推送逻辑
231
+ > - ver 3.0.1-alpha.1 新增:直播提示语换行符,配置项 `sub.name` 为可选项; 修复:> debug模式下动态监测5S一次; 优化:加载订阅
232
+ > - ver 3.0.1-alpha.2 优化:改进错误提示,改进订阅加载方式
233
+ > - ver 3.0.1 修复:动态推送过程中,如果上一次请求的第一条动态被删除,可能导致动态重复推送> (本次修复并不能完全保障不重复推送,如果第一条和第二条都被删除则可能会出现重复推送); 新增:> 配置项 `subTimeout` 设置订阅超时时间
234
+ > - ver 3.0.2 优化:动态监测,新增依赖服务 `cron`
235
+ > - ver 3.0.3 移除:配置项 `dynamicLoopTime` ,动态循环时间将不再可选,默认为两分钟
236
+ > - ver 3.0.4 优化:动态监测,增加时间判断,防止出现重复推送问题; 由于 `3.0.2` 动态监测> 定时器更换为cron定时任务,如果需要测试动态监测功能是否正常,可以通过控制台日志输出观察,打> `动态监测初始化完毕!` 后,可进行测试
237
+ > - ver 3.0.5-alpha.0 优化:推送卡片渲染,压缩图片; 新增:指令 `bili dyn` 可用于推送> 指定UP主指定动态
238
+ > - ver 3.0.5-alpha.1 优化:推送卡片渲染,调整渲染图片格式为 `jpeg`
239
+ > - ver 3.0.5-alpha.2 优化:移除多余依赖
240
+ > - ver 3.1.0-alpha.0 修复:新插件在第一次订阅时提示 `订阅失败,错误信息:该分组已经存在> `; 移除:消息重发功能; 重构:将消息发送模式改为 `broadcast`
241
+ > - ver 3.1.0-alpha.1 修复:无法发送 `@全体成员` 消息,将消息发送模式改回
242
+ > - ver 3.1.0 修复:订阅某位UP主直播和动态后,某些群聊只开启推送直播也会推送动态
243
+ > - ver 3.1.1-alpha.0 修复:稿件重投后,会将之前日期的动态一起推送; 优化:加强动态debug> 输出; 移除:不必要选项 `live.liveDetectMode`
244
+ > - ver 3.1.2-alpha.0 重构:对消息发送模块进行小型重构,多群多平台推送将不再支持艾特全体> 成员,仅单平台单群聊支持; 移除:群聊 `all` 选项
245
+ > - ver 3.1.3-alpha.0 移除:订阅超时; 新增:屏蔽专栏动态功能; 优化:改进了加载插件的错> 误提示;
246
+ > - ver 3.1.4-alpha.0 修复:动态只推送视频; 优化:动态视频链接将直接发送为视频链接;
247
+ > - ver 3.1.5-alpha.0 修复:潜在动态推送bug; 优化:现在动态监测无需等待,当插件初始化完> 成即开始监测、移除多余依赖、移除对 `cron` 服务的依赖、移除选项 `超时订阅`
248
+ > - ver 3.1.5-alpha.1 修复:动态不推送的bug;
249
+ > - ver 3.1.5-alpha.2 修复:潜在动态推送bug
250
+ > - ver 3.1.5-alpha.3 修复:动态推送时报错:dynamicDetect generateDynamicImg() 推> 送卡片发送失败,原因:Cannot read properties of undefined (reading 'card');
251
+ > - ver 3.1.5 修复:非 `debug` 模式下动态推送,如果在一个监测周期内同一个订阅的up主发送> 多条动态,下一个监测周期会重复推送;
252
+ > - ver 3.1.6 修复:视频类动态推送时,发送的视频链接有误;
253
+ > - ver 3.1.7-alpha.0 修复:登录账号和订阅账号是同一个账号,动态不会推送,使用 `bili > dyn` 指令,纯文本动态会被跳过; 新增:动态标题;
254
+ > - ver 3.1.7-alpha.1 修复:启用自定义卡片样式后取消仍是自定义样式;
255
+ > - ver 3.1.7-alpha.2 修复:`liveDetect generateLiveImg() 推送卡片生成失败,原因:> Cannot read properties of undefined (reading 'cardColorStart')`;
256
+ > - ver 3.1.7-alpha.3 修复:推送视频类动态报错;
257
+ > - ver 3.1.7 修复:第一次使用插件报错 `TypeError: Cannot read properties of > undefined (reading 'dynamic_group_id')`
258
+ > - ver 3.2.0-alpha.0 新增:直播检测 `API` 模式; 优化:提升直播检测 `WS` 模式使用体> 验;
259
+ > - ver 3.2.0-alpha.1 修复:直播检测 `API` 模式,中途加入推送语无法正确显示直播时长;
260
+ > - ver 3.2.0-alpha.2 修复:直播检测 `API` 模式,请求错误优化(防止不停向QQ发送消息);
261
+ > - ver 3.2.0-alpha.3 优化:增加直播检测 `API` 模式轮询时间,防止被暂时风控;
262
+ > - ver 3.2.0-alpha.4 修复:直播卡片推送时间会是设置的 `pushTime` 的两倍;
263
+ > - ver 3.2.0-alpha.5 修复:直播检测 `WS` 模式下,直播中推送卡片 `累计观看人数` 位置错> 误显示为 `粉丝数变化` 、转发动态的留言文字不显示; 优化:直播检测 `API` 模式下,直播推送> 语 `-watched` 固定显示为 `API模式无法获取`;
264
+ > - ver 3.2.0-alpha.6 优化:调整配置项;
265
+ > - ver 3.2.0-alpha.7 修复:自 `3.1.7` 版本 `pushImgsInDynamic` 功能失效;
266
+ > - ver 3.2.1-alpha.0 新增:多个相同平台bot可以选择某个群聊/频道指定机器人发送; 优化:> 直播检测 `WS` 模式下播后仍推送、添加依赖 `cacheable-lookup` 优化网络; 修复:打开 > `pushImgsInDynamic` 功能时,如果发送的动态里没有图片则会报错 `TypeError: Cannot > read properties of null (reading 'opus')`
267
+ > - ver 3.2.1-alpha.1 调整:将项目构建产物调整为 `esm`;
268
+ > - ver 3.2.1-alpha.2 调整:将项目构建产物调整回 `cjs` 、将依赖 `cacheable-lookup` > 导入方式更改为动态导入;
269
+ > - ver 3.2.1-alpha.3 修复:直播检测 `WS` 初始化后自动断开连接;
270
+ > - ver 3.2.1-alpha.4 优化:直播监听初始化没有提示;
271
+ > - ver 3.2.1-alpha.4 - ver 3.2.1-alpha.8 `deprecate`
272
+ > - ver 3.2.1-alpha.9 修复:`bugs`
273
+ > - ver 3.2.1-alpha.10 修复:临时切换依赖 `blive-message-listener` 为 `@akokko/> blive-message-listener` 以解决直播检测模式 `WS` 掉线问题、第一次使用插件报错 > `TypeError: Cannot set properties of undefined (setting 'dynamic_group_id')> `;
274
+ > - ver 3.2.1-alpha.11 WARNING:测试版本;
275
+ > - ver 3.2.1 优化:移除不必要成员变量、创建自动上传npm `github actions`,添加相关开发> 依赖;
276
+ > - ver 3.2.2 调整:修改 `github actions`;
277
+ > - ver 3.2.3 优化:移除不必要的代码;
278
+ > - ver 3.2.4-alpha.0 优化:选项 `pushImgsInDynamic` 发送多图会以转发消息的格式发> 送; 新增:选项 `dynamicVideoUrlToBV` 开启后将链接转换为bv号以用作特殊用途;
279
+ > - ver 3.2.4 修复:第一次使用插件时,使用登录指令报错; 插件配置页新增和删除提示信息;
281
280
  > - ver 3.2.5-alpha.0 优化:新增 `DNS` 缓存,以减少DNS错误;
282
281
  > - ver 3.2.5-alpha.1 测试版本
283
282
  > - ver 3.2.5-alpha.2 测试版本
@@ -292,12 +291,14 @@ uid为必填参数,为要推送的UP主的UID,index为可选参数,为要
292
291
  > - ver 3.2.5-alpha.11 测试版本
293
292
  > - ver 3.2.5-alpha.12 测试版本
294
293
  > - ver 3.2.5-alpha.13 测试版本
295
-
296
- - ver 3.2.5 重构:消息推送逻辑; 新增:选项 `dynamicCron`;
294
+ > - ver 3.2.5 重构:消息推送逻辑; 新增:选项 `dynamicCron`;
295
+ > - ver 3.2.6-alpha.0 优化:更新依赖; 修复:长图动态向下箭头无法显示的bug;
296
+ > - ver 3.2.7-alpha.0 优化:将选项 `userAgent` 更改为可选项,在 `cookies` 中添加 `bili_ticket` 降低风控概率;
297
297
 
298
298
  ## 交流群
299
299
 
300
- 801338523 使用问题或bug都可以在群里提出
300
+ > [!TIP]
301
+ > 801338523 使用问题或bug都可以在群里提出
301
302
 
302
303
  ## 感谢
303
304