koishi-plugin-bilibili-notify 1.3.5 → 1.3.6-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/comRegister.d.ts +2 -1
- package/lib/comRegister.js +319 -273
- package/lib/index.d.ts +1 -2
- package/lib/index.js +10 -16
- package/package.json +1 -1
- package/readme.md +1 -0
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,7 @@ 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>;
|
|
34
35
|
sendMsg(targets: Array<string>, bot: Bot<Context>, content: any): Promise<void>;
|
|
35
36
|
dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
|
36
37
|
debug_dynamicDetect(ctx: Context, bot: Bot<Context>, uid: string, guildId: Array<string>): () => Promise<void>;
|
package/lib/comRegister.js
CHANGED
|
@@ -23,6 +23,7 @@ class ComRegister {
|
|
|
23
23
|
config;
|
|
24
24
|
loginTimer;
|
|
25
25
|
num = 0;
|
|
26
|
+
rebootCount = 0;
|
|
26
27
|
subNotifier;
|
|
27
28
|
subManager = [];
|
|
28
29
|
// QQ群机器人
|
|
@@ -780,19 +781,33 @@ class ComRegister {
|
|
|
780
781
|
}
|
|
781
782
|
}
|
|
782
783
|
}
|
|
783
|
-
async sendPrivateMsgAndRebootService(ctx, bot
|
|
784
|
-
|
|
784
|
+
async sendPrivateMsgAndRebootService(ctx, bot) {
|
|
785
|
+
// 判断重启次数是否超过三次
|
|
786
|
+
if (this.rebootCount >= 3) {
|
|
787
|
+
// logger
|
|
788
|
+
this.logger.error('已重启插件三次,请检查机器人状态后使用指令 sys start 启动插件');
|
|
789
|
+
// 重启失败,发送消息
|
|
790
|
+
await this.sendPrivateMsg(bot, '已重启插件三次,请检查机器人状态后使用指令 sys start 启动插件');
|
|
791
|
+
// 关闭插件
|
|
792
|
+
await ctx.sm.disposePlugin();
|
|
793
|
+
// 结束
|
|
794
|
+
return;
|
|
795
|
+
}
|
|
796
|
+
// 重启次数+1
|
|
797
|
+
this.rebootCount++;
|
|
798
|
+
// logger
|
|
799
|
+
this.logger.info('插件出现未知错误,正在重启插件');
|
|
785
800
|
// 重启插件
|
|
786
|
-
const flag = await ctx.sm.restartPlugin(
|
|
801
|
+
const flag = await ctx.sm.restartPlugin();
|
|
787
802
|
// 判断是否重启成功
|
|
788
803
|
if (flag) {
|
|
789
804
|
this.logger.info('重启插件成功');
|
|
790
805
|
}
|
|
791
806
|
else {
|
|
792
807
|
// logger
|
|
793
|
-
this.logger.error('
|
|
808
|
+
this.logger.error('重启插件失败,请检查机器人状态后使用指令 sys start 启动插件');
|
|
794
809
|
// 重启失败,发送消息
|
|
795
|
-
await this.sendPrivateMsg(bot, '
|
|
810
|
+
await this.sendPrivateMsg(bot, '重启插件失败,请检查机器人状态后使用指令 sys start 启动插件');
|
|
796
811
|
// 关闭插件
|
|
797
812
|
await ctx.sm.disposePlugin();
|
|
798
813
|
}
|
|
@@ -818,299 +833,323 @@ class ComRegister {
|
|
|
818
833
|
dynamicDetect(ctx, bot, uid, guildId) {
|
|
819
834
|
let firstSubscription = true;
|
|
820
835
|
let timePoint;
|
|
836
|
+
// 相当于锁的作用,防止上一个循环没处理完
|
|
837
|
+
let flag = true;
|
|
821
838
|
return async () => {
|
|
822
|
-
//
|
|
823
|
-
if (
|
|
824
|
-
// 设置第一次的时间点
|
|
825
|
-
timePoint = ctx.ba.getTimeOfUTC8();
|
|
826
|
-
// 设置第一次为false
|
|
827
|
-
firstSubscription = false;
|
|
839
|
+
// 判断上一个循环是否完成
|
|
840
|
+
if (!flag)
|
|
828
841
|
return;
|
|
829
|
-
|
|
830
|
-
//
|
|
831
|
-
let content;
|
|
842
|
+
flag = false;
|
|
843
|
+
// 无论是否执行成功都要释放锁
|
|
832
844
|
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
|
-
}
|
|
845
|
+
// 第一次订阅判断
|
|
846
|
+
if (firstSubscription) {
|
|
847
|
+
// 设置第一次的时间点
|
|
848
|
+
timePoint = ctx.ba.getTimeOfUTC8();
|
|
849
|
+
// 设置第一次为false
|
|
850
|
+
firstSubscription = false;
|
|
851
|
+
return;
|
|
878
852
|
}
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
853
|
+
// 获取用户空间动态数据
|
|
854
|
+
let content;
|
|
855
|
+
try {
|
|
856
|
+
content = await ctx.ba.getUserSpaceDynamic(uid);
|
|
857
|
+
}
|
|
858
|
+
catch (e) {
|
|
859
|
+
return this.logger.error('dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:' + e.message);
|
|
860
|
+
}
|
|
861
|
+
// 判断是否出现其他问题
|
|
862
|
+
if (content.code !== 0) {
|
|
863
|
+
switch (content.code) {
|
|
864
|
+
case -101: { // 账号未登录
|
|
865
|
+
// 输出日志
|
|
866
|
+
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
867
|
+
// 发送私聊消息
|
|
868
|
+
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
869
|
+
// 停止服务
|
|
870
|
+
await ctx.sm.disposePlugin();
|
|
871
|
+
// 结束循环
|
|
872
|
+
break;
|
|
873
|
+
}
|
|
874
|
+
case -352: { // 风控
|
|
875
|
+
// 输出日志
|
|
876
|
+
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
877
|
+
// 发送私聊消息
|
|
878
|
+
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
879
|
+
// 停止服务
|
|
880
|
+
await ctx.sm.disposePlugin();
|
|
881
|
+
// 结束循环
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
884
|
+
case 4101128:
|
|
885
|
+
case 4101129: { // 获取动态信息错误
|
|
886
|
+
// 输出日志
|
|
887
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
888
|
+
// 发送私聊消息
|
|
889
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
890
|
+
// 结束循环
|
|
891
|
+
break;
|
|
892
|
+
}
|
|
893
|
+
default: { // 未知错误
|
|
894
|
+
// 发送私聊消息
|
|
895
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
896
|
+
// 取消订阅
|
|
897
|
+
this.unsubAll(ctx, bot, uid);
|
|
898
|
+
// 结束循环
|
|
899
|
+
break;
|
|
888
900
|
}
|
|
889
|
-
break;
|
|
890
901
|
}
|
|
891
|
-
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
892
902
|
}
|
|
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
|
-
// 成功则跳出循环
|
|
903
|
+
// 获取数据内容
|
|
904
|
+
const items = content.data.items;
|
|
905
|
+
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
906
|
+
const updatePoint = (num) => {
|
|
907
|
+
switch (num) {
|
|
908
|
+
case 1: {
|
|
909
|
+
if (items[0].modules.module_tag) { // 存在置顶动态
|
|
910
|
+
timePoint = items[num].modules.module_author.pub_ts;
|
|
911
|
+
}
|
|
918
912
|
break;
|
|
919
913
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
914
|
+
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
915
|
+
}
|
|
916
|
+
};
|
|
917
|
+
// 发送请求 默认只查看配置文件规定数量的数据
|
|
918
|
+
for (let num = this.config.dynamicCheckNumber - 1; num >= 0; num--) {
|
|
919
|
+
// 没有动态内容则直接跳过
|
|
920
|
+
if (!items[num])
|
|
921
|
+
continue;
|
|
922
|
+
// 寻找发布时间比时间点更晚的动态
|
|
923
|
+
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
924
|
+
// 定义变量
|
|
925
|
+
let pic;
|
|
926
|
+
let buffer;
|
|
927
|
+
// 从动态数据中取出UP主名称和动态ID
|
|
928
|
+
const upName = content.data.items[num].modules.module_author.name;
|
|
929
|
+
const dynamicId = content.data.items[num].id_str;
|
|
930
|
+
// 推送该条动态
|
|
931
|
+
const attempts = 3;
|
|
932
|
+
for (let i = 0; i < attempts; i++) {
|
|
933
|
+
// 获取动态推送图片
|
|
934
|
+
try {
|
|
935
|
+
// 渲染图片
|
|
936
|
+
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
937
|
+
// 赋值
|
|
938
|
+
pic = gimgPic;
|
|
939
|
+
buffer = gimgBuffer;
|
|
940
|
+
// 成功则跳出循环
|
|
941
|
+
break;
|
|
932
942
|
}
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
943
|
+
catch (e) {
|
|
944
|
+
// 直播开播动态,不做处理
|
|
945
|
+
if (e.message === '直播开播动态,不做处理')
|
|
946
|
+
return updatePoint(num);
|
|
947
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
948
|
+
// 如果需要发送才发送
|
|
949
|
+
this.config.filter.notify && await this.sendMsg(guildId, bot, `${upName}发布了一条含有屏蔽关键字的动态`);
|
|
950
|
+
return updatePoint(num);
|
|
951
|
+
}
|
|
952
|
+
if (e.message === '已屏蔽转发动态') {
|
|
953
|
+
this.config.filter.notify && await this.sendMsg(guildId, bot, `${upName}发布了一条转发动态,已屏蔽`);
|
|
954
|
+
return updatePoint(num);
|
|
955
|
+
}
|
|
956
|
+
// 未知错误
|
|
957
|
+
if (i === attempts - 1) {
|
|
958
|
+
this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
|
|
959
|
+
// 发送私聊消息并重启服务
|
|
960
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
961
|
+
}
|
|
938
962
|
}
|
|
939
963
|
}
|
|
964
|
+
// 判断是否需要发送URL
|
|
965
|
+
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
966
|
+
// 如果pic存在,则直接返回pic
|
|
967
|
+
if (pic) {
|
|
968
|
+
this.logger.info('推送动态中,使用render模式');
|
|
969
|
+
// pic存在,使用的是render模式
|
|
970
|
+
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
971
|
+
}
|
|
972
|
+
else if (buffer) {
|
|
973
|
+
this.logger.info('推送动态中,使用page模式');
|
|
974
|
+
// pic不存在,说明使用的是page模式
|
|
975
|
+
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
976
|
+
}
|
|
977
|
+
else {
|
|
978
|
+
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
979
|
+
}
|
|
980
|
+
// 更新时间点
|
|
981
|
+
updatePoint(num);
|
|
940
982
|
}
|
|
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
983
|
}
|
|
960
984
|
}
|
|
985
|
+
finally {
|
|
986
|
+
flag = true;
|
|
987
|
+
}
|
|
961
988
|
};
|
|
962
989
|
}
|
|
963
990
|
debug_dynamicDetect(ctx, bot, uid, guildId) {
|
|
964
991
|
let firstSubscription = true;
|
|
965
992
|
let timePoint;
|
|
993
|
+
// 相当于锁的作用,防止上一个循环没处理完
|
|
994
|
+
let flag = true;
|
|
966
995
|
return async () => {
|
|
967
|
-
//
|
|
968
|
-
if (
|
|
969
|
-
this.logger.info(`UID:${uid}-动态监测开始`);
|
|
970
|
-
// 设置第一次的时间点
|
|
971
|
-
timePoint = ctx.ba.getTimeOfUTC8();
|
|
972
|
-
// 设置第一次为false
|
|
973
|
-
firstSubscription = false;
|
|
996
|
+
// 判断上一个循环是否完成
|
|
997
|
+
if (!flag)
|
|
974
998
|
return;
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
// 获取用户空间动态数据
|
|
978
|
-
let content;
|
|
999
|
+
flag = false;
|
|
1000
|
+
// 无论是否执行成功都要释放锁
|
|
979
1001
|
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
|
-
}
|
|
1002
|
+
// 第一次订阅判断
|
|
1003
|
+
if (firstSubscription) {
|
|
1004
|
+
this.logger.info(`UID:${uid}-动态监测开始`);
|
|
1005
|
+
// 设置第一次的时间点
|
|
1006
|
+
timePoint = ctx.ba.getTimeOfUTC8();
|
|
1007
|
+
// 设置第一次为false
|
|
1008
|
+
firstSubscription = false;
|
|
1009
|
+
return;
|
|
1026
1010
|
}
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1011
|
+
this.logger.info(`UID:${uid}-获取动态信息中`);
|
|
1012
|
+
// 获取用户空间动态数据
|
|
1013
|
+
let content;
|
|
1014
|
+
try {
|
|
1015
|
+
content = await ctx.ba.getUserSpaceDynamic(uid);
|
|
1016
|
+
}
|
|
1017
|
+
catch (e) {
|
|
1018
|
+
return this.logger.error(`UID:${uid}-dynamicDetect getUserSpaceDynamic() 发生了错误,错误为:${e.message}`);
|
|
1019
|
+
}
|
|
1020
|
+
this.logger.info(`UID:${uid}-判断动态信息是否正确`);
|
|
1021
|
+
// 判断是否出现其他问题
|
|
1022
|
+
if (content.code !== 0) {
|
|
1023
|
+
switch (content.code) {
|
|
1024
|
+
case -101: { // 账号未登录
|
|
1025
|
+
// 输出日志
|
|
1026
|
+
this.logger.error('账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
1027
|
+
// 发送私聊消息
|
|
1028
|
+
await this.sendPrivateMsg(bot, '账号未登录,插件已停止工作,请登录后,输入指令 sys start 启动插件');
|
|
1029
|
+
// 停止服务
|
|
1030
|
+
await ctx.sm.disposePlugin();
|
|
1031
|
+
// 结束循环
|
|
1032
|
+
break;
|
|
1033
|
+
}
|
|
1034
|
+
case -352: { // 风控
|
|
1035
|
+
// 输出日志
|
|
1036
|
+
this.logger.error('账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1037
|
+
// 发送私聊消息
|
|
1038
|
+
await this.sendPrivateMsg(bot, '账号被风控,插件已停止工作,请确认风控解除后,输入指令 sys start 启动插件');
|
|
1039
|
+
// 停止服务
|
|
1040
|
+
await ctx.sm.disposePlugin();
|
|
1041
|
+
// 结束循环
|
|
1042
|
+
break;
|
|
1043
|
+
}
|
|
1044
|
+
case 4101128:
|
|
1045
|
+
case 4101129: { // 获取动态信息错误
|
|
1046
|
+
// 输出日志
|
|
1047
|
+
this.logger.error('获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message);
|
|
1048
|
+
// 发送私聊消息
|
|
1049
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1050
|
+
// 结束循环
|
|
1051
|
+
break;
|
|
1052
|
+
}
|
|
1053
|
+
default: { // 未知错误
|
|
1054
|
+
// 发送私聊消息
|
|
1055
|
+
await this.sendPrivateMsg(bot, '获取动态信息错误,错误码为:' + content.code + ',错误为:' + content.message); // 未知错误
|
|
1056
|
+
// 取消订阅
|
|
1057
|
+
this.unsubAll(ctx, bot, uid);
|
|
1058
|
+
// 结束循环
|
|
1059
|
+
break;
|
|
1037
1060
|
}
|
|
1038
|
-
break;
|
|
1039
1061
|
}
|
|
1040
|
-
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
1041
1062
|
}
|
|
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
|
-
// 成功则跳出循环
|
|
1063
|
+
// 获取数据内容
|
|
1064
|
+
const items = content.data.items;
|
|
1065
|
+
this.logger.info(`UID:${uid}-获取到的动态信息:${items.map(v => v.basic.rid_str).join('、')}`);
|
|
1066
|
+
// 定义方法:更新时间点为最新发布动态的发布时间
|
|
1067
|
+
const updatePoint = (num) => {
|
|
1068
|
+
switch (num) {
|
|
1069
|
+
case 1: {
|
|
1070
|
+
if (items[0].modules.module_tag) { // 存在置顶动态
|
|
1071
|
+
timePoint = items[num].modules.module_author.pub_ts;
|
|
1072
|
+
}
|
|
1069
1073
|
break;
|
|
1070
1074
|
}
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1075
|
+
case 0: timePoint = items[num].modules.module_author.pub_ts;
|
|
1076
|
+
}
|
|
1077
|
+
};
|
|
1078
|
+
// 发送请求 默认只查看配置文件规定数量的数据
|
|
1079
|
+
for (let num = this.config.dynamicCheckNumber - 1; num >= 0; num--) {
|
|
1080
|
+
// 没有动态内容则直接跳过
|
|
1081
|
+
if (!items[num])
|
|
1082
|
+
continue;
|
|
1083
|
+
// 寻找发布时间比时间点更晚的动态
|
|
1084
|
+
if (items[num].modules.module_author.pub_ts > timePoint) {
|
|
1085
|
+
this.logger.info(`UID:${uid}-即将推送的动态:${items[num].basic.rid_str}`);
|
|
1086
|
+
// 定义变量
|
|
1087
|
+
let pic;
|
|
1088
|
+
let buffer;
|
|
1089
|
+
// 从动态数据中取出UP主名称和动态ID
|
|
1090
|
+
const upName = content.data.items[num].modules.module_author.name;
|
|
1091
|
+
const dynamicId = content.data.items[num].id_str;
|
|
1092
|
+
// 推送该条动态
|
|
1093
|
+
const attempts = 3;
|
|
1094
|
+
this.logger.info(`UID:${uid}-尝试渲染推送图片`);
|
|
1095
|
+
for (let i = 0; i < attempts; i++) {
|
|
1096
|
+
// 获取动态推送图片
|
|
1097
|
+
try {
|
|
1098
|
+
// 渲染图片
|
|
1099
|
+
const { pic: gimgPic, buffer: gimgBuffer } = await ctx.gi.generateDynamicImg(items[num]);
|
|
1100
|
+
// 赋值
|
|
1101
|
+
pic = gimgPic;
|
|
1102
|
+
buffer = gimgBuffer;
|
|
1103
|
+
// 成功则跳出循环
|
|
1104
|
+
break;
|
|
1083
1105
|
}
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1106
|
+
catch (e) {
|
|
1107
|
+
// 直播开播动态,不做处理
|
|
1108
|
+
if (e.message === '直播开播动态,不做处理')
|
|
1109
|
+
return updatePoint(num);
|
|
1110
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
1111
|
+
// 如果需要发送才发送
|
|
1112
|
+
this.config.filter.notify && await this.sendMsg(guildId, bot, `${upName}发布了一条含有屏蔽关键字的动态`);
|
|
1113
|
+
return updatePoint(num);
|
|
1114
|
+
}
|
|
1115
|
+
if (e.message === '已屏蔽转发动态') {
|
|
1116
|
+
this.config.filter.notify && await this.sendMsg(guildId, bot, `${upName}发布了一条转发动态,已屏蔽`);
|
|
1117
|
+
return updatePoint(num);
|
|
1118
|
+
}
|
|
1119
|
+
// 未知错误
|
|
1120
|
+
if (i === attempts - 1) {
|
|
1121
|
+
this.logger.error('dynamicDetect generateDynamicImg() 推送卡片发送失败,原因:' + e.message);
|
|
1122
|
+
// 发送私聊消息并重启服务
|
|
1123
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1124
|
+
}
|
|
1089
1125
|
}
|
|
1090
1126
|
}
|
|
1127
|
+
this.logger.info(`UID:${uid}-尝试推送动态卡片`);
|
|
1128
|
+
// 判断是否需要发送URL
|
|
1129
|
+
const dUrl = this.config.dynamicUrl ? `${upName}发布了一条动态:https://t.bilibili.com/${dynamicId}` : '';
|
|
1130
|
+
// 如果pic存在,则直接返回pic
|
|
1131
|
+
if (pic) {
|
|
1132
|
+
this.logger.info(`UID:${uid}-推送动态中,使用render模式`);
|
|
1133
|
+
// pic存在,使用的是render模式
|
|
1134
|
+
await this.sendMsg(guildId, bot, pic + (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: dUrl }));
|
|
1135
|
+
}
|
|
1136
|
+
else if (buffer) {
|
|
1137
|
+
this.logger.info(`UID:${uid}-推送动态中,使用page模式`);
|
|
1138
|
+
// pic不存在,说明使用的是page模式
|
|
1139
|
+
await this.sendMsg(guildId, bot, (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [koishi_1.h.image(buffer, 'image/png'), dUrl] }));
|
|
1140
|
+
}
|
|
1141
|
+
else {
|
|
1142
|
+
this.logger.info(items[num].modules.module_author.name + '发布了一条动态,但是推送失败');
|
|
1143
|
+
}
|
|
1144
|
+
// 更新时间点
|
|
1145
|
+
updatePoint(num);
|
|
1146
|
+
this.logger.info(`UID:${uid}-推送动态完成`);
|
|
1091
1147
|
}
|
|
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
1148
|
}
|
|
1113
1149
|
}
|
|
1150
|
+
finally {
|
|
1151
|
+
flag = true;
|
|
1152
|
+
}
|
|
1114
1153
|
};
|
|
1115
1154
|
}
|
|
1116
1155
|
liveDetect(ctx, bot, roomId, guildId) {
|
|
@@ -1145,7 +1184,8 @@ class ComRegister {
|
|
|
1145
1184
|
catch (e) {
|
|
1146
1185
|
if (i === attempts - 1) { // 已尝试三次
|
|
1147
1186
|
this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.message);
|
|
1148
|
-
|
|
1187
|
+
// 发送私聊消息并重启服务
|
|
1188
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1149
1189
|
}
|
|
1150
1190
|
}
|
|
1151
1191
|
}
|
|
@@ -1180,7 +1220,8 @@ class ComRegister {
|
|
|
1180
1220
|
catch (e) {
|
|
1181
1221
|
if (i === attempts - 1) { // 已尝试三次
|
|
1182
1222
|
this.logger.error('liveDetect generateLiveImg() 推送卡片生成失败,原因:' + e.message);
|
|
1183
|
-
|
|
1223
|
+
// 发送私聊消息并重启服务
|
|
1224
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1184
1225
|
}
|
|
1185
1226
|
}
|
|
1186
1227
|
}
|
|
@@ -1212,11 +1253,12 @@ class ComRegister {
|
|
|
1212
1253
|
};
|
|
1213
1254
|
}
|
|
1214
1255
|
return async () => {
|
|
1256
|
+
// 如果flag为false则说明前面的代码还未执行完,则直接返回
|
|
1257
|
+
if (!flag)
|
|
1258
|
+
return;
|
|
1259
|
+
flag = false;
|
|
1260
|
+
// 无论是否执行成功都要释放锁
|
|
1215
1261
|
try {
|
|
1216
|
-
// 如果flag为false则说明前面的代码还未执行完,则直接返回
|
|
1217
|
-
if (!flag)
|
|
1218
|
-
return;
|
|
1219
|
-
flag = false;
|
|
1220
1262
|
// 发送请求检测直播状态
|
|
1221
1263
|
let content;
|
|
1222
1264
|
const attempts = 3;
|
|
@@ -1230,7 +1272,8 @@ class ComRegister {
|
|
|
1230
1272
|
catch (e) {
|
|
1231
1273
|
this.logger.error('liveDetect getLiveRoomInfo 发生了错误,错误为:' + e.message);
|
|
1232
1274
|
if (i === attempts - 1) { // 已尝试三次
|
|
1233
|
-
|
|
1275
|
+
// 发送私聊消息并重启服务
|
|
1276
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1234
1277
|
}
|
|
1235
1278
|
}
|
|
1236
1279
|
}
|
|
@@ -1250,7 +1293,8 @@ class ComRegister {
|
|
|
1250
1293
|
catch (e) {
|
|
1251
1294
|
this.logger.error('liveDetect getMasterInfo() 发生了错误,错误为:' + e.message);
|
|
1252
1295
|
if (i === attempts - 1) { // 已尝试三次
|
|
1253
|
-
|
|
1296
|
+
// 发送私聊消息并重启服务
|
|
1297
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1254
1298
|
}
|
|
1255
1299
|
}
|
|
1256
1300
|
}
|
|
@@ -1317,7 +1361,8 @@ class ComRegister {
|
|
|
1317
1361
|
catch (e) {
|
|
1318
1362
|
this.logger.error('liveDetect open getMasterInfo() 发生了错误,错误为:' + e.message);
|
|
1319
1363
|
if (i === attempts - 1) { // 已尝试三次
|
|
1320
|
-
|
|
1364
|
+
// 发送私聊消息并重启服务
|
|
1365
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1321
1366
|
}
|
|
1322
1367
|
}
|
|
1323
1368
|
}
|
|
@@ -1525,7 +1570,8 @@ class ComRegister {
|
|
|
1525
1570
|
catch (e) {
|
|
1526
1571
|
this.logger.error('getSubFromDatabase() getUserInfo() 发生了错误,错误为:' + e.message);
|
|
1527
1572
|
if (i === attempts - 1) { // 已尝试三次
|
|
1528
|
-
|
|
1573
|
+
// 发送私聊消息并重启服务
|
|
1574
|
+
return await this.sendPrivateMsgAndRebootService(ctx, bot);
|
|
1529
1575
|
}
|
|
1530
1576
|
}
|
|
1531
1577
|
}
|
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
|
@@ -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