koishi-plugin-bilibili-notify 3.0.1-alpha.1 → 3.0.1-alpha.2
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 +1 -1
- package/lib/comRegister.js +188 -92
- package/package.json +1 -1
- package/readme.md +1 -0
package/lib/comRegister.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ declare class ComRegister {
|
|
|
35
35
|
updateSubNotifier(): void;
|
|
36
36
|
checkIfLoginInfoIsLoaded(): Promise<unknown>;
|
|
37
37
|
subUserInBili(mid: string): Promise<{
|
|
38
|
-
|
|
38
|
+
code: number;
|
|
39
39
|
msg: string;
|
|
40
40
|
}>;
|
|
41
41
|
loadSubFromConfig(subs: ComRegister.Config["sub"]): Promise<void>;
|
package/lib/comRegister.js
CHANGED
|
@@ -1185,135 +1185,231 @@ class ComRegister {
|
|
|
1185
1185
|
}
|
|
1186
1186
|
}
|
|
1187
1187
|
else if (createGroupData.code !== 0) {
|
|
1188
|
-
console.log(createGroupData);
|
|
1189
1188
|
// 创建分组失败
|
|
1190
|
-
return
|
|
1189
|
+
return { code: createGroupData.code, msg: createGroupData.message };
|
|
1191
1190
|
}
|
|
1192
1191
|
// 创建成功,保存到数据库
|
|
1193
1192
|
this.ctx.database.set("loginBili", 1, {
|
|
1194
1193
|
dynamic_group_id: this.loginDBData.dynamic_group_id,
|
|
1195
1194
|
});
|
|
1196
1195
|
// 创建成功
|
|
1197
|
-
return
|
|
1196
|
+
return { code: createGroupData.code, msg: createGroupData.message };
|
|
1198
1197
|
}
|
|
1199
|
-
return
|
|
1198
|
+
return { code: 0, msg: "分组已存在" };
|
|
1200
1199
|
};
|
|
1201
1200
|
// 判断分组是否准备好
|
|
1202
|
-
const
|
|
1201
|
+
const resp = await checkGroupIsReady();
|
|
1203
1202
|
// 判断是否创建成功
|
|
1204
|
-
if (
|
|
1203
|
+
if (resp.code !== 0) {
|
|
1205
1204
|
// 创建分组失败
|
|
1206
|
-
return
|
|
1205
|
+
return resp;
|
|
1207
1206
|
}
|
|
1208
|
-
//
|
|
1209
|
-
const
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
//
|
|
1220
|
-
|
|
1207
|
+
// 获取分组详情
|
|
1208
|
+
const getGroupDetailData = async () => {
|
|
1209
|
+
// 获取分组明细
|
|
1210
|
+
const relationGroupDetailData = await this.ctx.ba.getRelationGroupDetail(this.loginDBData.dynamic_group_id);
|
|
1211
|
+
// 判断分组信息是否获取成功
|
|
1212
|
+
if (relationGroupDetailData.code !== 0) {
|
|
1213
|
+
if (relationGroupDetailData.code === 22104) {
|
|
1214
|
+
// 将原先的分组id置空
|
|
1215
|
+
this.loginDBData.dynamic_group_id = null;
|
|
1216
|
+
// 分组不存在
|
|
1217
|
+
const resp = await checkGroupIsReady();
|
|
1218
|
+
// 判断是否创建成功
|
|
1219
|
+
if (resp.code !== 0) {
|
|
1220
|
+
// 创建分组失败
|
|
1221
|
+
return { ...resp, data: undefined };
|
|
1222
|
+
}
|
|
1223
|
+
// 再次获取分组明细
|
|
1224
|
+
return getGroupDetailData();
|
|
1221
1225
|
}
|
|
1222
|
-
|
|
1226
|
+
// 获取分组明细失败
|
|
1227
|
+
return {
|
|
1228
|
+
code: relationGroupDetailData.code,
|
|
1229
|
+
msg: relationGroupDetailData.message,
|
|
1230
|
+
data: undefined,
|
|
1231
|
+
};
|
|
1223
1232
|
}
|
|
1224
|
-
|
|
1225
|
-
|
|
1233
|
+
return {
|
|
1234
|
+
code: 0,
|
|
1235
|
+
msg: "获取分组明细成功",
|
|
1236
|
+
data: relationGroupDetailData.data,
|
|
1237
|
+
};
|
|
1238
|
+
};
|
|
1239
|
+
// 获取分组明细
|
|
1240
|
+
const { code, msg, data } = await getGroupDetailData();
|
|
1241
|
+
// 判断获取分组明细是否成功
|
|
1242
|
+
if (code !== 0) {
|
|
1243
|
+
return { code, msg };
|
|
1226
1244
|
}
|
|
1227
|
-
|
|
1245
|
+
// 判断是否已经订阅该对象
|
|
1246
|
+
for (const user of data) {
|
|
1228
1247
|
if (user.mid === mid) {
|
|
1229
1248
|
// 已关注订阅对象
|
|
1230
|
-
return {
|
|
1249
|
+
return { code: 0, msg: "订阅对象已存在于分组中" };
|
|
1231
1250
|
}
|
|
1232
1251
|
}
|
|
1233
1252
|
// 订阅对象
|
|
1234
|
-
const subUserData = await this.ctx.ba.follow(mid);
|
|
1235
|
-
//
|
|
1236
|
-
|
|
1237
|
-
|
|
1253
|
+
const subUserData = (await this.ctx.ba.follow(mid));
|
|
1254
|
+
// 模式匹配
|
|
1255
|
+
const subUserMatchPattern = {
|
|
1256
|
+
[-101]: () => {
|
|
1238
1257
|
return {
|
|
1239
|
-
|
|
1258
|
+
code: subUserData.code,
|
|
1240
1259
|
msg: "账号未登录,请使用指令bili login登录后再进行订阅操作",
|
|
1241
1260
|
};
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
case 22002:
|
|
1245
|
-
return { flag: false, msg: "因对方隐私设置,无法进行订阅操作" };
|
|
1246
|
-
case 22003:
|
|
1247
|
-
return { flag: false, msg: "你已将对方拉黑,无法进行订阅操作" };
|
|
1248
|
-
case 22013:
|
|
1249
|
-
return { flag: false, msg: "账号已注销,无法进行订阅操作" };
|
|
1250
|
-
case 40061:
|
|
1261
|
+
},
|
|
1262
|
+
[-102]: () => {
|
|
1251
1263
|
return {
|
|
1252
|
-
|
|
1264
|
+
code: subUserData.code,
|
|
1265
|
+
msg: "账号被封停,无法进行订阅操作",
|
|
1266
|
+
};
|
|
1267
|
+
},
|
|
1268
|
+
[22002]: () => {
|
|
1269
|
+
return {
|
|
1270
|
+
code: subUserData.code,
|
|
1271
|
+
msg: "因对方隐私设置,无法进行订阅操作",
|
|
1272
|
+
};
|
|
1273
|
+
},
|
|
1274
|
+
[22003]: () => {
|
|
1275
|
+
return {
|
|
1276
|
+
code: subUserData.code,
|
|
1277
|
+
msg: "你已将对方拉黑,无法进行订阅操作",
|
|
1278
|
+
};
|
|
1279
|
+
},
|
|
1280
|
+
[22013]: () => {
|
|
1281
|
+
return {
|
|
1282
|
+
code: subUserData.code,
|
|
1283
|
+
msg: "账号已注销,无法进行订阅操作",
|
|
1284
|
+
};
|
|
1285
|
+
},
|
|
1286
|
+
[40061]: () => {
|
|
1287
|
+
return {
|
|
1288
|
+
code: subUserData.code,
|
|
1253
1289
|
msg: "账号不存在,请检查uid输入是否正确或用户是否存在",
|
|
1254
1290
|
};
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1291
|
+
},
|
|
1292
|
+
[22001]: () => {
|
|
1293
|
+
return {
|
|
1294
|
+
code: 0,
|
|
1295
|
+
msg: "订阅对象为自己,无需添加到分组",
|
|
1296
|
+
};
|
|
1297
|
+
},
|
|
1298
|
+
// 已订阅该对象
|
|
1299
|
+
[22014]: async () => {
|
|
1260
1300
|
// 把订阅对象添加到分组中
|
|
1261
1301
|
const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
|
|
1262
1302
|
// 判断是否添加成功
|
|
1263
1303
|
if (copyUserToGroupData.code !== 0) {
|
|
1264
1304
|
// 添加失败
|
|
1265
|
-
return {
|
|
1305
|
+
return {
|
|
1306
|
+
code: copyUserToGroupData.code,
|
|
1307
|
+
msg: "添加订阅对象到分组失败,请稍后重试",
|
|
1308
|
+
};
|
|
1266
1309
|
}
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1310
|
+
// 添加成功
|
|
1311
|
+
return { code: 0, msg: "订阅对象添加成功" };
|
|
1312
|
+
},
|
|
1313
|
+
// 订阅成功
|
|
1314
|
+
[0]: async () => {
|
|
1315
|
+
// 把订阅对象添加到分组中
|
|
1316
|
+
const copyUserToGroupData = await this.ctx.ba.copyUserToGroup(mid, this.loginDBData.dynamic_group_id);
|
|
1317
|
+
// 判断是否添加成功
|
|
1318
|
+
if (copyUserToGroupData.code !== 0) {
|
|
1319
|
+
// 添加失败
|
|
1320
|
+
return {
|
|
1321
|
+
code: copyUserToGroupData.code,
|
|
1322
|
+
msg: "添加订阅对象到分组失败,请稍后重试",
|
|
1323
|
+
};
|
|
1324
|
+
}
|
|
1325
|
+
// 添加成功
|
|
1326
|
+
return { code: 0, msg: "订阅对象添加成功" };
|
|
1327
|
+
},
|
|
1328
|
+
};
|
|
1329
|
+
// 获取函数
|
|
1330
|
+
const func = subUserMatchPattern[subUserData.code];
|
|
1331
|
+
// 执行函数并返回
|
|
1332
|
+
return await func();
|
|
1271
1333
|
}
|
|
1272
1334
|
async loadSubFromConfig(subs) {
|
|
1335
|
+
// 定义一个AbortController
|
|
1336
|
+
const controller = new AbortController();
|
|
1337
|
+
const { signal } = controller;
|
|
1338
|
+
// 设置超时
|
|
1339
|
+
signal.addEventListener("abort", () => {
|
|
1340
|
+
this.logger.info(`${signal.reason},订阅未完全加载!`);
|
|
1341
|
+
});
|
|
1273
1342
|
await Promise.all(subs.map(async (sub) => {
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
// 判断是否需要订阅直播
|
|
1285
|
-
if (sub.live) {
|
|
1286
|
-
// 检查roomid是否存在
|
|
1287
|
-
if (!data.live_room) {
|
|
1288
|
-
// 用户没有开通直播间,无法订阅直播
|
|
1289
|
-
sub.live = false;
|
|
1290
|
-
// 发送提示
|
|
1291
|
-
this.logger.warn(`UID:${sub.uid} 用户没有开通直播间,无法订阅直播!`);
|
|
1292
|
-
}
|
|
1293
|
-
// 判断是否订阅直播
|
|
1294
|
-
if (sub.live) {
|
|
1295
|
-
// 启动直播监测
|
|
1296
|
-
await this.liveDetectWithListener(data.live_room.roomid, sub.target, sub.card);
|
|
1297
|
-
}
|
|
1298
|
-
}
|
|
1299
|
-
// 在B站中订阅该对象
|
|
1300
|
-
const subInfo = await this.subUserInBili(sub.uid);
|
|
1301
|
-
// 判断订阅是否成功
|
|
1302
|
-
if (!subInfo.flag)
|
|
1303
|
-
this.logger.warn(subInfo.msg);
|
|
1304
|
-
// 将该订阅添加到sm中
|
|
1305
|
-
this.subManager.push({
|
|
1306
|
-
id: +sub.uid,
|
|
1307
|
-
uid: sub.uid,
|
|
1308
|
-
uname: data.name,
|
|
1309
|
-
roomId: sub.live ? data.live_room.roomid : "",
|
|
1310
|
-
target: sub.target,
|
|
1311
|
-
platform: "",
|
|
1312
|
-
live: sub.live,
|
|
1313
|
-
dynamic: sub.dynamic,
|
|
1314
|
-
card: sub.card,
|
|
1343
|
+
let timer;
|
|
1344
|
+
// 创建一个定时器
|
|
1345
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
1346
|
+
timer = this.ctx.setTimeout(() => {
|
|
1347
|
+
// 取消订阅加载
|
|
1348
|
+
if (signal.aborted)
|
|
1349
|
+
return;
|
|
1350
|
+
// 终止
|
|
1351
|
+
controller.abort(`加载订阅UID:${sub.uid}超时`);
|
|
1352
|
+
}, 10 * 1000);
|
|
1315
1353
|
});
|
|
1316
|
-
|
|
1354
|
+
await Promise.race([
|
|
1355
|
+
(async () => {
|
|
1356
|
+
// logger
|
|
1357
|
+
this.logger.info(`加载订阅UID:${sub.uid}中...`);
|
|
1358
|
+
// 定义Data
|
|
1359
|
+
const data = await (0, utils_1.withRetry)(async () => await this.ctx.ba.getUserInfo(sub.uid))
|
|
1360
|
+
.then((content) => content.data)
|
|
1361
|
+
.catch((e) => {
|
|
1362
|
+
this.logger.error(`loadSubFromConfig() getUserInfo() 发生了错误,错误为:${e.message}`);
|
|
1363
|
+
// logger
|
|
1364
|
+
this.logger.info(`加载订阅UID:${sub.uid}失败!`);
|
|
1365
|
+
});
|
|
1366
|
+
// 判断是否需要订阅直播
|
|
1367
|
+
if (sub.live) {
|
|
1368
|
+
// 检查roomid是否存在
|
|
1369
|
+
if (!data.live_room) {
|
|
1370
|
+
// 用户没有开通直播间,无法订阅直播
|
|
1371
|
+
sub.live = false;
|
|
1372
|
+
// 发送提示
|
|
1373
|
+
this.logger.warn(`UID:${sub.uid} 用户没有开通直播间,无法订阅直播!`);
|
|
1374
|
+
}
|
|
1375
|
+
// 判断是否订阅直播
|
|
1376
|
+
if (sub.live) {
|
|
1377
|
+
// 启动直播监测
|
|
1378
|
+
await this.liveDetectWithListener(data.live_room.roomid, sub.target, sub.card);
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
// 在B站中订阅该对象
|
|
1382
|
+
const subInfo = await this.subUserInBili(sub.uid);
|
|
1383
|
+
// 判断订阅是否成功
|
|
1384
|
+
if (subInfo.code !== 0) {
|
|
1385
|
+
// 订阅失败,直接返回
|
|
1386
|
+
this.logger.error(`UID:${sub.uid} 订阅失败,错误信息:${subInfo.msg}`);
|
|
1387
|
+
return;
|
|
1388
|
+
}
|
|
1389
|
+
// 判断是否超时
|
|
1390
|
+
if (signal.aborted) {
|
|
1391
|
+
// 订阅加载超时,取消订阅加载
|
|
1392
|
+
return;
|
|
1393
|
+
}
|
|
1394
|
+
// 将该订阅添加到sm中
|
|
1395
|
+
this.subManager.push({
|
|
1396
|
+
id: +sub.uid,
|
|
1397
|
+
uid: sub.uid,
|
|
1398
|
+
uname: data.name,
|
|
1399
|
+
roomId: sub.live ? data.live_room.roomid : "",
|
|
1400
|
+
target: sub.target,
|
|
1401
|
+
platform: "",
|
|
1402
|
+
live: sub.live,
|
|
1403
|
+
dynamic: sub.dynamic,
|
|
1404
|
+
card: sub.card,
|
|
1405
|
+
});
|
|
1406
|
+
// 清除定时器
|
|
1407
|
+
timer();
|
|
1408
|
+
// logger
|
|
1409
|
+
this.logger.info(`UID:${sub.uid}订阅加载完毕!`);
|
|
1410
|
+
})(),
|
|
1411
|
+
timeoutPromise,
|
|
1412
|
+
]);
|
|
1317
1413
|
}));
|
|
1318
1414
|
}
|
|
1319
1415
|
checkIfDynamicDetectIsNeeded() {
|
package/package.json
CHANGED