koishi-plugin-bilibili-notify 1.3.5 → 1.3.6-beta.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.
- package/lib/biliAPI.js +6 -3
- package/lib/comRegister.d.ts +3 -1
- package/lib/comRegister.js +353 -283
- package/lib/index.d.ts +1 -2
- package/lib/index.js +11 -17
- package/package.json +16 -16
- package/readme.md +2 -0
package/lib/biliAPI.js
CHANGED
|
@@ -3,8 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
|
|
6
8
|
/* eslint-disable @typescript-eslint/no-namespace */
|
|
7
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
8
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
10
|
const koishi_1 = require("koishi");
|
|
10
11
|
const axios_1 = __importDefault(require("axios"));
|
|
@@ -154,7 +155,8 @@ class BiliAPI extends koishi_1.Service {
|
|
|
154
155
|
throw new Error('网络异常,本次请求失败!');
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
|
-
disposeNotifier() {
|
|
158
|
+
disposeNotifier() { if (this.loginNotifier)
|
|
159
|
+
this.loginNotifier.dispose(); }
|
|
158
160
|
getRandomUserAgent() {
|
|
159
161
|
const userAgents = [
|
|
160
162
|
'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',
|
|
@@ -271,7 +273,8 @@ class BiliAPI extends koishi_1.Service {
|
|
|
271
273
|
}
|
|
272
274
|
enableRefreshCookiesDetect() {
|
|
273
275
|
// 判断之前是否启动检测
|
|
274
|
-
|
|
276
|
+
if (this.refreshCookieTimer)
|
|
277
|
+
this.refreshCookieTimer();
|
|
275
278
|
// Open scheduled tasks and check if token need refresh
|
|
276
279
|
this.refreshCookieTimer = this.ctx.setInterval(async () => {
|
|
277
280
|
// 从数据库获取登录信息
|
package/lib/comRegister.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ declare class ComRegister {
|
|
|
6
6
|
config: ComRegister.Config;
|
|
7
7
|
loginTimer: Function;
|
|
8
8
|
num: number;
|
|
9
|
+
rebootCount: number;
|
|
9
10
|
subNotifier: Notifier;
|
|
10
11
|
subManager: {
|
|
11
12
|
id: number;
|
|
@@ -30,7 +31,8 @@ declare class ComRegister {
|
|
|
30
31
|
constructor(ctx: Context, config: ComRegister.Config);
|
|
31
32
|
getTheCorrespondingBotBasedOnTheSession(session: Session): Bot<Context, any>;
|
|
32
33
|
sendPrivateMsg(bot: Bot<Context>, content: string): Promise<void>;
|
|
33
|
-
sendPrivateMsgAndRebootService(ctx: Context, bot: Bot<Context
|
|
34
|
+
sendPrivateMsgAndRebootService(ctx: Context, bot: Bot<Context>): Promise<void>;
|
|
35
|
+
sendPrivateMsgAndStopService(ctx: Context, bot: Bot<Context>): Promise<void>;
|
|
34
36
|
sendMsg(targets: Array<string>, bot: Bot<Context>, content: any): Promise<void>;
|
|
35
37
|
dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
|
36
38
|
debug_dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
package/lib/comRegister.js
CHANGED
|
@@ -4,13 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const jsx_runtime_1 = require("@satorijs/element/jsx-runtime");
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
|
|
7
9
|
/* eslint-disable @typescript-eslint/no-namespace */
|
|
8
10
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
10
11
|
const koishi_1 = require("koishi");
|
|
11
12
|
// 导入qrcode
|
|
12
13
|
const qrcode_1 = __importDefault(require("qrcode"));
|
|
13
|
-
const jimp_1 =
|
|
14
|
+
const jimp_1 = require("jimp");
|
|
14
15
|
var LiveType;
|
|
15
16
|
(function (LiveType) {
|
|
16
17
|
LiveType[LiveType["NotLiveBroadcast"] = 0] = "NotLiveBroadcast";
|
|
@@ -23,6 +24,7 @@ class ComRegister {
|
|
|
23
24
|
config;
|
|
24
25
|
loginTimer;
|
|
25
26
|
num = 0;
|
|
27
|
+
rebootCount = 0;
|
|
26
28
|
subNotifier;
|
|
27
29
|
subManager = [];
|
|
28
30
|
// QQ群机器人
|
|
@@ -260,7 +262,8 @@ class ComRegister {
|
|
|
260
262
|
await session.send(koishi_1.h.image(buffer, 'image/png'));
|
|
261
263
|
});
|
|
262
264
|
// 检查之前是否存在登录定时器
|
|
263
|
-
|
|
265
|
+
if (this.loginTimer)
|
|
266
|
+
this.loginTimer();
|
|
264
267
|
// 设置flag
|
|
265
268
|
let flag = true;
|
|
266
269
|
// 发起登录请求检查登录状态
|
|
@@ -363,7 +366,8 @@ class ComRegister {
|
|
|
363
366
|
}
|
|
364
367
|
}));
|
|
365
368
|
// 未订阅该用户,无需取消订阅
|
|
366
|
-
!exist
|
|
369
|
+
if (!exist)
|
|
370
|
+
session.send('未订阅该用户,无需取消订阅');
|
|
367
371
|
});
|
|
368
372
|
biliCom
|
|
369
373
|
.subcommand('.show', '展示订阅对象')
|
|
@@ -707,7 +711,7 @@ class ComRegister {
|
|
|
707
711
|
// 获得对应bot
|
|
708
712
|
const bot = this.getTheCorrespondingBotBasedOnTheSession(session)
|
|
709
713
|
// 发送提示消息,重启服务
|
|
710
|
-
await this.
|
|
714
|
+
await this.sendPrivateMsgAndStopService(ctx, bot, '测试biliAPI等服务自动重启功能')
|
|
711
715
|
}) */
|
|
712
716
|
/* biliCom
|
|
713
717
|
.subcommand('.sendall', '测试给机器人加入的所有群发送消息', { hidden: true })
|
|
@@ -780,23 +784,47 @@ class ComRegister {
|
|
|
780
784
|
}
|
|
781
785
|
}
|
|
782
786
|
}
|
|
783
|
-
async sendPrivateMsgAndRebootService(ctx, bot
|
|
784
|
-
|
|
787
|
+
async sendPrivateMsgAndRebootService(ctx, bot) {
|
|
788
|
+
// 判断重启次数是否超过三次
|
|
789
|
+
if (this.rebootCount >= 3) {
|
|
790
|
+
// logger
|
|
791
|
+
this.logger.error('已重启插件三次,请检查机器人状态后使用指令 sys start 启动插件');
|
|
792
|
+
// 重启失败,发送消息
|
|
793
|
+
await this.sendPrivateMsg(bot, '已重启插件三次,请检查机器人状态后使用指令 sys start 启动插件');
|
|
794
|
+
// 关闭插件
|
|
795
|
+
await ctx.sm.disposePlugin();
|
|
796
|
+
// 结束
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
// 重启次数+1
|
|
800
|
+
this.rebootCount++;
|
|
801
|
+
// logger
|
|
802
|
+
this.logger.info('插件出现未知错误,正在重启插件');
|
|
785
803
|
// 重启插件
|
|
786
|
-
const flag = await ctx.sm.restartPlugin(
|
|
804
|
+
const flag = await ctx.sm.restartPlugin();
|
|
787
805
|
// 判断是否重启成功
|
|
788
806
|
if (flag) {
|
|
789
807
|
this.logger.info('重启插件成功');
|
|
790
808
|
}
|
|
791
809
|
else {
|
|
792
810
|
// logger
|
|
793
|
-
this.logger.error('
|
|
811
|
+
this.logger.error('重启插件失败,请检查机器人状态后使用指令 sys start 启动插件');
|
|
794
812
|
// 重启失败,发送消息
|
|
795
|
-
await this.sendPrivateMsg(bot, '
|
|
813
|
+
await this.sendPrivateMsg(bot, '重启插件失败,请检查机器人状态后使用指令 sys start 启动插件');
|
|
796
814
|
// 关闭插件
|
|
797
815
|
await ctx.sm.disposePlugin();
|
|
798
816
|
}
|
|
799
817
|
}
|
|
818
|
+
async sendPrivateMsgAndStopService(ctx, bot) {
|
|
819
|
+
// 发送消息
|
|
820
|
+
await this.sendPrivateMsg(bot, '插件发生未知错误,请检查机器人状态后使用指令 sys start 启动插件');
|
|
821
|
+
// logger
|
|
822
|
+
this.logger.error('插件发生未知错误,请检查机器人状态后使用指令 sys start 启动插件');
|
|
823
|
+
// 关闭插件
|
|
824
|
+
await ctx.sm.disposePlugin();
|
|
825
|
+
// 结束
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
800
828
|
async sendMsg(targets, bot, content) {
|
|
801
829
|
// 定义需要发送的数组
|
|
802
830
|
let sendArr = [];
|
|
@@ -818,299 +846,331 @@ class ComRegister {
|
|
|
818
846
|
dynamicDetect(ctx, bot, uid, guildId) {
|
|
819
847
|
let firstSubscription = true;
|
|
820
848
|
let timePoint;
|
|
849
|
+
// 相当于锁的作用,防止上一个循环没处理完
|
|
850
|
+
let flag = true;
|
|
821
851
|
return async () => {
|
|
822
|
-
//
|
|
823
|
-
if (
|
|
824
|
-
// 设置第一次的时间点
|
|
825
|
-
timePoint = ctx.ba.getTimeOfUTC8();
|
|
826
|
-
// 设置第一次为false
|
|
827
|
-
firstSubscription = false;
|
|
852
|
+
// 判断上一个循环是否完成
|
|
853
|
+
if (!flag)
|
|
828
854
|
return;
|
|
829
|
-
|
|
830
|
-
//
|
|
831
|
-
let content;
|
|
855
|
+
flag = false;
|
|
856
|
+
// 无论是否执行成功都要释放锁
|
|
832
857
|
try {
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
switch (content.code) {
|
|
841
|
-
case -101: { // 账号未登录
|
|
842
|
-
// 输出日志
|
|
843
|
-
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
844
|
-
// 发送私聊消息
|
|
845
|
-
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
846
|
-
// 停止服务
|
|
847
|
-
await ctx.sm.disposePlugin();
|
|
848
|
-
// 结束循环
|
|
849
|
-
break;
|
|
850
|
-
}
|
|
851
|
-
case -352: { // 风控
|
|
852
|
-
// 输出日志
|
|
853
|
-
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
854
|
-
// 发送私聊消息
|
|
855
|
-
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
856
|
-
// 停止服务
|
|
857
|
-
await ctx.sm.disposePlugin();
|
|
858
|
-
// 结束循环
|
|
859
|
-
break;
|
|
860
|
-
}
|
|
861
|
-
case 4101128:
|
|
862
|
-
case 4101129: { // 获取动态信息错误
|
|
863
|
-
// 输出日志
|
|
864
|
-
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
865
|
-
// 发送私聊消息
|
|
866
|
-
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
867
|
-
// 结束循环
|
|
868
|
-
break;
|
|
869
|
-
}
|
|
870
|
-
default: { // 未知错误
|
|
871
|
-
// 发送私聊消息
|
|
872
|
-
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
873
|
-
// 取消订阅
|
|
874
|
-
this.unsubAll(ctx, bot, uid);
|
|
875
|
-
// 结束循环
|
|
876
|
-
break;
|
|
877
|
-
}
|
|
858
|
+
// 第一次订阅判断
|
|
859
|
+
if (firstSubscription) {
|
|
860
|
+
// 设置第一次的时间点
|
|
861
|
+
timePoint = ctx.ba.getTimeOfUTC8();
|
|
862
|
+
// 设置第一次为false
|
|
863
|
+
firstSubscription = false;
|
|
864
|
+
return;
|
|
878
865
|
}
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
866
|
+
// 获取用户空间动态数据
|
|
867
|
+
let content;
|
|
868
|
+
try {
|
|
869
|
+
content = await ctx.ba.getUserSpaceDynamic(uid);
|
|
870
|
+
}
|
|
871
|
+
catch (e) {
|
|
872
|
+
return this.logger.error('dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:' + e.message);
|
|
873
|
+
}
|
|
874
|
+
// 判断是否出现其他问题
|
|
875
|
+
if (content.code !== 0) {
|
|
876
|
+
switch (content.code) {
|
|
877
|
+
case -101: { // 账号未登录
|
|
878
|
+
// 输出日志
|
|
879
|
+
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
880
|
+
// 发送私聊消息
|
|
881
|
+
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
882
|
+
// 停止服务
|
|
883
|
+
await ctx.sm.disposePlugin();
|
|
884
|
+
// 结束循环
|
|
885
|
+
break;
|
|
886
|
+
}
|
|
887
|
+
case -352: { // 风控
|
|
888
|
+
// 输出日志
|
|
889
|
+
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
890
|
+
// 发送私聊消息
|
|
891
|
+
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
892
|
+
// 停止服务
|
|
893
|
+
await ctx.sm.disposePlugin();
|
|
894
|
+
// 结束循环
|
|
895
|
+
break;
|
|
896
|
+
}
|
|
897
|
+
case 4101128:
|
|
898
|
+
case 4101129: { // 获取动态信息错误
|
|
899
|
+
// 输出日志
|
|
900
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
901
|
+
// 发送私聊消息
|
|
902
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
903
|
+
// 结束循环
|
|
904
|
+
break;
|
|
905
|
+
}
|
|
906
|
+
default: { // 未知错误
|
|
907
|
+
// 发送私聊消息
|
|
908
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
909
|
+
// 取消订阅
|
|
910
|
+
this.unsubAll(ctx, bot, uid);
|
|
911
|
+
// 结束循环
|
|
912
|
+
break;
|
|
888
913
|
}
|
|
889
|
-
break;
|
|
890
914
|
}
|
|
891
|
-
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
892
915
|
}
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
let pic;
|
|
903
|
-
let buffer;
|
|
904
|
-
// 从动态数据中取出UP主名称和动态ID
|
|
905
|
-
const upName = content.data.items[num].modules.module_author.name;
|
|
906
|
-
const dynamicId = content.data.items[num].id_str;
|
|
907
|
-
// 推送该条动态
|
|
908
|
-
const attempts = 3;
|
|
909
|
-
for (let i = 0; i < attempts; i++) {
|
|
910
|
-
// 获取动态推送图片
|
|
911
|
-
try {
|
|
912
|
-
// 渲染图片
|
|
913
|
-
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
914
|
-
// 赋值
|
|
915
|
-
pic = gimgPic;
|
|
916
|
-
buffer = gimgBuffer;
|
|
917
|
-
// 成功则跳出循环
|
|
916
|
+
// 获取数据内容
|
|
917
|
+
const items = content.data.items;
|
|
918
|
+
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
919
|
+
const updatePoint = (num) => {
|
|
920
|
+
switch (num) {
|
|
921
|
+
case 1: {
|
|
922
|
+
if (items[0].modules.module_tag) { // 存在置顶动态
|
|
923
|
+
timePoint = items[num].modules.module_author.pub_ts;
|
|
924
|
+
}
|
|
918
925
|
break;
|
|
919
926
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
927
|
+
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
928
|
+
}
|
|
929
|
+
};
|
|
930
|
+
// 发送请求 默认只查看配置文件规定数量的数据
|
|
931
|
+
for (let num = this.config.dynamicCheckNumber - 1; num >= 0; num--) {
|
|
932
|
+
// 没有动态内容则直接跳过
|
|
933
|
+
if (!items[num])
|
|
934
|
+
continue;
|
|
935
|
+
// 寻找发布时间比时间点更晚的动态
|
|
936
|
+
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
937
|
+
// 定义变量
|
|
938
|
+
let pic;
|
|
939
|
+
let buffer;
|
|
940
|
+
// 从动态数据中取出UP主名称和动态ID
|
|
941
|
+
const upName = content.data.items[num].modules.module_author.name;
|
|
942
|
+
const dynamicId = content.data.items[num].id_str;
|
|
943
|
+
// 推送该条动态
|
|
944
|
+
const attempts = 3;
|
|
945
|
+
for (let i = 0; i < attempts; i++) {
|
|
946
|
+
// 获取动态推送图片
|
|
947
|
+
try {
|
|
948
|
+
// 渲染图片
|
|
949
|
+
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
950
|
+
// 赋值
|
|
951
|
+
pic = gimgPic;
|
|
952
|
+
buffer = gimgBuffer;
|
|
953
|
+
// 成功则跳出循环
|
|
954
|
+
break;
|
|
932
955
|
}
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
956
|
+
catch (e) {
|
|
957
|
+
// 直播开播动态,不做处理
|
|
958
|
+
if (e.message === '直播开播动态,不做处理')
|
|
959
|
+
return updatePoint(num);
|
|
960
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
961
|
+
// 如果需要发送才发送
|
|
962
|
+
if (this.config.filter.notify) {
|
|
963
|
+
await this.sendMsg(guildId, bot, `${upName}发布了一条含有屏蔽关键字的动态`);
|
|
964
|
+
}
|
|
965
|
+
return updatePoint(num);
|
|
966
|
+
}
|
|
967
|
+
if (e.message === '已屏蔽转发动态') {
|
|
968
|
+
if (this.config.filter.notify) {
|
|
969
|
+
await this.sendMsg(guildId, bot, `${upName}发布了一条转发动态,已屏蔽`);
|
|
970
|
+
}
|
|
971
|
+
return updatePoint(num);
|
|
972
|
+
}
|
|
973
|
+
// 未知错误
|
|
974
|
+
if (i === attempts - 1) {
|
|
975
|
+
this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
|
|
976
|
+
// 发送私聊消息并重启服务
|
|
977
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
978
|
+
}
|
|
938
979
|
}
|
|
939
980
|
}
|
|
981
|
+
// 判断是否需要发送URL
|
|
982
|
+
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
983
|
+
// 如果pic存在,则直接返回pic
|
|
984
|
+
if (pic) {
|
|
985
|
+
this.logger.info('推送动态中,使用render模式');
|
|
986
|
+
// pic存在,使用的是render模式
|
|
987
|
+
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
988
|
+
}
|
|
989
|
+
else if (buffer) {
|
|
990
|
+
this.logger.info('推送动态中,使用page模式');
|
|
991
|
+
// pic不存在,说明使用的是page模式
|
|
992
|
+
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
993
|
+
}
|
|
994
|
+
else {
|
|
995
|
+
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
996
|
+
}
|
|
997
|
+
// 更新时间点
|
|
998
|
+
updatePoint(num);
|
|
940
999
|
}
|
|
941
|
-
// 判断是否需要发送URL
|
|
942
|
-
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
943
|
-
// 如果pic存在,则直接返回pic
|
|
944
|
-
if (pic) {
|
|
945
|
-
this.logger.info('推送动态中,使用render模式');
|
|
946
|
-
// pic存在,使用的是render模式
|
|
947
|
-
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
948
|
-
}
|
|
949
|
-
else if (buffer) {
|
|
950
|
-
this.logger.info('推送动态中,使用page模式');
|
|
951
|
-
// pic不存在,说明使用的是page模式
|
|
952
|
-
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
953
|
-
}
|
|
954
|
-
else {
|
|
955
|
-
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
956
|
-
}
|
|
957
|
-
// 更新时间点
|
|
958
|
-
updatePoint(num);
|
|
959
1000
|
}
|
|
960
1001
|
}
|
|
1002
|
+
finally {
|
|
1003
|
+
flag = true;
|
|
1004
|
+
}
|
|
961
1005
|
};
|
|
962
1006
|
}
|
|
963
1007
|
debug_dynamicDetect(ctx, bot, uid, guildId) {
|
|
964
1008
|
let firstSubscription = true;
|
|
965
1009
|
let timePoint;
|
|
1010
|
+
// 相当于锁的作用,防止上一个循环没处理完
|
|
1011
|
+
let flag = true;
|
|
966
1012
|
return async () => {
|
|
967
|
-
//
|
|
968
|
-
if (
|
|
969
|
-
this.logger.info(`UID:${uid}-动态监测开始`);
|
|
970
|
-
// 设置第一次的时间点
|
|
971
|
-
timePoint = ctx.ba.getTimeOfUTC8();
|
|
972
|
-
// 设置第一次为false
|
|
973
|
-
firstSubscription = false;
|
|
1013
|
+
// 判断上一个循环是否完成
|
|
1014
|
+
if (!flag)
|
|
974
1015
|
return;
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
// 获取用户空间动态数据
|
|
978
|
-
let content;
|
|
1016
|
+
flag = false;
|
|
1017
|
+
// 无论是否执行成功都要释放锁
|
|
979
1018
|
try {
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
switch (content.code) {
|
|
989
|
-
case -101: { // 账号未登录
|
|
990
|
-
// 输出日志
|
|
991
|
-
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
992
|
-
// 发送私聊消息
|
|
993
|
-
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
994
|
-
// 停止服务
|
|
995
|
-
await ctx.sm.disposePlugin();
|
|
996
|
-
// 结束循环
|
|
997
|
-
break;
|
|
998
|
-
}
|
|
999
|
-
case -352: { // 风控
|
|
1000
|
-
// 输出日志
|
|
1001
|
-
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1002
|
-
// 发送私聊消息
|
|
1003
|
-
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1004
|
-
// 停止服务
|
|
1005
|
-
await ctx.sm.disposePlugin();
|
|
1006
|
-
// 结束循环
|
|
1007
|
-
break;
|
|
1008
|
-
}
|
|
1009
|
-
case 4101128:
|
|
1010
|
-
case 4101129: { // 获取动态信息错误
|
|
1011
|
-
// 输出日志
|
|
1012
|
-
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
1013
|
-
// 发送私聊消息
|
|
1014
|
-
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1015
|
-
// 结束循环
|
|
1016
|
-
break;
|
|
1017
|
-
}
|
|
1018
|
-
default: { // 未知错误
|
|
1019
|
-
// 发送私聊消息
|
|
1020
|
-
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1021
|
-
// 取消订阅
|
|
1022
|
-
this.unsubAll(ctx, bot, uid);
|
|
1023
|
-
// 结束循环
|
|
1024
|
-
break;
|
|
1025
|
-
}
|
|
1019
|
+
// 第一次订阅判断
|
|
1020
|
+
if (firstSubscription) {
|
|
1021
|
+
this.logger.info(`UID:${uid}-动态监测开始`);
|
|
1022
|
+
// 设置第一次的时间点
|
|
1023
|
+
timePoint = ctx.ba.getTimeOfUTC8();
|
|
1024
|
+
// 设置第一次为false
|
|
1025
|
+
firstSubscription = false;
|
|
1026
|
+
return;
|
|
1026
1027
|
}
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1028
|
+
this.logger.info(`UID:${uid}-获取动态信息中`);
|
|
1029
|
+
// 获取用户空间动态数据
|
|
1030
|
+
let content;
|
|
1031
|
+
try {
|
|
1032
|
+
content = await ctx.ba.getUserSpaceDynamic(uid);
|
|
1033
|
+
}
|
|
1034
|
+
catch (e) {
|
|
1035
|
+
return this.logger.error(`UID:${uid}-dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:${e.message}`);
|
|
1036
|
+
}
|
|
1037
|
+
this.logger.info(`UID:${uid}-判断动态信息是否正确`);
|
|
1038
|
+
// 判断是否出现其他问题
|
|
1039
|
+
if (content.code !== 0) {
|
|
1040
|
+
switch (content.code) {
|
|
1041
|
+
case -101: { // 账号未登录
|
|
1042
|
+
// 输出日志
|
|
1043
|
+
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
1044
|
+
// 发送私聊消息
|
|
1045
|
+
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
1046
|
+
// 停止服务
|
|
1047
|
+
await ctx.sm.disposePlugin();
|
|
1048
|
+
// 结束循环
|
|
1049
|
+
break;
|
|
1050
|
+
}
|
|
1051
|
+
case -352: { // 风控
|
|
1052
|
+
// 输出日志
|
|
1053
|
+
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1054
|
+
// 发送私聊消息
|
|
1055
|
+
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1056
|
+
// 停止服务
|
|
1057
|
+
await ctx.sm.disposePlugin();
|
|
1058
|
+
// 结束循环
|
|
1059
|
+
break;
|
|
1060
|
+
}
|
|
1061
|
+
case 4101128:
|
|
1062
|
+
case 4101129: { // 获取动态信息错误
|
|
1063
|
+
// 输出日志
|
|
1064
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
1065
|
+
// 发送私聊消息
|
|
1066
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1067
|
+
// 结束循环
|
|
1068
|
+
break;
|
|
1069
|
+
}
|
|
1070
|
+
default: { // 未知错误
|
|
1071
|
+
// 发送私聊消息
|
|
1072
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1073
|
+
// 取消订阅
|
|
1074
|
+
this.unsubAll(ctx, bot, uid);
|
|
1075
|
+
// 结束循环
|
|
1076
|
+
break;
|
|
1037
1077
|
}
|
|
1038
|
-
break;
|
|
1039
1078
|
}
|
|
1040
|
-
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
1041
1079
|
}
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
//
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
let pic;
|
|
1053
|
-
let buffer;
|
|
1054
|
-
// 从动态数据中取出UP主名称和动态ID
|
|
1055
|
-
const upName = content.data.items[num].modules.module_author.name;
|
|
1056
|
-
const dynamicId = content.data.items[num].id_str;
|
|
1057
|
-
// 推送该条动态
|
|
1058
|
-
const attempts = 3;
|
|
1059
|
-
this.logger.info(`UID:${uid}-尝试渲染推送图片`);
|
|
1060
|
-
for (let i = 0; i < attempts; i++) {
|
|
1061
|
-
// 获取动态推送图片
|
|
1062
|
-
try {
|
|
1063
|
-
// 渲染图片
|
|
1064
|
-
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
1065
|
-
// 赋值
|
|
1066
|
-
pic = gimgPic;
|
|
1067
|
-
buffer = gimgBuffer;
|
|
1068
|
-
// 成功则跳出循环
|
|
1080
|
+
// 获取数据内容
|
|
1081
|
+
const items = content.data.items;
|
|
1082
|
+
this.logger.info(`UID:${uid}-获取到的动态信息:${items.map(v => v.basic.rid_str).join('、')}`);
|
|
1083
|
+
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
1084
|
+
const updatePoint = (num) => {
|
|
1085
|
+
switch (num) {
|
|
1086
|
+
case 1: {
|
|
1087
|
+
if (items[0].modules.module_tag) { // 存在置顶动态
|
|
1088
|
+
timePoint = items[num].modules.module_author.pub_ts;
|
|
1089
|
+
}
|
|
1069
1090
|
break;
|
|
1070
1091
|
}
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1092
|
+
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
1093
|
+
}
|
|
1094
|
+
};
|
|
1095
|
+
// 发送请求 默认只查看配置文件规定数量的数据
|
|
1096
|
+
for (let num = this.config.dynamicCheckNumber - 1; num >= 0; num--) {
|
|
1097
|
+
// 没有动态内容则直接跳过
|
|
1098
|
+
if (!items[num])
|
|
1099
|
+
continue;
|
|
1100
|
+
// 寻找发布时间比时间点更晚的动态
|
|
1101
|
+
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
1102
|
+
this.logger.info(`UID:${uid}-即将推送的动态:${items[num].basic.rid_str}`);
|
|
1103
|
+
// 定义变量
|
|
1104
|
+
let pic;
|
|
1105
|
+
let buffer;
|
|
1106
|
+
// 从动态数据中取出UP主名称和动态ID
|
|
1107
|
+
const upName = content.data.items[num].modules.module_author.name;
|
|
1108
|
+
const dynamicId = content.data.items[num].id_str;
|
|
1109
|
+
// 推送该条动态
|
|
1110
|
+
const attempts = 3;
|
|
1111
|
+
this.logger.info(`UID:${uid}-尝试渲染推送图片`);
|
|
1112
|
+
for (let i = 0; i < attempts; i++) {
|
|
1113
|
+
// 获取动态推送图片
|
|
1114
|
+
try {
|
|
1115
|
+
// 渲染图片
|
|
1116
|
+
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
1117
|
+
// 赋值
|
|
1118
|
+
pic = gimgPic;
|
|
1119
|
+
buffer = gimgBuffer;
|
|
1120
|
+
// 成功则跳出循环
|
|
1121
|
+
break;
|
|
1083
1122
|
}
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1123
|
+
catch (e) {
|
|
1124
|
+
// 直播开播动态,不做处理
|
|
1125
|
+
if (e.message === '直播开播动态,不做处理')
|
|
1126
|
+
return updatePoint(num);
|
|
1127
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
1128
|
+
// 如果需要发送才发送
|
|
1129
|
+
if (this.config.filter.notify) {
|
|
1130
|
+
await this.sendMsg(guildId, bot, `${upName}发布了一条含有屏蔽关键字的动态`);
|
|
1131
|
+
}
|
|
1132
|
+
return updatePoint(num);
|
|
1133
|
+
}
|
|
1134
|
+
if (e.message === '已屏蔽转发动态') {
|
|
1135
|
+
if (this.config.filter.notify) {
|
|
1136
|
+
await this.sendMsg(guildId, bot, `${upName}发布了一条转发动态,已屏蔽`);
|
|
1137
|
+
}
|
|
1138
|
+
return updatePoint(num);
|
|
1139
|
+
}
|
|
1140
|
+
// 未知错误
|
|
1141
|
+
if (i === attempts - 1) {
|
|
1142
|
+
this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
|
|
1143
|
+
// 发送私聊消息并重启服务
|
|
1144
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1145
|
+
}
|
|
1089
1146
|
}
|
|
1090
1147
|
}
|
|
1148
|
+
this.logger.info(`UID:${uid}-尝试推送动态卡片`);
|
|
1149
|
+
// 判断是否需要发送URL
|
|
1150
|
+
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
1151
|
+
// 如果pic存在,则直接返回pic
|
|
1152
|
+
if (pic) {
|
|
1153
|
+
this.logger.info(`UID:${uid}-推送动态中,使用render模式`);
|
|
1154
|
+
// pic存在,使用的是render模式
|
|
1155
|
+
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
1156
|
+
}
|
|
1157
|
+
else if (buffer) {
|
|
1158
|
+
this.logger.info(`UID:${uid}-推送动态中,使用page模式`);
|
|
1159
|
+
// pic不存在,说明使用的是page模式
|
|
1160
|
+
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
1161
|
+
}
|
|
1162
|
+
else {
|
|
1163
|
+
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
1164
|
+
}
|
|
1165
|
+
// 更新时间点
|
|
1166
|
+
updatePoint(num);
|
|
1167
|
+
this.logger.info(`UID:${uid}-推送动态完成`);
|
|
1091
1168
|
}
|
|
1092
|
-
this.logger.info(`UID:${uid}-尝试推送动态卡片`);
|
|
1093
|
-
// 判断是否需要发送URL
|
|
1094
|
-
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
1095
|
-
// 如果pic存在,则直接返回pic
|
|
1096
|
-
if (pic) {
|
|
1097
|
-
this.logger.info(`UID:${uid}-推送动态中,使用render模式`);
|
|
1098
|
-
// pic存在,使用的是render模式
|
|
1099
|
-
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
1100
|
-
}
|
|
1101
|
-
else if (buffer) {
|
|
1102
|
-
this.logger.info(`UID:${uid}-推送动态中,使用page模式`);
|
|
1103
|
-
// pic不存在,说明使用的是page模式
|
|
1104
|
-
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
1105
|
-
}
|
|
1106
|
-
else {
|
|
1107
|
-
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
1108
|
-
}
|
|
1109
|
-
// 更新时间点
|
|
1110
|
-
updatePoint(num);
|
|
1111
|
-
this.logger.info(`UID:${uid}-推送动态完成`);
|
|
1112
1169
|
}
|
|
1113
1170
|
}
|
|
1171
|
+
finally {
|
|
1172
|
+
flag = true;
|
|
1173
|
+
}
|
|
1114
1174
|
};
|
|
1115
1175
|
}
|
|
1116
1176
|
liveDetect(ctx, bot, roomId, guildId) {
|
|
@@ -1145,7 +1205,8 @@ class ComRegister {
|
|
|
1145
1205
|
catch (e) {
|
|
1146
1206
|
if (i === attempts - 1) { // 已尝试三次
|
|
1147
1207
|
this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.message);
|
|
1148
|
-
|
|
1208
|
+
// 发送私聊消息并重启服务
|
|
1209
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1149
1210
|
}
|
|
1150
1211
|
}
|
|
1151
1212
|
}
|
|
@@ -1180,7 +1241,8 @@ class ComRegister {
|
|
|
1180
1241
|
catch (e) {
|
|
1181
1242
|
if (i === attempts - 1) { // 已尝试三次
|
|
1182
1243
|
this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.message);
|
|
1183
|
-
|
|
1244
|
+
// 发送私聊消息并重启服务
|
|
1245
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1184
1246
|
}
|
|
1185
1247
|
}
|
|
1186
1248
|
}
|
|
@@ -1212,11 +1274,12 @@ class ComRegister {
|
|
|
1212
1274
|
};
|
|
1213
1275
|
}
|
|
1214
1276
|
return async () => {
|
|
1277
|
+
// 如果flag为false则说明前面的代码还未执行完,则直接返回
|
|
1278
|
+
if (!flag)
|
|
1279
|
+
return;
|
|
1280
|
+
flag = false;
|
|
1281
|
+
// 无论是否执行成功都要释放锁
|
|
1215
1282
|
try {
|
|
1216
|
-
// 如果flag为false则说明前面的代码还未执行完,则直接返回
|
|
1217
|
-
if (!flag)
|
|
1218
|
-
return;
|
|
1219
|
-
flag = false;
|
|
1220
1283
|
// 发送请求检测直播状态
|
|
1221
1284
|
let content;
|
|
1222
1285
|
const attempts = 3;
|
|
@@ -1230,7 +1293,8 @@ class ComRegister {
|
|
|
1230
1293
|
catch (e) {
|
|
1231
1294
|
this.logger.error('liveDetect getLiveRoomInfo 发生了错误,错误为:' + e.message);
|
|
1232
1295
|
if (i === attempts - 1) { // 已尝试三次
|
|
1233
|
-
|
|
1296
|
+
// 发送私聊消息并重启服务
|
|
1297
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1234
1298
|
}
|
|
1235
1299
|
}
|
|
1236
1300
|
}
|
|
@@ -1250,7 +1314,8 @@ class ComRegister {
|
|
|
1250
1314
|
catch (e) {
|
|
1251
1315
|
this.logger.error('liveDetect getMasterInfo() 发生了错误,错误为:' + e.message);
|
|
1252
1316
|
if (i === attempts - 1) { // 已尝试三次
|
|
1253
|
-
|
|
1317
|
+
// 发送私聊消息并重启服务
|
|
1318
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1254
1319
|
}
|
|
1255
1320
|
}
|
|
1256
1321
|
}
|
|
@@ -1282,8 +1347,8 @@ class ComRegister {
|
|
|
1282
1347
|
let resizedImage;
|
|
1283
1348
|
// Jimp无法处理Webp格式,直接跳过
|
|
1284
1349
|
try {
|
|
1285
|
-
resizedImage = await jimp_1.
|
|
1286
|
-
return await image.resize(100, 100).
|
|
1350
|
+
resizedImage = await jimp_1.Jimp.read(userface).then(async (image) => {
|
|
1351
|
+
return await image.resize({ w: 100, h: 100 }).getBuffer(jimp_1.JimpMime.png);
|
|
1287
1352
|
});
|
|
1288
1353
|
}
|
|
1289
1354
|
catch (e) {
|
|
@@ -1317,7 +1382,8 @@ class ComRegister {
|
|
|
1317
1382
|
catch (e) {
|
|
1318
1383
|
this.logger.error('liveDetect open getMasterInfo() 发生了错误,错误为:' + e.message);
|
|
1319
1384
|
if (i === attempts - 1) { // 已尝试三次
|
|
1320
|
-
|
|
1385
|
+
// 发送私聊消息并重启服务
|
|
1386
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1321
1387
|
}
|
|
1322
1388
|
}
|
|
1323
1389
|
}
|
|
@@ -1403,7 +1469,8 @@ class ComRegister {
|
|
|
1403
1469
|
}
|
|
1404
1470
|
updateSubNotifier(ctx) {
|
|
1405
1471
|
// 更新控制台提示
|
|
1406
|
-
|
|
1472
|
+
if (this.subNotifier)
|
|
1473
|
+
this.subNotifier.dispose();
|
|
1407
1474
|
// 获取订阅信息
|
|
1408
1475
|
const subInfo = this.subShow();
|
|
1409
1476
|
// 定义table
|
|
@@ -1525,7 +1592,8 @@ class ComRegister {
|
|
|
1525
1592
|
catch (e) {
|
|
1526
1593
|
this.logger.error('getSubFromDatabase() getUserInfo() 发生了错误,错误为:' + e.message);
|
|
1527
1594
|
if (i === attempts - 1) { // 已尝试三次
|
|
1528
|
-
|
|
1595
|
+
// 发送私聊消息并重启服务
|
|
1596
|
+
return await this.sendPrivateMsgAndStopService(ctx, bot);
|
|
1529
1597
|
}
|
|
1530
1598
|
}
|
|
1531
1599
|
}
|
|
@@ -1628,7 +1696,8 @@ class ComRegister {
|
|
|
1628
1696
|
if (index === -1)
|
|
1629
1697
|
return '未订阅该用户,无需取消订阅';
|
|
1630
1698
|
// 取消订阅
|
|
1631
|
-
this.subManager[index].live
|
|
1699
|
+
if (this.subManager[index].live)
|
|
1700
|
+
this.subManager[index].liveDispose();
|
|
1632
1701
|
this.subManager[index].liveDispose = null;
|
|
1633
1702
|
this.subManager[index].live = false;
|
|
1634
1703
|
// 如果没有对这个UP的任何订阅,则移除
|
|
@@ -1647,7 +1716,8 @@ class ComRegister {
|
|
|
1647
1716
|
if (index === -1)
|
|
1648
1717
|
return '未订阅该用户,无需取消订阅';
|
|
1649
1718
|
// 取消订阅
|
|
1650
|
-
this.subManager[index].dynamic
|
|
1719
|
+
if (this.subManager[index].dynamic)
|
|
1720
|
+
this.subManager[index].dynamicDispose();
|
|
1651
1721
|
this.subManager[index].dynamicDispose = null;
|
|
1652
1722
|
this.subManager[index].dynamic = false;
|
|
1653
1723
|
// 如果没有对这个UP的任何订阅,则移除
|
package/lib/index.d.ts
CHANGED
|
@@ -42,12 +42,11 @@ declare class ServerManager extends Service {
|
|
|
42
42
|
servers: ForkScope[];
|
|
43
43
|
renderType: number;
|
|
44
44
|
dynamicLoopTime: number;
|
|
45
|
-
restartCount: number;
|
|
46
45
|
constructor(ctx: Context);
|
|
47
46
|
protected start(): void | Promise<void>;
|
|
48
47
|
registerPlugin: () => Promise<boolean>;
|
|
49
48
|
disposePlugin: () => Promise<boolean>;
|
|
50
|
-
restartPlugin: (
|
|
49
|
+
restartPlugin: () => Promise<boolean>;
|
|
51
50
|
}
|
|
52
51
|
export declare function apply(ctx: Context, config: Config): void;
|
|
53
52
|
export {};
|
package/lib/index.js
CHANGED
|
@@ -28,7 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.Config = exports.name = exports.inject = void 0;
|
|
30
30
|
exports.apply = apply;
|
|
31
|
-
/* eslint-disable @typescript-eslint/
|
|
31
|
+
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
32
32
|
const koishi_1 = require("koishi");
|
|
33
33
|
// import plugins
|
|
34
34
|
// import Authority from './authority'
|
|
@@ -178,8 +178,6 @@ class ServerManager extends koishi_1.Service {
|
|
|
178
178
|
renderType;
|
|
179
179
|
// 动态循环时间
|
|
180
180
|
dynamicLoopTime;
|
|
181
|
-
// 重启次数
|
|
182
|
-
restartCount = 0;
|
|
183
181
|
constructor(ctx) {
|
|
184
182
|
super(ctx, 'sm');
|
|
185
183
|
// 插件运行相关指令
|
|
@@ -313,29 +311,25 @@ class ServerManager extends koishi_1.Service {
|
|
|
313
311
|
// 成功返回true
|
|
314
312
|
return true;
|
|
315
313
|
};
|
|
316
|
-
restartPlugin = async (
|
|
314
|
+
restartPlugin = async () => {
|
|
317
315
|
// 如果没有服务则返回false
|
|
318
316
|
if (this.servers.length === 0)
|
|
319
317
|
return false;
|
|
320
|
-
// 如果需要计数
|
|
321
|
-
if (count) {
|
|
322
|
-
// 重启次数大于等于3次
|
|
323
|
-
if (this.restartCount >= 3)
|
|
324
|
-
return false;
|
|
325
|
-
// 重启次数+1
|
|
326
|
-
this.restartCount++;
|
|
327
|
-
}
|
|
328
318
|
// 停用插件
|
|
329
319
|
await this.disposePlugin();
|
|
330
320
|
// 隔一秒启动插件
|
|
331
|
-
|
|
321
|
+
return new Promise(resolve => {
|
|
332
322
|
this.ctx.setTimeout(async () => {
|
|
333
|
-
|
|
334
|
-
|
|
323
|
+
try {
|
|
324
|
+
await this.registerPlugin();
|
|
325
|
+
}
|
|
326
|
+
catch (e) {
|
|
327
|
+
this.logger.error('重启插件失败', e);
|
|
328
|
+
resolve(false);
|
|
329
|
+
}
|
|
330
|
+
resolve(true);
|
|
335
331
|
}, 1000);
|
|
336
332
|
});
|
|
337
|
-
// 成功返回true
|
|
338
|
-
return true;
|
|
339
333
|
};
|
|
340
334
|
}
|
|
341
335
|
function apply(ctx, config) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-bilibili-notify",
|
|
3
3
|
"description": "Koishi bilibili notify plugin",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.6-beta.0",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Akokko <admin@akokko.com>"
|
|
7
7
|
],
|
|
@@ -27,25 +27,25 @@
|
|
|
27
27
|
"koishi": "^4.17.5"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"axios": "^1.7.
|
|
31
|
-
"axios-cookiejar-support": "^5.0.
|
|
32
|
-
"jimp": "^
|
|
33
|
-
"jsdom": "^24.
|
|
34
|
-
"luxon": "^3.
|
|
30
|
+
"axios": "^1.7.7",
|
|
31
|
+
"axios-cookiejar-support": "^5.0.3",
|
|
32
|
+
"jimp": "^1.6.0",
|
|
33
|
+
"jsdom": "^24.1.3",
|
|
34
|
+
"luxon": "^3.5.0",
|
|
35
35
|
"md5": "^2.3.0",
|
|
36
|
-
"qrcode": "^1.5.
|
|
36
|
+
"qrcode": "^1.5.4",
|
|
37
37
|
"tough-cookie": "^4.1.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@eslint/js": "^9.
|
|
41
|
-
"@types/luxon": "^3",
|
|
42
|
-
"@types/md5": "^2",
|
|
43
|
-
"@types/qrcode": "^1",
|
|
44
|
-
"@types/tough-cookie": "^4",
|
|
45
|
-
"eslint": "9.
|
|
46
|
-
"globals": "^15.
|
|
47
|
-
"koishi-plugin-puppeteer": "^3.
|
|
48
|
-
"typescript-eslint": "^7.
|
|
40
|
+
"@eslint/js": "^9.12.0",
|
|
41
|
+
"@types/luxon": "^3.4.2",
|
|
42
|
+
"@types/md5": "^2.3.5",
|
|
43
|
+
"@types/qrcode": "^1.5.5",
|
|
44
|
+
"@types/tough-cookie": "^4.0.5",
|
|
45
|
+
"eslint": "^9.12.0",
|
|
46
|
+
"globals": "^15.11.0",
|
|
47
|
+
"koishi-plugin-puppeteer": "^3.9.0",
|
|
48
|
+
"typescript-eslint": "^7.18.0"
|
|
49
49
|
},
|
|
50
50
|
"koishi": {
|
|
51
51
|
"service": {
|