yz-yuki-plugin 2.0.5-0 → 2.0.5-10

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.
Files changed (68) hide show
  1. package/.puppeteerrc.cjs +1 -1
  2. package/CHANGELOG.md +3 -0
  3. package/README.md +15 -21
  4. package/defaultConfig/bilibili/config.yaml +11 -1
  5. package/defaultConfig/help/help.yaml +2 -2
  6. package/lib/apps/bilibili.js +6 -6
  7. package/lib/apps/help.js +1 -1
  8. package/lib/apps/version.js +1 -1
  9. package/lib/apps/weibo.js +1 -1
  10. package/lib/components/dynamic/Footer.js +1 -1
  11. package/lib/components/help/Help.js +1 -1
  12. package/lib/components/version/Version.js +1 -1
  13. package/lib/index.js +2 -2
  14. package/lib/main.js +11 -0
  15. package/lib/models/bilibili/bilibili.main.api.js +125 -0
  16. package/lib/models/bilibili/{bilibili.get.web.data.js → bilibili.main.get.web.data.js} +19 -10
  17. package/lib/models/bilibili/{bilibili.models.js → bilibili.main.models.js} +57 -45
  18. package/lib/models/bilibili/{bilibili.query.js → bilibili.main.query.js} +3 -3
  19. package/lib/models/bilibili/{bilibili.task.js → bilibili.main.task.js} +32 -39
  20. package/lib/models/bilibili/bilibili.risk.buid.fp.js +77 -0
  21. package/lib/models/bilibili/bilibili.risk.dm.img.js +17 -0
  22. package/lib/models/bilibili/{bilibili.ticket.js → bilibili.risk.ticket.js} +1 -1
  23. package/lib/models/bilibili/bilibili.risk.w_webid.js +43 -0
  24. package/lib/models/weibo/weibo.get.web.data.js +1 -1
  25. package/lib/models/weibo/weibo.query.js +1 -1
  26. package/lib/models/weibo/weibo.task.js +8 -6
  27. package/lib/utils/config.js +3 -3
  28. package/lib/utils/image.js +4 -4
  29. package/package.json +20 -35
  30. package/lib/apps/bilibili.d.ts +0 -6
  31. package/lib/apps/help.d.ts +0 -6
  32. package/lib/apps/index.d.ts +0 -4
  33. package/lib/apps/version.d.ts +0 -6
  34. package/lib/apps/weibo.d.ts +0 -6
  35. package/lib/components/dynamic/Account.d.ts +0 -13
  36. package/lib/components/dynamic/Content.d.ts +0 -12
  37. package/lib/components/dynamic/Footer.d.ts +0 -11
  38. package/lib/components/dynamic/ForwardContent.d.ts +0 -6
  39. package/lib/components/dynamic/LogoText.d.ts +0 -9
  40. package/lib/components/dynamic/MainPage.d.ts +0 -34
  41. package/lib/components/help/Help.d.ts +0 -12
  42. package/lib/components/index.d.ts +0 -5
  43. package/lib/components/loginQrcode/Page.d.ts +0 -7
  44. package/lib/components/version/Version.d.ts +0 -8
  45. package/lib/index.d.ts +0 -5
  46. package/lib/main.d.ts +0 -1
  47. package/lib/models/bilibili/bilibili.api.d.ts +0 -70
  48. package/lib/models/bilibili/bilibili.api.js +0 -78
  49. package/lib/models/bilibili/bilibili.buid.fp.d.ts +0 -2
  50. package/lib/models/bilibili/bilibili.get.web.data.d.ts +0 -9
  51. package/lib/models/bilibili/bilibili.models.d.ts +0 -63
  52. package/lib/models/bilibili/bilibili.query.d.ts +0 -49
  53. package/lib/models/bilibili/bilibili.task.d.ts +0 -77
  54. package/lib/models/bilibili/bilibili.ticket.d.ts +0 -12
  55. package/lib/models/bilibili/bilibili.wbi.d.ts +0 -11
  56. package/lib/models/help/help.d.ts +0 -8
  57. package/lib/models/version/version.d.ts +0 -17
  58. package/lib/models/weibo/weibo.api.d.ts +0 -18
  59. package/lib/models/weibo/weibo.get.web.data.d.ts +0 -11
  60. package/lib/models/weibo/weibo.query.d.ts +0 -38
  61. package/lib/models/weibo/weibo.task.d.ts +0 -84
  62. package/lib/utils/config.d.ts +0 -73
  63. package/lib/utils/image.d.ts +0 -15
  64. package/lib/utils/paths.d.ts +0 -22
  65. package/lib/utils/puppeteer.render.d.ts +0 -40
  66. package/public/output.css +0 -1
  67. package/resources/img/readme/mini-help.jpg +0 -0
  68. /package/lib/models/bilibili/{bilibili.wbi.js → bilibili.risk.wbi.js} +0 -0
package/.puppeteerrc.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @type {import("puppeteer").Configuration}
3
3
  */
4
- module.exports = require('react-puppeteer/.puppeteerrc');
4
+ module.exports = require('jsxp/.puppeteerrc');
package/CHANGELOG.md CHANGED
@@ -1,4 +1,7 @@
1
1
  # 2.0.5
2
+ * 新增 User-Agent 配置项
3
+ * 优化获取动态数据
4
+ * 新增获取B站up数据的随机延迟配置项
2
5
  * 新增puppeteer渲染图片测试脚本
3
6
 
4
7
  # 2.0.4
package/README.md CHANGED
@@ -11,12 +11,12 @@
11
11
  # 🌰一、安装插件
12
12
 
13
13
  ## 选择安装方式
14
- 按照网络情况以及使用的bot框架是`Yunzai-Next`还是`Yunzai-V3`,选择对应的安装方式。
14
+ 按照网络情况以及使用的bot框架是`Yunzaijs`还是`Yunzai-V3`,选择对应的安装方式。
15
15
 
16
- ### ***(一)Yunzai-Next***
16
+ ### ***(一)YunzaiJS***
17
17
  > 选择其中一种方式安装插件:
18
18
 
19
- 1. npm包安装到`yunzai-next/node_modules`的方式,仅Yunzai-Next支持:
19
+ 1. npm包安装到`yunzaijs/node_modules`的方式,仅YunzaiJS支持:
20
20
  ```
21
21
  yarn add yz-yuki-plugin -W
22
22
  ```
@@ -25,26 +25,26 @@
25
25
 
26
26
  * 方式1(推荐):
27
27
 
28
- 手动新建 `yunzai-next/yunzai.config.json` 文件,输入如下内容,`applications`字段添加的 `"yz-yuki-plugin"`即为启用本插件:
28
+ 手动新建 `yunzaijs/yunzai.config.json` 文件,输入如下内容,`applications`字段添加的 `"yz-yuki-plugin"`即为启用本插件:
29
29
 
30
30
  ```json
31
31
  {
32
- "applications": ["yz-system", "yz-yuki-plugin"],
33
- "middlewares": ["yunzai-mys/runtime", "yunzai-mys/mw"]
32
+ "applications": ["@yunzaijs/system", "yz-yuki-plugin"],
33
+ "middlewares": ["@yunzaijs/mys/message", "@yunzaijs/mys/runtime"]
34
34
  }
35
35
  ```
36
36
  * 方式2:
37
37
 
38
- 修改 `yunzai-next/yunzai.config.js`:
38
+ 修改 `yunzaijs/yunzai.config.js`:
39
39
  ```js
40
- import { defineConfig } from 'yunzai'
40
+ import { defineConfig } from 'yunzaijs'
41
41
  export default defineConfig({
42
- applications: ['yz-system', 'yz-yuki-plugin'], //该行添加 'yz-yuki-plugin'
43
- middlewares: ['yunzai-mys/runtime', 'yunzai-mys/message']
42
+ applications: ["@yunzaijs/system", "yz-yuki-plugin"], //该行添加 'yz-yuki-plugin'
43
+ middlewares: ["@yunzaijs/mys/message", "@yunzaijs/mys/runtime"]
44
44
  })
45
45
  ```
46
46
 
47
- 2. 安装到 `yunzai-next/plugins` 的方式:
47
+ 2. 安装到 `yunzaijs/plugins` 的方式:
48
48
 
49
49
  > 仅支持Yunzai-Next的分支,选择仓库:
50
50
 
@@ -179,14 +179,8 @@ https://m.weibo.cn/u/7643376782 # 7643376782 为崩坏星穹铁道博主uid
179
179
  ||||
180
180
  | **其他指令** | | |
181
181
  | 查看版本信息 | 查看版本信息 | `#优纪版本` |
182
- | 更新yuki插件 | 系统指令更新yuki插件,yunzai-next需安装yz-system | `#更新yuki-plugin` |
183
- | 强制更新yuki插件 | 强制更新yuki插件,yunzai-next需安装yz-system| `#强制更新yuki-plugin` |
184
-
185
- </details>
186
-
187
- <details><summary>样式预览,点击展开</summary>
188
-
189
- ![](/resources/img/readme/mini-help.jpg)
182
+ | 更新yuki插件 | 系统指令更新yuki插件,yunzaiJS需安装`@yunzaijs/system` | `#更新yuki-plugin` |
183
+ | 强制更新yuki插件 | 强制更新yuki插件,yunzaiJS需安装`@yunzaijs/system`| `#强制更新yuki-plugin` |
190
184
 
191
185
  </details>
192
186
 
@@ -229,8 +223,8 @@ yarn install
229
223
  | Nickname | Contribution |
230
224
  | :-----------------------------------------------------------------: | ----------------------- |
231
225
  |Yunzai-Next||
232
- | [Yunzai-org文档](https://yunzai-org.github.io/docs/) | Yunzai Next 文档 |
233
- | [Yunzai-Next 仓库](https://github.com/yunzai-org/yunzaijs/) | Yunzai Next |
226
+ | [YunzaiJS文档](https://yunzaijs.github.io/docs/) | YunzaiJS 文档 |
227
+ | [YunzaiJS 仓库](https://github.com/yunzaijs/core) | YunzaiJS |
234
228
  |Yunzai-V3||
235
229
  | [功能/插件库](https://gitee.com/yhArcadia/Yunzai-Bot-plugins-index) | Yunzai-Bot 相关内容索引 |
236
230
  | [TRSS-Yunzai](https://gitee.com/TimeRainStarSky/Yunzai) | 时雨🌌星空的 TRSS-Yunzai |
@@ -8,13 +8,23 @@ pushStatus: 1
8
8
  # "0 5,35,51 * * * *" #每小时固定第5分0秒、第35分0秒、第51分0秒检测一次,共3次/h
9
9
  pushTime: '*/23 * * * *'
10
10
 
11
+ # 请求头 User-Agent 列表。如出现 -352 风控,可尝试更换请求头,请根据需要自行添加或修改。可设置多个请求头,每次重启后会随机选择一个。获取方法请浏览器自行搜索。
12
+ userAgentList:
13
+ - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
14
+ #- Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
15
+ #- Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
16
+
11
17
  # 推送监测间隔,单位为秒,默认7200秒即2小时,即以当前时间为基准,监测过去2小时内的动态,并推送。取值范围:3600-36000秒,即过去的1-10h。应大于pushTime的周期。
12
18
  interval: 7200
13
19
 
20
+ # 顺序检测相邻up主的动态并获取数据的最大随机间隔时间,单位为毫秒,默认 8000,即 8000 毫秒(8秒),即获取该up的动态数据后,随机等待2(内置值)-8秒后再获取下一位up的动态数据。取值范围:4000 ≦ x < pushTime的周期,单位为毫秒。
21
+ # 该数值大小影响风控概率, 请谨慎调整,建议不要设置过小,否则可能被风控导致动态获取失败。
22
+ getDataRandomDelay: 8000
23
+
14
24
  # 全部订阅的转发动态是否推送: 默认 1 - 开启推送, 0 - 关闭推送。 如果仅仅需要关闭单个订阅的转发动态推送,使用分类订阅指令不包含 转发 分类即可,无需修改此配置。
15
25
  pushTransmit: 1
16
26
 
17
- # 推送动态时,限制发送多少张图片
27
+ # 推送文字和图文动态时,限制发送多少张图片
18
28
  pushPicCountLimit: 3
19
29
 
20
30
  # 推送文字和图文动态时,限制字数是多少
@@ -80,7 +80,7 @@
80
80
  desc: 查看版本信息
81
81
  - icon: 钓鱼
82
82
  title: '#更新yuki-plugin'
83
- desc: '系统指令更新yuki插件,yz-next需安装yz-system'
83
+ desc: '系统指令更新yuki插件,yunzaiJS需安装`@yunzaijs/system`'
84
84
  - icon: pluie_lotus
85
85
  title: '#强制更新yuki-plugin'
86
- desc: '强制更新yuki插件,yz-next需安装yz-system'
86
+ desc: '强制更新yuki插件,yunzaiJS需安装`@yunzaijs/system`'
@@ -1,11 +1,11 @@
1
1
  import JSON from 'json5';
2
2
  import lodash from 'lodash';
3
- import { Messages, Bot, Redis } from 'yunzai';
4
- import { BiliQuery } from '../models/bilibili/bilibili.query.js';
5
- import { BiliTask } from '../models/bilibili/bilibili.task.js';
3
+ import { Messages, Bot, Redis } from 'yunzaijs';
4
+ import { BiliQuery } from '../models/bilibili/bilibili.main.query.js';
5
+ import { BiliTask } from '../models/bilibili/bilibili.main.task.js';
6
6
  import Config from '../utils/config.js';
7
- import { BiliGetWebData } from '../models/bilibili/bilibili.get.web.data.js';
8
- import { applyLoginQRCode, pollLoginQRCode, saveLoginCookie, postGateway, exitBiliLogin, checkBiliLogin, readSavedCookieItems, saveLocalBiliCk, readSyncCookie, getNewTempCk, readTempCk } from '../models/bilibili/bilibili.models.js';
7
+ import { BiliGetWebData } from '../models/bilibili/bilibili.main.get.web.data.js';
8
+ import { applyLoginQRCode, pollLoginQRCode, saveLoginCookie, postGateway, exitBiliLogin, checkBiliLogin, readSavedCookieItems, saveLocalBiliCk, readSyncCookie, getNewTempCk, readTempCk } from '../models/bilibili/bilibili.main.models.js';
9
9
 
10
10
  const message = new Messages('message');
11
11
  let biliPushData = Config.getConfigData('config', 'bilibili', 'push');
@@ -205,7 +205,7 @@ message.use(async (e) => {
205
205
  if (e.isMaster) {
206
206
  await exitBiliLogin(e);
207
207
  await Redis.set('Yz:yuki:bili:loginCookie', '', { EX: 3600 * 24 * 180 });
208
- e.reply(`登陆的B站ck并已删除~`);
208
+ e.reply(`扫码登陆的B站cookie已删除~`);
209
209
  }
210
210
  else {
211
211
  e.reply('未取得bot主人身份,无权限删除B站登录ck');
package/lib/apps/help.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Messages, Segment } from 'yunzai';
1
+ import { Messages, Segment } from 'yunzaijs';
2
2
  import { renderPage } from '../utils/image.js';
3
3
  import Help from '../models/help/help.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Messages, Segment } from 'yunzai';
1
+ import { Messages, Segment } from 'yunzaijs';
2
2
  import { renderPage } from '../utils/image.js';
3
3
  import VersionData from '../models/version/version.js';
4
4
 
package/lib/apps/weibo.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Messages } from 'yunzai';
1
+ import { Messages } from 'yunzaijs';
2
2
  import { WeiboQuery } from '../models/weibo/weibo.query.js';
3
3
  import { WeiboTask } from '../models/weibo/weibo.task.js';
4
4
  import Config from '../utils/config.js';
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ConfigController, BOT_NAME } from 'yunzai';
2
+ import { ConfigController, BOT_NAME } from 'yunzaijs';
3
3
  import Config from '../../utils/config.js';
4
4
  import path from 'path';
5
5
  import { _paths, createRequire } from '../../utils/paths.js';
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { BOT_NAME, ConfigController } from 'yunzai';
2
+ import { BOT_NAME, ConfigController } from 'yunzaijs';
3
3
  import Config from '../../utils/config.js';
4
4
  import path from 'path';
5
5
  import { _paths, createRequire } from '../../utils/paths.js';
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { BOT_NAME, ConfigController } from 'yunzai';
2
+ import { BOT_NAME, ConfigController } from 'yunzaijs';
3
3
  import Config from '../../utils/config.js';
4
4
  import path from 'path';
5
5
  import { _paths, createRequire } from '../../utils/paths.js';
package/lib/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import chalk from 'chalk';
2
- import { applicationOptions, setBotTask, useEvent } from 'yunzai';
2
+ import { applicationOptions, setBotTask, useEvent } from 'yunzaijs';
3
3
  import Config from './utils/config.js';
4
4
  import path from 'path';
5
5
  import { _paths } from './utils/paths.js';
6
6
  import * as index$1 from './apps/index.js';
7
- import { BiliTask } from './models/bilibili/bilibili.task.js';
7
+ import { BiliTask } from './models/bilibili/bilibili.main.task.js';
8
8
  import { WeiboTask } from './models/weibo/weibo.task.js';
9
9
 
10
10
  const yukiPluginVersion = Config.getPackageJsonKey('version', path.join(_paths.pluginPath, 'package.json'));
package/lib/main.js ADDED
@@ -0,0 +1,11 @@
1
+ import { createLogin, Client, Processor } from 'yunzaijs';
2
+
3
+ setTimeout(async () => {
4
+ // 登录
5
+ await createLogin();
6
+ // 运行
7
+ await Client.run().then(async () => {
8
+ // 读取yunzai.config.js
9
+ await Processor.install('yunzaijs.config.ts');
10
+ });
11
+ });
@@ -0,0 +1,125 @@
1
+ import Config from '../../utils/config.js';
2
+
3
+ class BiliApi {
4
+ biliConfigData;
5
+ USER_AGENT;
6
+ constructor() {
7
+ this.biliConfigData = Config.getUserConfig('bilibili', 'config');
8
+ this.USER_AGENT = BiliApi.BILIBILI_USER_AGENT;
9
+ this.initialize();
10
+ }
11
+ static BILIBILI_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36';
12
+ //初始化User-Agent
13
+ async initialize() {
14
+ await this.initUserAgent();
15
+ }
16
+ async initUserAgent() {
17
+ const userAgentList = await this.biliConfigData.userAgentList;
18
+ if (userAgentList && userAgentList.length > 0) {
19
+ const randomIndex = Math.floor(Math.random() * userAgentList.length);
20
+ this.USER_AGENT = String(userAgentList[randomIndex]);
21
+ }
22
+ }
23
+ // 将静态常量赋值给实例属性
24
+ get BILIBIL_API() {
25
+ return {
26
+ //获取动态资源列表 wbi/无wbi parama = { host_mid: uid, timezone_offset: -480, platform: 'web', features: 'itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote', web_location: "333.999", ...getDmImg(), "x-bili-device-req-json": { "platform": "web", "device": "pc" }, "x-bili-web-req-json": { "spm_id": "333.999" }, w_rid, wts }
27
+ biliDynamicInfoList: `https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space`,
28
+ //获取关注数与粉丝数 parama = { vmid: uid }
29
+ biliUpFollowFans: `https://api.bilibili.com/x/relation/stat`,
30
+ //通过uid获取up详情 parama = { mid: uid, jsonp: jsonp }
31
+ biliSpaceUserInfo: `https://api.bilibili.com/x/space/acc/info`,
32
+ //parama = { mid: uid, token: '',platform: 'web', web_location: 1550101, w_webid, w_rid, wts }
33
+ biliSpaceUserInfoWbi: `https://api.bilibili.com/x/space/wbi/acc/info`,
34
+ //通过关键词${upKeyword}搜索up主 parama = { keyword: 'upKeyword', page: 1, search_type: 'bili_user', order: 'totalrank', pagesize: 5 }
35
+ biliSearchUp: `https://api.bilibili.com/x/web-interface/search/type`,
36
+ //通过关键词${upKeyword}搜索up主 parama = { keyword: 'upKeyword', page: 1, search_type: 'bili_user', order: 'totalrank' },需要wbi签名
37
+ biliSearchUpWbi: `https://api.bilibili.com/x/web-interface/wbi/search/type`,
38
+ biliLiveStatus: 'https://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids',
39
+ biliCard: 'https://api.bilibili.com/x/web-interface/card',
40
+ biliStat: 'https://api.bilibili.com/x/relation/stat',
41
+ biliLiveUserInfo: 'https://api.live.bilibili.com/live_user/v1/Master/info',
42
+ biliOpusDetail: 'https://api.bilibili.com/x/polymer/web-dynamic/v1/opus/detail'
43
+ };
44
+ }
45
+ /**header */
46
+ get BILIBILI_HEADERS() {
47
+ return {
48
+ 'Accept': '*/*',
49
+ 'Accept-Language': 'zh-CN,en-US;q=0.5',
50
+ 'Connection': 'keep-alive',
51
+ 'Accept-Encoding': 'gzip, deflate, br, zstd',
52
+ 'Cookie': '',
53
+ 'pragma': 'no-cache',
54
+ 'Cache-control': 'max-age=0',
55
+ 'DNT': '1',
56
+ 'Sec-GPC': '1',
57
+ 'sec-ch-ua-platform': '',
58
+ 'sec-ch-ua-mobile': '?0',
59
+ 'Sec-Fetch-Dest': 'empty',
60
+ 'Sec-Fetch-Mode': 'cors',
61
+ 'Sec-Fetch-Site': 'same-site',
62
+ 'Sec-Fetch-User': '?0',
63
+ 'Priority': 'u=4',
64
+ 'TE': 'trailers',
65
+ 'User-Agent': this.USER_AGENT
66
+ };
67
+ }
68
+ /**Login header */
69
+ get BIlIBILI_LOGIN_HEADERS() {
70
+ return {
71
+ 'Accept': '*/*',
72
+ 'Accept-Language': 'zh-CN,en-US;q=0.5',
73
+ 'Accept-Encoding': 'gzip, deflate, br, zstd',
74
+ 'DNT': '1',
75
+ 'Sec-GPC': '1',
76
+ 'Upgrade-Insecure-Requests': '1',
77
+ 'Sec-Fetch-Dest': 'document',
78
+ 'Sec-Fetch-Mode': 'navigate',
79
+ 'Sec-Fetch-Site': 'none',
80
+ 'Sec-Fetch-User': '?1',
81
+ 'TE': 'trailers'
82
+ };
83
+ }
84
+ /**FullArticle header */
85
+ get BILIBILI_ARTICLE_HEADERS() {
86
+ return {
87
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8',
88
+ 'Accept-Language': 'zh-CN,en-US;q=0.5',
89
+ 'Accept-Encoding': 'gzip, deflate, br, zstd',
90
+ 'Content-type': 'text/html; charset=utf-8',
91
+ 'Cookie': '',
92
+ 'pragma': 'no-cache',
93
+ 'Cache-control': 'no-cache',
94
+ 'DNT': '1',
95
+ 'Sec-GPC': '1',
96
+ 'sec-ch-ua-mobile': '?0',
97
+ 'Sec-Fetch-Dest': 'document',
98
+ 'Sec-Fetch-Mode': 'navigate',
99
+ 'Sec-Fetch-Site': 'same-site',
100
+ 'Sec-Fetch-User': '?1',
101
+ 'TE': 'trailers',
102
+ 'Upgrade-Insecure-Requests': '1',
103
+ 'User-Agent': this.USER_AGENT
104
+ };
105
+ }
106
+ get BILIBILI_DYNAMIC_SPACE_HEADERS() {
107
+ return {
108
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
109
+ 'Accept-Encoding': 'gzip, deflate, br, zstd',
110
+ 'Accept-Language': 'zh-CN,en-US;q=0.5',
111
+ 'Connection': 'keep-alive',
112
+ 'Priority': 'u=0, i',
113
+ 'Sec-Fetch-Dest': 'document',
114
+ 'Sec-Fetch-Mode': 'navigate',
115
+ 'Sec-Fetch-Site': 'none',
116
+ 'Sec-Fetch-User': '?1',
117
+ 'Sec-GPC': '1',
118
+ 'Upgrade-Insecure-Requests': '1',
119
+ 'User-Agent': this.USER_AGENT
120
+ };
121
+ }
122
+ }
123
+ var BiliApi$1 = new BiliApi();
124
+
125
+ export { BiliApi$1 as default };
@@ -1,8 +1,10 @@
1
1
  import axios from 'axios';
2
2
  import lodash from 'lodash';
3
- import { BiliApi } from './bilibili.api.js';
4
- import { readSyncCookie, cookieWithBiliTicket, readSavedCookieItems, readSavedCookieOtherItems } from './bilibili.models.js';
5
- import { getWbiSign } from './bilibili.wbi.js';
3
+ import BiliApi from './bilibili.main.api.js';
4
+ import { readSyncCookie, cookieWithBiliTicket, readSavedCookieItems, readSavedCookieOtherItems } from './bilibili.main.models.js';
5
+ import { getWbiSign } from './bilibili.risk.wbi.js';
6
+ import { getDmImg } from './bilibili.risk.dm.img.js';
7
+ import { getWebId } from './bilibili.risk.w_webid.js';
6
8
 
7
9
  class BiliGetWebData {
8
10
  constructor(e) { }
@@ -11,14 +13,15 @@ class BiliGetWebData {
11
13
  const url = BiliApi.BILIBIL_API.biliDynamicInfoList;
12
14
  let { cookie } = await readSyncCookie();
13
15
  cookie = await cookieWithBiliTicket(cookie);
16
+ const dmImg = await getDmImg();
14
17
  const data = {
15
18
  'offset': '',
16
19
  'host_mid': uid,
17
20
  'timezone_offset': -480,
18
21
  'platform': 'web',
19
- 'features': 'itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote',
22
+ 'features': 'itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,forwardListHidden,ugcDelete,onlyfansQaCard',
20
23
  'web_location': '333.999',
21
- //...getDmImg(),
24
+ ...dmImg,
22
25
  'x-bili-device-req-json': { platform: 'web', device: 'pc' },
23
26
  'x-bili-web-req-json': { spm_id: '333.999' }
24
27
  };
@@ -35,8 +38,8 @@ class BiliGetWebData {
35
38
  headers: lodash.merge(BiliApi.BILIBILI_HEADERS, {
36
39
  Cookie: `${cookie}`,
37
40
  Host: `api.bilibili.com`,
38
- Origin: 'https://www.bilibili.com',
39
- Referer: `https://www.bilibili.com/`
41
+ Origin: 'https://space.bilibili.com',
42
+ Referer: `https://space.bilibili.com/${uid}/dynamic`
40
43
  })
41
44
  });
42
45
  return res;
@@ -46,14 +49,20 @@ class BiliGetWebData {
46
49
  const url = BiliApi.BILIBIL_API.biliSpaceUserInfoWbi;
47
50
  let { cookie } = await readSyncCookie();
48
51
  cookie = await cookieWithBiliTicket(cookie);
52
+ const dmImg = await getDmImg();
49
53
  const data = {
50
54
  mid: uid,
51
- jsonp: 'jsonp'
55
+ token: '',
56
+ platform: 'web',
57
+ web_location: 1550101,
58
+ ...dmImg
52
59
  };
53
60
  let signCookie = (await readSavedCookieItems(cookie, ['SESSDATA'], false)) || (await readSavedCookieOtherItems(cookie, ['SESSDATA']));
61
+ const w_webid = await getWebId(uid);
54
62
  const { w_rid, time_stamp } = await getWbiSign(data, BiliApi.BILIBILI_HEADERS, signCookie);
55
63
  const params = {
56
64
  ...data,
65
+ w_webid: w_webid,
57
66
  w_rid: w_rid,
58
67
  wts: time_stamp
59
68
  };
@@ -63,8 +72,8 @@ class BiliGetWebData {
63
72
  headers: lodash.merge(BiliApi.BILIBILI_HEADERS, {
64
73
  Cookie: `${cookie}`,
65
74
  Host: `api.bilibili.com`,
66
- Origin: 'https://www.bilibili.com',
67
- Referer: `https://www.bilibili.com/`
75
+ Origin: 'https://space.bilibili.com',
76
+ Referer: `https://space.bilibili.com/${uid}/dynamic`
68
77
  })
69
78
  });
70
79
  return res;
@@ -6,11 +6,12 @@ import { promisify } from 'node:util';
6
6
  import path from 'path';
7
7
  import QRCode from 'qrcode';
8
8
  import YAML from 'yaml';
9
- import { Segment, Bot, Redis } from 'yunzai';
9
+ import { Segment, Bot, Redis } from 'yunzaijs';
10
10
  import { renderPage } from '../../utils/image.js';
11
11
  import { _paths } from '../../utils/paths.js';
12
- import { BiliApi } from './bilibili.api.js';
13
- import { getBiliTicket } from './bilibili.ticket.js';
12
+ import BiliApi from './bilibili.main.api.js';
13
+ import { gen_buvid_fp } from './bilibili.risk.buid.fp.js';
14
+ import { getBiliTicket } from './bilibili.risk.ticket.js';
14
15
 
15
16
  /**
16
17
  * *******************************************************************
@@ -60,8 +61,8 @@ async function applyLoginQRCode(e) {
60
61
  return qrcodeKey;
61
62
  }
62
63
  else {
63
- e.reply(`获取B站登录二维码失败: ${res.data.message}`);
64
- throw new Error(`获取B站登录二维码失败: ${res.data.message}`);
64
+ e.reply(`获取B站登录二维码失败: ${res.data?.message}`);
65
+ throw new Error(`获取B站登录二维码失败: ${res.data?.message}`);
65
66
  }
66
67
  }
67
68
  /**处理扫码结果 */
@@ -149,12 +150,16 @@ async function exitBiliLogin(e) {
149
150
  e.reply('当前无可用的B站登录CK可退出登录');
150
151
  return;
151
152
  }
152
- const postData = new URLSearchParams({ biliCSRF: biliCSRF });
153
+ const postData = String(biliCSRF)
154
+ .trim()
155
+ .replace(/^bili_jct=/g, '')
156
+ .replace(/;*$/g, '');
153
157
  try {
154
- const resp = await axios.post(url, postData.toString(), {
158
+ const resp = await axios.post(url, { biliCSRF: postData }, {
155
159
  headers: {
156
160
  'Host': 'passport.bilibili.com',
157
- 'Cookie': `DedeUserID=${DedeUserID}; bili_jct=${biliCSRF}; SESSDATA=${SESSDATA}`,
161
+ 'User-Agent': BiliApi.BILIBILI_HEADERS['User-Agent'],
162
+ 'Cookie': `${DedeUserID};${biliCSRF};${SESSDATA}`,
158
163
  'Content-Type': 'application/x-www-form-urlencoded'
159
164
  }
160
165
  });
@@ -163,29 +168,27 @@ async function exitBiliLogin(e) {
163
168
  e.reply('当前缓存的B站登录CK早已失效!');
164
169
  return;
165
170
  }
166
- const { code, status, data } = resp.data;
167
- logger.mark('Response Data:', data);
168
- if (status) {
169
- switch (code) {
170
- case 0:
171
- e.reply('当前缓存的B站登录CK已在服务器注销~');
172
- await Redis.set('Yz:yuki:bili:loginCookie', '', { EX: 3600 * 24 * 180 });
173
- e.reply(`登陆的B站ck并已删除~`);
174
- break;
175
- case 2202:
176
- e.reply('csrf 请求非法,退出登录请求出错');
177
- break;
178
- default:
179
- e.reply('当前缓存的B站登录CK早已失效!');
180
- }
181
- }
182
- else {
183
- e.reply('服务器响应异常,退出登录请求出错');
171
+ const res = resp.data;
172
+ logger?.debug(`exitBiliLogin: ${JSON.stringify(res)}`);
173
+ const { code } = res;
174
+ switch (code) {
175
+ case 0:
176
+ e.reply('当前缓存的B站登录CK已在B站服务器退出登录~');
177
+ break;
178
+ case 2202:
179
+ e.reply('csrf 请求非法,退出登录请求出错');
180
+ break;
181
+ case -101:
182
+ e.reply('当前缓存的扫码B站ck未登录!');
183
+ break;
184
+ default:
185
+ e.reply('未知情况!无妨');
186
+ return;
184
187
  }
185
188
  }
186
189
  catch (error) {
190
+ e.reply('退出登录请求出错');
187
191
  console.error('Error during Bili login exit:', error);
188
- e.reply('退出登录请求出错,请稍后再试');
189
192
  }
190
193
  }
191
194
  /**
@@ -397,18 +400,18 @@ async function getPayload(cookie) {
397
400
  '7003': 1, // indexedDb, !!window.indexedDB, html5 api
398
401
  '807e': 1, // cookieEnabled, navigator.cookieEnabled
399
402
  'b8ce': BiliApi.BILIBILI_HEADERS['User-Agent'], // ua "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0",
400
- '641c': 0,
401
- '07a4': 'zh-CN',
402
- '1c57': 'not available',
403
- '0bd0': 16,
404
- '748e': [1920, 1200],
405
- 'd61f': [1920, 1152],
406
- 'fc9d': -480,
407
- '6aa9': 'Asia/Shanghai',
408
- '75b8': 1,
409
- '3b21': 1,
410
- '8a1c': 0,
411
- 'd52f': 'not available',
403
+ '641c': 0, // webdriver, navigator.webdriver, like Selenium
404
+ '07a4': 'zh-CN', // language
405
+ '1c57': 'not available', // deviceMemory in GB, navigator.deviceMemory
406
+ '0bd0': 16, // hardwareConcurrency, navigator.hardwareConcurrency
407
+ '748e': [1920, 1200], // window.screen.width window.screen.height
408
+ 'd61f': [1920, 1152], // window.screen.availWidth window.screen.availHeight
409
+ 'fc9d': -480, // timezoneOffset, (new Date).getTimezoneOffset()
410
+ '6aa9': 'Asia/Shanghai', //Intl.DateTimeFormat().resolvedOptions().timeZone, // timezone, (new window.Intl.DateTimeFormat).resolvedOptions().timeZone
411
+ '75b8': 1, // sessionStorage, window.sessionStorage, html5 api
412
+ '3b21': 1, // localStorage, window.localStorage, html5 api
413
+ '8a1c': 0, // openDatabase, window.openDatabase, html5 api
414
+ 'd52f': 'not available', // cpuClass, navigator.cpuClass
412
415
  'adca': BiliApi.BILIBILI_HEADERS['User-Agent'].includes('Windows') ? 'Win32' : 'Linux', // platform, navigator.platform
413
416
  '80c9': [
414
417
  [
@@ -451,9 +454,9 @@ async function getPayload(cookie) {
451
454
  ['text/pdf', 'pdf']
452
455
  ]
453
456
  ]
454
- ],
455
- '13ab': 'f3YAAAAASUVORK5CYII=',
456
- 'bfe9': 'kABYpRAGAVYzWJooB9Bf4P+UortSvxRY0AAAAASUVORK5CYII=',
457
+ ], // plugins
458
+ '13ab': 'f3YAAAAASUVORK5CYII=', // canvas fingerprint
459
+ 'bfe9': 'kABYpRAGAVYzWJooB9Bf4P+UortSvxRY0AAAAASUVORK5CYII=', // webgl_str
457
460
  'a3c1': [
458
461
  'extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_float_blend;EXT_frag_depth;EXT_shader_texture_lod;EXT_sRGB;EXT_texture_compression_bptc;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;OES_element_index_uint;OES_fbo_render_mipmap;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBGL_provoking_vertex',
459
462
  'webgl aliased line width range:[1, 1]',
@@ -519,8 +522,8 @@ async function getPayload(cookie) {
519
522
  'webgl fragment shader low int precision:0',
520
523
  'webgl fragment shader low int precision rangeMin:31',
521
524
  'webgl fragment shader low int precision rangeMax:30'
522
- ],
523
- '6bc5': 'Google Inc. (Intel)~ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar',
525
+ ], // webgl_params, cab be set to [] if webgl is not supported
526
+ '6bc5': 'Google Inc. (Intel)~ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar', // webglVendorAndRenderer
524
527
  'ed31': 0,
525
528
  '72bd': 0,
526
529
  '097b': 0,
@@ -604,6 +607,15 @@ async function postGateway(cookie) {
604
607
  throw error;
605
608
  }
606
609
  }
610
+ /**生成buvid_fp
611
+ * @param {string} uuid
612
+ */
613
+ async function get_buvid_fp(cookie) {
614
+ const uuid = await readSavedCookieItems(cookie, ['_uuid'], false);
615
+ const seedget = Math.floor(Math.random() * (60 - 1 + 1) + 1);
616
+ let buvidFp = gen_buvid_fp(uuid, seedget);
617
+ return `buvid_fp=${buvidFp};`;
618
+ }
607
619
  /**
608
620
  * 获取有效bili_ticket并添加到cookie
609
621
  * @param {string} cookie
@@ -630,4 +642,4 @@ async function cookieWithBiliTicket(cookie) {
630
642
  }
631
643
  }
632
644
 
633
- export { applyLoginQRCode, checkBiliLogin, cookieWithBiliTicket, exitBiliLogin, genUUID, gen_b_lsid, getNewTempCk, pollLoginQRCode, postGateway, readSavedCookieItems, readSavedCookieOtherItems, readSyncCookie, readTempCk, saveLocalBiliCk, saveLoginCookie, saveTempCk };
645
+ export { applyLoginQRCode, checkBiliLogin, cookieWithBiliTicket, exitBiliLogin, genUUID, gen_b_lsid, getNewTempCk, get_buvid_fp, pollLoginQRCode, postGateway, readSavedCookieItems, readSavedCookieOtherItems, readSyncCookie, readTempCk, saveLocalBiliCk, saveLoginCookie, saveTempCk };
@@ -1,7 +1,7 @@
1
1
  import moment from 'moment';
2
- import { Bot, Segment } from 'yunzai';
3
- import { readSyncCookie, cookieWithBiliTicket } from './bilibili.models.js';
4
- import { BiliApi } from './bilibili.api.js';
2
+ import { Bot, Segment } from 'yunzaijs';
3
+ import { readSyncCookie, cookieWithBiliTicket } from './bilibili.main.models.js';
4
+ import BiliApi from './bilibili.main.api.js';
5
5
  import axios from 'axios';
6
6
  import lodash from 'lodash';
7
7