koishi-plugin-bilibili-notify 1.2.12-alpha.3 → 1.2.13
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 +0 -1
- package/lib/biliAPI.js +4 -4
- package/lib/comRegister.d.ts +2 -0
- package/lib/comRegister.js +182 -5
- package/lib/generateImg.d.ts +0 -2
- package/lib/generateImg.js +5 -4
- package/lib/index.d.ts +2 -0
- package/lib/index.js +7 -1
- package/lib/wbi.d.ts +0 -2
- package/lib/wbi.js +6 -5
- package/package.json +1 -1
- package/readme.md +2 -0
package/lib/biliAPI.d.ts
CHANGED
|
@@ -17,7 +17,6 @@ declare class BiliAPI extends Service {
|
|
|
17
17
|
loginInfoIsLoaded: boolean;
|
|
18
18
|
constructor(ctx: Context, config: BiliAPI.Config);
|
|
19
19
|
protected start(): void | Promise<void>;
|
|
20
|
-
protected stop(): void | Promise<void>;
|
|
21
20
|
getServerUTCTime(): Promise<number>;
|
|
22
21
|
getTimeNow(): Promise<any>;
|
|
23
22
|
getUserSpaceDynamic(mid: string): Promise<any>;
|
package/lib/biliAPI.js
CHANGED
|
@@ -41,11 +41,11 @@ class BiliAPI extends koishi_1.Service {
|
|
|
41
41
|
// 从数据库加载cookies
|
|
42
42
|
this.loadCookiesFromDatabase();
|
|
43
43
|
// 输出日志
|
|
44
|
-
this.logger.info('工作中')
|
|
45
|
-
}
|
|
46
|
-
stop() {
|
|
47
|
-
this.logger.info('已停止工作');
|
|
44
|
+
// this.logger.info('工作中')
|
|
48
45
|
}
|
|
46
|
+
/* protected stop(): void | Promise<void> {
|
|
47
|
+
this.logger.info('已停止工作')
|
|
48
|
+
} */
|
|
49
49
|
async getServerUTCTime() {
|
|
50
50
|
try {
|
|
51
51
|
const { data } = await this.client.get(GET_SERVER_UTC_TIME);
|
package/lib/comRegister.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ declare class ComRegister {
|
|
|
31
31
|
sendPrivateMsgAndRebootService(ctx: Context, bot: Bot<Context>, content: string): Promise<void>;
|
|
32
32
|
sendMsg(ctx: Context, targets: Array<string>, bot: Bot<Context>, content: any): Promise<void>;
|
|
33
33
|
dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
|
34
|
+
debug_dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
|
34
35
|
liveDetect(ctx: Context, bot: Bot<Context>, roomId: string, guildId: Array<string>): () => Promise<void>;
|
|
35
36
|
subShow(): string;
|
|
36
37
|
checkIfNeedSub(comNeed: boolean, subType: string, session: Session, data?: any): Promise<boolean>;
|
|
@@ -63,6 +64,7 @@ declare namespace ComRegister {
|
|
|
63
64
|
regex: string;
|
|
64
65
|
keywords: Array<string>;
|
|
65
66
|
};
|
|
67
|
+
dynamicDebugMode: boolean;
|
|
66
68
|
}
|
|
67
69
|
const Config: Schema<Config>;
|
|
68
70
|
}
|
package/lib/comRegister.js
CHANGED
|
@@ -38,12 +38,12 @@ class ComRegister {
|
|
|
38
38
|
chronocatBot;
|
|
39
39
|
constructor(ctx, config) {
|
|
40
40
|
this.logger = ctx.logger('cr');
|
|
41
|
-
ctx.on('ready', () => {
|
|
41
|
+
/* ctx.on('ready', () => {
|
|
42
42
|
this.logger.info('工作中');
|
|
43
|
-
})
|
|
43
|
+
})
|
|
44
44
|
ctx.on('dispose', () => {
|
|
45
45
|
this.logger.info('已停止工作');
|
|
46
|
-
})
|
|
46
|
+
}) */
|
|
47
47
|
this.config = config;
|
|
48
48
|
// 拿到各类机器人
|
|
49
49
|
ctx.bots.forEach(bot => {
|
|
@@ -553,7 +553,13 @@ class ComRegister {
|
|
|
553
553
|
// 获得对应bot
|
|
554
554
|
const bot = this.getTheCorrespondingBotBasedOnTheSession(session);
|
|
555
555
|
// 开始循环检测
|
|
556
|
-
|
|
556
|
+
let dispose;
|
|
557
|
+
if (this.config.dynamicDebugMode) {
|
|
558
|
+
dispose = ctx.setInterval(this.debug_dynamicDetect(ctx, bot, uid, guildId), config.dynamicLoopTime * 1000);
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
dispose = ctx.setInterval(this.dynamicDetect(ctx, bot, uid, guildId), config.dynamicLoopTime * 1000);
|
|
562
|
+
}
|
|
557
563
|
// 将销毁函数保存到订阅管理对象
|
|
558
564
|
this.subManager[index].dynamicDispose = dispose;
|
|
559
565
|
});
|
|
@@ -822,6 +828,162 @@ class ComRegister {
|
|
|
822
828
|
// 结束循环
|
|
823
829
|
break;
|
|
824
830
|
}
|
|
831
|
+
case 4101128: { // 获取动态信息错误
|
|
832
|
+
// 输出日志
|
|
833
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
834
|
+
// 发送私聊消息
|
|
835
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
836
|
+
// 结束循环
|
|
837
|
+
break;
|
|
838
|
+
}
|
|
839
|
+
default: { // 未知错误
|
|
840
|
+
// 发送私聊消息
|
|
841
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
842
|
+
// 取消订阅
|
|
843
|
+
this.unsubAll(ctx, bot, uid);
|
|
844
|
+
// 结束循环
|
|
845
|
+
break;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
// 获取数据内容
|
|
850
|
+
const items = content.data.items;
|
|
851
|
+
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
852
|
+
const updatePoint = (num) => {
|
|
853
|
+
switch (num) {
|
|
854
|
+
case 1: {
|
|
855
|
+
if (items[0].modules.module_tag) { // 存在置顶动态
|
|
856
|
+
timePoint = items[num].modules.module_author.pub_ts;
|
|
857
|
+
}
|
|
858
|
+
break;
|
|
859
|
+
}
|
|
860
|
+
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
861
|
+
}
|
|
862
|
+
};
|
|
863
|
+
// 发送请求 默认只查看配置文件规定数量的数据
|
|
864
|
+
for (let num = this.config.dynamicCheckNumber - 1; num >= 0; num--) {
|
|
865
|
+
// 没有动态内容则直接跳过
|
|
866
|
+
if (!items[num])
|
|
867
|
+
continue;
|
|
868
|
+
// 寻找发布时间比时间点更晚的动态
|
|
869
|
+
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
870
|
+
// 定义变量
|
|
871
|
+
let pic;
|
|
872
|
+
let buffer;
|
|
873
|
+
// 从动态数据中取出UP主名称和动态ID
|
|
874
|
+
const upName = content.data.items[num].modules.module_author.name;
|
|
875
|
+
const dynamicId = content.data.items[num].id_str;
|
|
876
|
+
// 推送该条动态
|
|
877
|
+
let attempts = 3;
|
|
878
|
+
for (let i = 0; i < attempts; i++) {
|
|
879
|
+
// 获取动态推送图片
|
|
880
|
+
try {
|
|
881
|
+
// 渲染图片
|
|
882
|
+
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
883
|
+
// 赋值
|
|
884
|
+
pic = gimgPic;
|
|
885
|
+
buffer = gimgBuffer;
|
|
886
|
+
// 成功则跳出循环
|
|
887
|
+
break;
|
|
888
|
+
}
|
|
889
|
+
catch (e) {
|
|
890
|
+
// 直播开播动态,不做处理
|
|
891
|
+
if (e.message === '直播开播动态,不做处理')
|
|
892
|
+
return updatePoint(num);
|
|
893
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
894
|
+
// 如果需要发送才发送
|
|
895
|
+
this.config.filter.notify && await this.sendMsg(ctx, guildId, bot, `${upName}发布了一条含有屏蔽关键字的动态`);
|
|
896
|
+
return updatePoint(num);
|
|
897
|
+
}
|
|
898
|
+
if (e.message === '已屏蔽转发动态') {
|
|
899
|
+
this.config.filter.notify && await this.sendMsg(ctx, guildId, bot, `${upName}发布了一条转发动态,已屏蔽`);
|
|
900
|
+
return updatePoint(num);
|
|
901
|
+
}
|
|
902
|
+
// 未知错误
|
|
903
|
+
if (i === attempts - 1) {
|
|
904
|
+
this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
|
|
905
|
+
// 发送私聊消息并重启服务
|
|
906
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot, '插件可能出现某些未知错误,请尝试重启插件,如果仍然发生该错误,请带着日志向作者反馈');
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
// 判断是否需要发送URL
|
|
911
|
+
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
912
|
+
// 如果pic存在,则直接返回pic
|
|
913
|
+
if (pic) {
|
|
914
|
+
this.logger.info('推送动态中,使用render模式');
|
|
915
|
+
// pic存在,使用的是render模式
|
|
916
|
+
await this.sendMsg(ctx, guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
917
|
+
}
|
|
918
|
+
else if (buffer) {
|
|
919
|
+
this.logger.info('推送动态中,使用page模式');
|
|
920
|
+
// pic不存在,说明使用的是page模式
|
|
921
|
+
await this.sendMsg(ctx, guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
922
|
+
}
|
|
923
|
+
else {
|
|
924
|
+
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
925
|
+
}
|
|
926
|
+
// 更新时间点
|
|
927
|
+
updatePoint(num);
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
debug_dynamicDetect(ctx, bot, uid, guildId) {
|
|
933
|
+
let firstSubscription = true;
|
|
934
|
+
let timePoint;
|
|
935
|
+
return async () => {
|
|
936
|
+
this.logger.info('动态监测开始');
|
|
937
|
+
// 第一次订阅判断
|
|
938
|
+
if (firstSubscription) {
|
|
939
|
+
this.logger.info('第一次订阅');
|
|
940
|
+
// 设置第一次的时间点
|
|
941
|
+
timePoint = ctx.ba.getTimeOfUTC8();
|
|
942
|
+
// 设置第一次为false
|
|
943
|
+
firstSubscription = false;
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
this.logger.info('获取动态信息中');
|
|
947
|
+
// 获取用户空间动态数据
|
|
948
|
+
let content;
|
|
949
|
+
try {
|
|
950
|
+
content = await ctx.ba.getUserSpaceDynamic(uid);
|
|
951
|
+
}
|
|
952
|
+
catch (e) {
|
|
953
|
+
return this.logger.error('dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:' + e.message);
|
|
954
|
+
}
|
|
955
|
+
this.logger.info('判断动态信息是否正确');
|
|
956
|
+
// 判断是否出现其他问题
|
|
957
|
+
if (content.code !== 0) {
|
|
958
|
+
switch (content.code) {
|
|
959
|
+
case -101: { // 账号未登录
|
|
960
|
+
// 输出日志
|
|
961
|
+
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
962
|
+
// 发送私聊消息
|
|
963
|
+
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
964
|
+
// 停止服务
|
|
965
|
+
await ctx.sm.disposePlugin();
|
|
966
|
+
// 结束循环
|
|
967
|
+
break;
|
|
968
|
+
}
|
|
969
|
+
case -352: { // 风控
|
|
970
|
+
// 输出日志
|
|
971
|
+
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
972
|
+
// 发送私聊消息
|
|
973
|
+
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
974
|
+
// 停止服务
|
|
975
|
+
await ctx.sm.disposePlugin();
|
|
976
|
+
// 结束循环
|
|
977
|
+
break;
|
|
978
|
+
}
|
|
979
|
+
case 4101128: { // 获取动态信息错误
|
|
980
|
+
// 输出日志
|
|
981
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
982
|
+
// 发送私聊消息
|
|
983
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
984
|
+
// 结束循环
|
|
985
|
+
break;
|
|
986
|
+
}
|
|
825
987
|
default: { // 未知错误
|
|
826
988
|
// 发送私聊消息
|
|
827
989
|
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
@@ -834,6 +996,10 @@ class ComRegister {
|
|
|
834
996
|
}
|
|
835
997
|
// 获取数据内容
|
|
836
998
|
const items = content.data.items;
|
|
999
|
+
this.logger.info('获取到的动态信息:');
|
|
1000
|
+
items.forEach(element => {
|
|
1001
|
+
this.logger.info(element.basic.rid_str);
|
|
1002
|
+
});
|
|
837
1003
|
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
838
1004
|
const updatePoint = (num) => {
|
|
839
1005
|
switch (num) {
|
|
@@ -853,6 +1019,7 @@ class ComRegister {
|
|
|
853
1019
|
continue;
|
|
854
1020
|
// 寻找发布时间比时间点更晚的动态
|
|
855
1021
|
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
1022
|
+
this.logger.info('即将推送的动态信息:' + items[num].basic.rid_str);
|
|
856
1023
|
// 定义变量
|
|
857
1024
|
let pic;
|
|
858
1025
|
let buffer;
|
|
@@ -861,6 +1028,7 @@ class ComRegister {
|
|
|
861
1028
|
const dynamicId = content.data.items[num].id_str;
|
|
862
1029
|
// 推送该条动态
|
|
863
1030
|
let attempts = 3;
|
|
1031
|
+
this.logger.info('尝试渲染推送图片');
|
|
864
1032
|
for (let i = 0; i < attempts; i++) {
|
|
865
1033
|
// 获取动态推送图片
|
|
866
1034
|
try {
|
|
@@ -893,6 +1061,7 @@ class ComRegister {
|
|
|
893
1061
|
}
|
|
894
1062
|
}
|
|
895
1063
|
}
|
|
1064
|
+
this.logger.info('尝试推送动态卡片');
|
|
896
1065
|
// 判断是否需要发送URL
|
|
897
1066
|
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
898
1067
|
// 如果pic存在,则直接返回pic
|
|
@@ -911,6 +1080,7 @@ class ComRegister {
|
|
|
911
1080
|
}
|
|
912
1081
|
// 更新时间点
|
|
913
1082
|
updatePoint(num);
|
|
1083
|
+
this.logger.info('推送动态完成');
|
|
914
1084
|
}
|
|
915
1085
|
}
|
|
916
1086
|
};
|
|
@@ -1330,8 +1500,14 @@ class ComRegister {
|
|
|
1330
1500
|
};
|
|
1331
1501
|
// 判断需要订阅的服务
|
|
1332
1502
|
if (sub.dynamic) { // 需要订阅动态
|
|
1503
|
+
let dispose;
|
|
1333
1504
|
// 开始循环检测
|
|
1334
|
-
|
|
1505
|
+
if (this.config.dynamicDebugMode) {
|
|
1506
|
+
dispose = ctx.setInterval(this.debug_dynamicDetect(ctx, bot, sub.uid, targetArr), this.config.dynamicLoopTime * 1000);
|
|
1507
|
+
}
|
|
1508
|
+
else {
|
|
1509
|
+
dispose = ctx.setInterval(this.dynamicDetect(ctx, bot, sub.uid, targetArr), this.config.dynamicLoopTime * 1000);
|
|
1510
|
+
}
|
|
1335
1511
|
// 保存销毁函数
|
|
1336
1512
|
subManagerItem.dynamicDispose = dispose;
|
|
1337
1513
|
}
|
|
@@ -1461,6 +1637,7 @@ class ComRegister {
|
|
|
1461
1637
|
regex: koishi_1.Schema.string(),
|
|
1462
1638
|
keywords: koishi_1.Schema.array(String),
|
|
1463
1639
|
}),
|
|
1640
|
+
dynamicDebugMode: koishi_1.Schema.boolean().required()
|
|
1464
1641
|
});
|
|
1465
1642
|
})(ComRegister || (ComRegister = {}));
|
|
1466
1643
|
exports.default = ComRegister;
|
package/lib/generateImg.d.ts
CHANGED
|
@@ -8,8 +8,6 @@ declare class GenerateImg extends Service {
|
|
|
8
8
|
static inject: string[];
|
|
9
9
|
giConfig: GenerateImg.Config;
|
|
10
10
|
constructor(ctx: Context, config: GenerateImg.Config);
|
|
11
|
-
protected start(): void | Promise<void>;
|
|
12
|
-
protected stop(): void | Promise<void>;
|
|
13
11
|
generateLiveImg(data: any, userData: any, liveStatus: number): Promise<{
|
|
14
12
|
buffer: Buffer;
|
|
15
13
|
pic?: undefined;
|
package/lib/generateImg.js
CHANGED
|
@@ -43,12 +43,13 @@ class GenerateImg extends koishi_1.Service {
|
|
|
43
43
|
super(ctx, 'gi');
|
|
44
44
|
this.giConfig = config;
|
|
45
45
|
}
|
|
46
|
-
start() {
|
|
46
|
+
/* protected start(): void | Promise<void> {
|
|
47
47
|
this.logger.info('工作中');
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
|
|
50
|
+
protected stop(): void | Promise<void> {
|
|
51
|
+
this.logger.info('已停止工作')
|
|
52
|
+
} */
|
|
52
53
|
async generateLiveImg(data, userData, liveStatus /*0未开播 1刚开播 2已开播 */) {
|
|
53
54
|
const [titleStatus, liveTime, cover] = await this.getLiveStatus(data.live_time, liveStatus);
|
|
54
55
|
// 加载字体
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -150,6 +150,11 @@ exports.Config = koishi_1.Schema.object({
|
|
|
150
150
|
koishi_1.Schema.object({})
|
|
151
151
|
])
|
|
152
152
|
]),
|
|
153
|
+
debug: koishi_1.Schema.object({}).description('调试设置'),
|
|
154
|
+
dynamicDebugMode: koishi_1.Schema.boolean()
|
|
155
|
+
.default(false)
|
|
156
|
+
.description('动态调试模式,开启后会在控制台输出动态推送的详细信息,用于调试')
|
|
157
|
+
.experimental()
|
|
153
158
|
});
|
|
154
159
|
class ServerManager extends koishi_1.Service {
|
|
155
160
|
// 服务
|
|
@@ -256,7 +261,8 @@ class ServerManager extends koishi_1.Service {
|
|
|
256
261
|
dynamicCheckNumber: globalConfig.dynamicCheckNumber,
|
|
257
262
|
dynamicLoopTime: this.dynamicLoopTime,
|
|
258
263
|
dynamicUrl: globalConfig.dynamicUrl,
|
|
259
|
-
filter: globalConfig.filter
|
|
264
|
+
filter: globalConfig.filter,
|
|
265
|
+
dynamicDebugMode: globalConfig.dynamicDebugMode
|
|
260
266
|
});
|
|
261
267
|
// 添加服务
|
|
262
268
|
this.servers.push(ba);
|
package/lib/wbi.d.ts
CHANGED
|
@@ -8,8 +8,6 @@ declare class Wbi extends Service {
|
|
|
8
8
|
wbiConfig: Wbi.Config;
|
|
9
9
|
mixinKeyEncTab: number[];
|
|
10
10
|
constructor(ctx: Context, config: Wbi.Config);
|
|
11
|
-
protected start(): void | Promise<void>;
|
|
12
|
-
protected stop(): void | Promise<void>;
|
|
13
11
|
getMixinKey: (orig: any) => string;
|
|
14
12
|
encWbi(params: any, img_key: any, sub_key: any): string;
|
|
15
13
|
getWbiKeys(): Promise<{
|
package/lib/wbi.js
CHANGED
|
@@ -18,12 +18,13 @@ class Wbi extends koishi_1.Service {
|
|
|
18
18
|
super(ctx, 'wbi');
|
|
19
19
|
this.wbiConfig = config;
|
|
20
20
|
}
|
|
21
|
-
start() {
|
|
22
|
-
this.logger.info('工作中')
|
|
23
|
-
}
|
|
24
|
-
stop() {
|
|
25
|
-
this.logger.info('已停止工作');
|
|
21
|
+
/* protected start(): void | Promise<void> {
|
|
22
|
+
this.logger.info('工作中')
|
|
26
23
|
}
|
|
24
|
+
|
|
25
|
+
protected stop(): void | Promise<void> {
|
|
26
|
+
this.logger.info('已停止工作')
|
|
27
|
+
} */
|
|
27
28
|
// 对 imgKey 和 subKey 进行字符顺序打乱编码
|
|
28
29
|
getMixinKey = (orig) => this.mixinKeyEncTab.map(n => orig[n]).join('').slice(0, 32);
|
|
29
30
|
// 为请求参数进行 wbi 签名
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -155,6 +155,8 @@
|
|
|
155
155
|
- ver 1.2.12-alpha.1 删除直播推送时的多余空格
|
|
156
156
|
- ver 1.2.12-alpha.2 尝试修复版本 `1.2.12-alpha.0 账号出现某些问题后,不会再清除订阅信息` 仍然会清除订阅信息的bug
|
|
157
157
|
- ver 1.2.12-alpha.3 尝试修复订阅时使用 `all` 报错的bug
|
|
158
|
+
- ver 1.2.12 新增动态错误处理
|
|
159
|
+
- ver 1.2.13 现已支持调试模式,目前支持对动态的调试。需要调试模式可在控制台中开启
|
|
158
160
|
|
|
159
161
|
## 交流群
|
|
160
162
|
|