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 +9 -2
- package/lib/biliAPI.js +10 -3
- package/lib/comRegister.d.ts +1 -0
- package/lib/comRegister.js +41 -18
- package/lib/index.d.ts +1 -0
- package/lib/index.js +6 -1
- package/package.json +1 -1
- package/readme.md +1 -0
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.
|
|
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;
|
package/lib/comRegister.d.ts
CHANGED
|
@@ -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 {
|
package/lib/comRegister.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: [
|
|
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.
|
|
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: [
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
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