koishi-plugin-bilibili-notify 3.0.0-alpha.15 → 3.0.0-alpha.17
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 +4 -43
- package/lib/comRegister.js +204 -834
- package/lib/database.d.ts +0 -11
- package/lib/database.js +0 -11
- package/lib/generateImg.d.ts +2 -1
- package/lib/generateImg.js +31 -26
- package/lib/index.d.ts +1 -1
- package/lib/index.js +18 -22
- package/lib/type/index.d.ts +37 -0
- package/lib/type/index.js +11 -0
- package/package.json +1 -1
- package/readme.md +4 -34
package/lib/database.d.ts
CHANGED
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
import type { Context } from "koishi";
|
|
2
2
|
declare module "koishi" {
|
|
3
3
|
interface Tables {
|
|
4
|
-
bilibili: Bilibili;
|
|
5
4
|
loginBili: LoginBili;
|
|
6
5
|
}
|
|
7
6
|
}
|
|
8
|
-
export interface Bilibili {
|
|
9
|
-
id: number;
|
|
10
|
-
uid: string;
|
|
11
|
-
room_id: string;
|
|
12
|
-
dynamic: number;
|
|
13
|
-
live: number;
|
|
14
|
-
target: string;
|
|
15
|
-
platform: string;
|
|
16
|
-
time: Date;
|
|
17
|
-
}
|
|
18
7
|
export interface LoginBili {
|
|
19
8
|
id: number;
|
|
20
9
|
bili_cookies: string;
|
package/lib/database.js
CHANGED
|
@@ -4,17 +4,6 @@ exports.name = void 0;
|
|
|
4
4
|
exports.apply = apply;
|
|
5
5
|
exports.name = "Database";
|
|
6
6
|
function apply(ctx) {
|
|
7
|
-
// 新增Bilibili表
|
|
8
|
-
ctx.model.extend("bilibili", {
|
|
9
|
-
id: "unsigned",
|
|
10
|
-
uid: "string",
|
|
11
|
-
room_id: "string",
|
|
12
|
-
dynamic: "unsigned",
|
|
13
|
-
live: "unsigned",
|
|
14
|
-
target: "string",
|
|
15
|
-
platform: "string",
|
|
16
|
-
time: "timestamp",
|
|
17
|
-
}, { autoInc: true });
|
|
18
7
|
// 新增LoginBili表
|
|
19
8
|
ctx.model.extend("loginBili", {
|
|
20
9
|
id: "unsigned",
|
package/lib/generateImg.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ declare class GenerateImg extends Service {
|
|
|
8
8
|
static inject: string[];
|
|
9
9
|
giConfig: GenerateImg.Config;
|
|
10
10
|
constructor(ctx: Context, config: GenerateImg.Config);
|
|
11
|
-
generateLiveImg(data: any, username: string, userface: string, liveStatus: number): Promise<{
|
|
11
|
+
generateLiveImg(data: any, username: string, userface: string, followerDisplay: string, liveStatus: number): Promise<{
|
|
12
12
|
buffer: Buffer<ArrayBufferLike>;
|
|
13
13
|
pic?: undefined;
|
|
14
14
|
} | {
|
|
@@ -45,6 +45,7 @@ declare namespace GenerateImg {
|
|
|
45
45
|
enableLargeFont: boolean;
|
|
46
46
|
font: string;
|
|
47
47
|
hideDesc: boolean;
|
|
48
|
+
followerDisplay: boolean;
|
|
48
49
|
}
|
|
49
50
|
const Config: Schema<Config>;
|
|
50
51
|
}
|
package/lib/generateImg.js
CHANGED
|
@@ -9,24 +9,16 @@ const DYNAMIC_TYPE_NONE = "DYNAMIC_TYPE_NONE";
|
|
|
9
9
|
const DYNAMIC_TYPE_FORWARD = "DYNAMIC_TYPE_FORWARD";
|
|
10
10
|
const DYNAMIC_TYPE_AV = "DYNAMIC_TYPE_AV";
|
|
11
11
|
const DYNAMIC_TYPE_PGC = "DYNAMIC_TYPE_PGC";
|
|
12
|
-
const DYNAMIC_TYPE_COURSES = "DYNAMIC_TYPE_COURSES";
|
|
13
12
|
const DYNAMIC_TYPE_WORD = "DYNAMIC_TYPE_WORD";
|
|
14
13
|
const DYNAMIC_TYPE_DRAW = "DYNAMIC_TYPE_DRAW";
|
|
15
14
|
const DYNAMIC_TYPE_ARTICLE = "DYNAMIC_TYPE_ARTICLE";
|
|
16
15
|
const DYNAMIC_TYPE_MUSIC = "DYNAMIC_TYPE_MUSIC";
|
|
17
16
|
const DYNAMIC_TYPE_COMMON_SQUARE = "DYNAMIC_TYPE_COMMON_SQUARE";
|
|
18
|
-
const DYNAMIC_TYPE_COMMON_VERTICAL = "DYNAMIC_TYPE_COMMON_VERTICAL";
|
|
19
17
|
const DYNAMIC_TYPE_LIVE = "DYNAMIC_TYPE_LIVE";
|
|
20
18
|
const DYNAMIC_TYPE_MEDIALIST = "DYNAMIC_TYPE_MEDIALIST";
|
|
21
19
|
const DYNAMIC_TYPE_COURSES_SEASON = "DYNAMIC_TYPE_COURSES_SEASON";
|
|
22
|
-
const DYNAMIC_TYPE_COURSES_BATCH = "DYNAMIC_TYPE_COURSES_BATCH";
|
|
23
|
-
const DYNAMIC_TYPE_AD = "DYNAMIC_TYPE_AD";
|
|
24
|
-
const DYNAMIC_TYPE_APPLET = "DYNAMIC_TYPE_APPLET";
|
|
25
|
-
const DYNAMIC_TYPE_SUBSCRIPTION = "DYNAMIC_TYPE_SUBSCRIPTION";
|
|
26
20
|
const DYNAMIC_TYPE_LIVE_RCMD = "DYNAMIC_TYPE_LIVE_RCMD";
|
|
27
|
-
const DYNAMIC_TYPE_BANNER = "DYNAMIC_TYPE_BANNER";
|
|
28
21
|
const DYNAMIC_TYPE_UGC_SEASON = "DYNAMIC_TYPE_UGC_SEASON";
|
|
29
|
-
const DYNAMIC_TYPE_SUBSCRIPTION_NEW = "DYNAMIC_TYPE_SUBSCRIPTION_NEW";
|
|
30
22
|
// 内容卡片类型
|
|
31
23
|
const ADDITIONAL_TYPE_RESERVE = "ADDITIONAL_TYPE_RESERVE";
|
|
32
24
|
class GenerateImg extends koishi_1.Service {
|
|
@@ -38,12 +30,12 @@ class GenerateImg extends koishi_1.Service {
|
|
|
38
30
|
}
|
|
39
31
|
async generateLiveImg(
|
|
40
32
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
41
|
-
data, username, userface, liveStatus /*0未开播 1刚开播 2已开播 3停止直播*/) {
|
|
33
|
+
data, username, userface, followerDisplay, liveStatus /*0未开播 1刚开播 2已开播 3停止直播*/) {
|
|
42
34
|
const [titleStatus, liveTime, cover] = await this.getLiveStatus(data.live_time, liveStatus);
|
|
43
35
|
// 加载字体
|
|
44
36
|
const fontURL = (0, node_url_1.pathToFileURL)((0, node_path_1.resolve)(__dirname, "font/HYZhengYuan-75W.ttf"));
|
|
45
37
|
// 卡片内容
|
|
46
|
-
const html = `
|
|
38
|
+
const html = /* html */ `
|
|
47
39
|
<!DOCTYPE html>
|
|
48
40
|
<html>
|
|
49
41
|
<head>
|
|
@@ -175,6 +167,18 @@ class GenerateImg extends koishi_1.Service {
|
|
|
175
167
|
</p>
|
|
176
168
|
<p class="card-link">
|
|
177
169
|
<span>${liveTime}</span>
|
|
170
|
+
${this.giConfig.followerDisplay
|
|
171
|
+
? /* html */ `
|
|
172
|
+
<span>
|
|
173
|
+
${liveStatus === 1
|
|
174
|
+
? `当前粉丝数为${followerDisplay}`
|
|
175
|
+
: liveStatus === 2
|
|
176
|
+
? `本场直播累计观看人数:${followerDisplay}`
|
|
177
|
+
: liveStatus === 3
|
|
178
|
+
? `本场直播粉丝数变化:${followerDisplay}`
|
|
179
|
+
: ""}
|
|
180
|
+
</span>`
|
|
181
|
+
: ""}
|
|
178
182
|
</p>
|
|
179
183
|
</div>
|
|
180
184
|
</div>
|
|
@@ -260,7 +264,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
260
264
|
if (module_dynamic.desc) {
|
|
261
265
|
const richText = module_dynamic.desc.rich_text_nodes.reduce((accumulator, currentValue) => {
|
|
262
266
|
if (currentValue.emoji) {
|
|
263
|
-
return `${accumulator}<img style="width:28px; height:28px;" src="${currentValue.emoji.icon_url}"/>`;
|
|
267
|
+
return /* html */ `${accumulator}<img style="width:28px; height:28px;" src="${currentValue.emoji.icon_url}"/>`;
|
|
264
268
|
}
|
|
265
269
|
return accumulator + currentValue.text;
|
|
266
270
|
}, "");
|
|
@@ -282,7 +286,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
282
286
|
const text = richText.replace(/\n/g, "<br>");
|
|
283
287
|
// 拼接字符串
|
|
284
288
|
if (text) {
|
|
285
|
-
main += `
|
|
289
|
+
main += /* html */ `
|
|
286
290
|
<div class="card-details">
|
|
287
291
|
${text}
|
|
288
292
|
</div>
|
|
@@ -297,7 +301,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
297
301
|
const height = module_dynamic.major.draw.items[0].height;
|
|
298
302
|
console.log(height);
|
|
299
303
|
if (height > 3000) {
|
|
300
|
-
major += `
|
|
304
|
+
major += /* html */ `
|
|
301
305
|
<div class="single-photo-container">
|
|
302
306
|
<img class="single-photo-item" src="${module_dynamic.major.draw.items[0].src}"/>
|
|
303
307
|
<div class="single-photo-mask">
|
|
@@ -308,7 +312,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
308
312
|
`;
|
|
309
313
|
}
|
|
310
314
|
else {
|
|
311
|
-
major += `
|
|
315
|
+
major += /* html */ `
|
|
312
316
|
<div class="single-photo-container">
|
|
313
317
|
<img class="single-photo-item" src="${module_dynamic.major.draw.items[0].src}"/>
|
|
314
318
|
</div>
|
|
@@ -317,15 +321,15 @@ class GenerateImg extends koishi_1.Service {
|
|
|
317
321
|
}
|
|
318
322
|
else if (module_dynamic.major.draw.items.length === 4) {
|
|
319
323
|
major += module_dynamic.major.draw.items.reduce((acc, cV) => {
|
|
320
|
-
return `${acc}<img class="four-photo-item" src="${cV.src}"/>`;
|
|
324
|
+
return /* html */ `${acc}<img class="four-photo-item" src="${cV.src}"/>`;
|
|
321
325
|
}, "");
|
|
322
326
|
}
|
|
323
327
|
else {
|
|
324
328
|
major += module_dynamic.major.draw.items.reduce((acc, cV) => {
|
|
325
|
-
return `${acc}<img class="photo-item" src="${cV.src}"/>`;
|
|
329
|
+
return /* html */ `${acc}<img class="photo-item" src="${cV.src}"/>`;
|
|
326
330
|
}, "");
|
|
327
331
|
}
|
|
328
|
-
main += `
|
|
332
|
+
main += /* html */ `
|
|
329
333
|
<div class="card-major">
|
|
330
334
|
${major}
|
|
331
335
|
</div>
|
|
@@ -353,7 +357,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
353
357
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
354
358
|
const [forwardMain, _, forwardInfo] = await getDynamicMajor(dynamicMajorData.orig, true);
|
|
355
359
|
// 拼接main
|
|
356
|
-
main += `
|
|
360
|
+
main += /* html */ `
|
|
357
361
|
<div class="card-forward">
|
|
358
362
|
<div class="forward-userinfo">
|
|
359
363
|
<img class="forward-avatar" src="${forwardUserAvatarUrl}" alt="avatar">
|
|
@@ -377,14 +381,14 @@ class GenerateImg extends koishi_1.Service {
|
|
|
377
381
|
let button;
|
|
378
382
|
// 判断按钮类型
|
|
379
383
|
if (reserve.button.uncheck.text === "已结束") {
|
|
380
|
-
button = `
|
|
384
|
+
button = /* html */ `
|
|
381
385
|
<button class="reserve-button-end">
|
|
382
386
|
<span>${reserve.button.uncheck.text}</span>
|
|
383
387
|
</button>
|
|
384
388
|
`;
|
|
385
389
|
}
|
|
386
390
|
else {
|
|
387
|
-
button = `
|
|
391
|
+
button = /* html */ `
|
|
388
392
|
<button class="reserve-button-ing">
|
|
389
393
|
<svg class="bili-dyn-card-reserve__action__icon" style="width: 16px; height: 16px;"
|
|
390
394
|
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
@@ -403,7 +407,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
403
407
|
</button>
|
|
404
408
|
`;
|
|
405
409
|
}
|
|
406
|
-
main += `
|
|
410
|
+
main += /* html */ `
|
|
407
411
|
<div class="card-reserve">
|
|
408
412
|
<div class="reserve-main">
|
|
409
413
|
<div class="reserve-title">
|
|
@@ -472,7 +476,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
472
476
|
pubTime = `${pubTime} · 投稿了视频`;
|
|
473
477
|
}
|
|
474
478
|
}
|
|
475
|
-
main += `
|
|
479
|
+
main += /* html */ `
|
|
476
480
|
<div class="card-video">
|
|
477
481
|
<div class="video-cover">
|
|
478
482
|
<img src="${archive.cover}"
|
|
@@ -1302,7 +1306,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
1302
1306
|
`;
|
|
1303
1307
|
}
|
|
1304
1308
|
// 定义卡片内容
|
|
1305
|
-
const html = `
|
|
1309
|
+
const html = /* html */ `
|
|
1306
1310
|
<!DOCTYPE html>
|
|
1307
1311
|
<html>
|
|
1308
1312
|
<head>
|
|
@@ -1428,7 +1432,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
1428
1432
|
async generateWordCloudImg() {
|
|
1429
1433
|
const page = await this.ctx.puppeteer.page();
|
|
1430
1434
|
// 创建HTML内容
|
|
1431
|
-
const htmlContent = `
|
|
1435
|
+
const htmlContent = /* html */ `
|
|
1432
1436
|
<!DOCTYPE html>
|
|
1433
1437
|
<html>
|
|
1434
1438
|
<head>
|
|
@@ -1516,9 +1520,9 @@ class GenerateImg extends koishi_1.Service {
|
|
|
1516
1520
|
if (minutes !== 0)
|
|
1517
1521
|
parts.push(`${Math.abs(minutes)}分`);
|
|
1518
1522
|
if (seconds !== 0)
|
|
1519
|
-
parts.push(`${Math.abs(seconds)}秒`);
|
|
1523
|
+
parts.push(`${Math.round(Math.abs(seconds))}秒`);
|
|
1520
1524
|
// 处理负值
|
|
1521
|
-
const sign = diff.as("seconds") < 0 ? "" : "
|
|
1525
|
+
const sign = diff.as("seconds") < 0 ? "-" : "";
|
|
1522
1526
|
// 组合结果(如果无差值返回"0秒")
|
|
1523
1527
|
return parts.length > 0 ? `${sign}${parts.join("")}` : "0秒";
|
|
1524
1528
|
}
|
|
@@ -1549,6 +1553,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
1549
1553
|
enableLargeFont: koishi_1.Schema.boolean(),
|
|
1550
1554
|
font: koishi_1.Schema.string(),
|
|
1551
1555
|
hideDesc: koishi_1.Schema.boolean(),
|
|
1556
|
+
followerDisplay: koishi_1.Schema.boolean(),
|
|
1552
1557
|
});
|
|
1553
1558
|
})(GenerateImg || (GenerateImg = {}));
|
|
1554
1559
|
exports.default = GenerateImg;
|
package/lib/index.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ export interface Config {
|
|
|
22
22
|
key: string;
|
|
23
23
|
master: {};
|
|
24
24
|
basicSettings: {};
|
|
25
|
-
unlockSubLimits: boolean;
|
|
26
25
|
automaticResend: boolean;
|
|
27
26
|
renderType: "render" | "page";
|
|
28
27
|
userAgent: string;
|
|
@@ -52,6 +51,7 @@ export interface Config {
|
|
|
52
51
|
customLiveStart: string;
|
|
53
52
|
customLive: string;
|
|
54
53
|
customLiveEnd: string;
|
|
54
|
+
followerDisplay: boolean;
|
|
55
55
|
hideDesc: boolean;
|
|
56
56
|
style: {};
|
|
57
57
|
removeBorder: boolean;
|
package/lib/index.js
CHANGED
|
@@ -157,12 +157,12 @@ class ServerManager extends koishi_1.Service {
|
|
|
157
157
|
hideDesc: globalConfig.hideDesc,
|
|
158
158
|
enableLargeFont: globalConfig.enableLargeFont,
|
|
159
159
|
font: globalConfig.font,
|
|
160
|
+
followerDisplay: globalConfig.followerDisplay
|
|
160
161
|
});
|
|
161
162
|
// CR = ComRegister
|
|
162
163
|
const cr = this.ctx.plugin(comRegister_1.default, {
|
|
163
164
|
sub: globalConfig.sub,
|
|
164
165
|
master: globalConfig.master,
|
|
165
|
-
unlockSubLimits: globalConfig.unlockSubLimits,
|
|
166
166
|
automaticResend: globalConfig.automaticResend,
|
|
167
167
|
liveDetectMode: globalConfig.liveDetectMode,
|
|
168
168
|
restartPush: globalConfig.restartPush,
|
|
@@ -232,19 +232,13 @@ function apply(ctx, config) {
|
|
|
232
232
|
globalConfig = config;
|
|
233
233
|
// 设置提示
|
|
234
234
|
ctx.notifier.create({
|
|
235
|
-
|
|
235
|
+
type: "danger",
|
|
236
|
+
content: "3.0.0-alpha.16 全面从指令订阅迁移到配置订阅,以前使用指令的订阅需要全部重新填写到订阅配置中",
|
|
236
237
|
});
|
|
237
238
|
ctx.notifier.create({
|
|
239
|
+
type: "warning",
|
|
238
240
|
content: "请使用Auth插件创建超级管理员账号,没有权限将无法使用该插件提供的指令。",
|
|
239
241
|
});
|
|
240
|
-
if (config.unlockSubLimits) {
|
|
241
|
-
// 用户允许订阅超过三个用户
|
|
242
|
-
// 设置警告
|
|
243
|
-
ctx.notifier.create({
|
|
244
|
-
type: "danger",
|
|
245
|
-
content: "过多的订阅可能会导致IP暂时被封禁!",
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
242
|
// load database
|
|
249
243
|
ctx.plugin(Database);
|
|
250
244
|
// Register ServerManager
|
|
@@ -296,9 +290,6 @@ exports.Config = koishi_1.Schema.object({
|
|
|
296
290
|
]),
|
|
297
291
|
]),
|
|
298
292
|
basicSettings: koishi_1.Schema.object({}).description("基本设置"),
|
|
299
|
-
unlockSubLimits: koishi_1.Schema.boolean()
|
|
300
|
-
.default(false)
|
|
301
|
-
.description("解锁3个直播订阅限制,默认只允许订阅3位UP主。订阅过多用户可能有导致IP暂时被封禁的风险"),
|
|
302
293
|
automaticResend: koishi_1.Schema.boolean()
|
|
303
294
|
.default(true)
|
|
304
295
|
.description("是否开启自动重发功能,默认开启。开启后,如果推送失败,将会自动重发,尝试三次。关闭后,推送失败将不会再重发,直到下一次推送"),
|
|
@@ -309,7 +300,7 @@ exports.Config = koishi_1.Schema.object({
|
|
|
309
300
|
userAgent: koishi_1.Schema.string()
|
|
310
301
|
.required()
|
|
311
302
|
.description("设置请求头User-Agen,请求出现-352时可以尝试修改,UA获取方法可参考:https://blog.csdn.net/qq_44503987/article/details/104929111"),
|
|
312
|
-
subTitle: koishi_1.Schema.object({}).description("
|
|
303
|
+
subTitle: koishi_1.Schema.object({}).description("订阅配置"),
|
|
313
304
|
sub: koishi_1.Schema.array(koishi_1.Schema.object({
|
|
314
305
|
uid: koishi_1.Schema.string().description("订阅用户UID"),
|
|
315
306
|
dynamic: koishi_1.Schema.boolean().description("是否订阅用户动态"),
|
|
@@ -321,12 +312,12 @@ exports.Config = koishi_1.Schema.object({
|
|
|
321
312
|
live: koishi_1.Schema.boolean().description("该频道/群组是否推送直播通知"),
|
|
322
313
|
liveGuardBuy: koishi_1.Schema.boolean().description("该频道/群组是否推送上舰消息"),
|
|
323
314
|
atAll: koishi_1.Schema.boolean().description("推送开播通知时是否艾特全体成员"),
|
|
324
|
-
})).description("
|
|
315
|
+
})).description("需推送的频道/群组详细设置"),
|
|
325
316
|
platform: koishi_1.Schema.string().description("推送平台"),
|
|
326
|
-
})).description("
|
|
317
|
+
})).description("订阅用户需要发送的平台和频道/群组信息(一个平台下可以推送多个频道/群组)"),
|
|
327
318
|
}))
|
|
328
319
|
.role("table")
|
|
329
|
-
.description("
|
|
320
|
+
.description("输入订阅信息,自定义订阅内容; uid: 订阅用户UID,dynamic: 是否需要订阅动态,live: 是否需要订阅直播"),
|
|
330
321
|
dynamic: koishi_1.Schema.object({}).description("动态推送设置"),
|
|
331
322
|
dynamicUrl: koishi_1.Schema.boolean()
|
|
332
323
|
.default(false)
|
|
@@ -362,12 +353,17 @@ exports.Config = koishi_1.Schema.object({
|
|
|
362
353
|
.default(1)
|
|
363
354
|
.description("设定间隔多长时间推送一次直播状态,单位为小时,默认为一小时"),
|
|
364
355
|
customLiveStart: koishi_1.Schema.string()
|
|
365
|
-
.default("-name
|
|
366
|
-
.description("自定义开播提示语,-name代表UP昵称,-link代表直播间链接(如果使用的是QQ官方机器人,请不要使用)。例如-name开播啦,会发送为xxxUP开播啦"),
|
|
367
|
-
customLive: koishi_1.Schema.string()
|
|
356
|
+
.default("-name开播啦,当前粉丝数为-follower -link")
|
|
357
|
+
.description("自定义开播提示语,-name代表UP昵称,-follower代表当前粉丝数,-link代表直播间链接(如果使用的是QQ官方机器人,请不要使用)。例如-name开播啦,会发送为xxxUP开播啦"),
|
|
358
|
+
customLive: koishi_1.Schema.string()
|
|
359
|
+
.default("-name正在直播,目前已播-time,直播间累计看过人数为-watched,-link")
|
|
360
|
+
.description("自定义直播中提示语,-name代表UP昵称,-time代表开播时长,-watched代表累计看过人数,-link代表直播间链接(如果使用的是QQ官方机器人,请不要使用)。例如-name正在直播,会发送为xxxUP正在直播xxx"),
|
|
368
361
|
customLiveEnd: koishi_1.Schema.string()
|
|
369
|
-
.default("-name下播啦,本次直播了-time")
|
|
370
|
-
.description("自定义下播提示语,-name代表UP昵称,-time代表开播时长。例如-name下播啦,本次直播了-time,会发送为xxxUP下播啦,直播时长为xx小时xx分钟xx秒"),
|
|
362
|
+
.default("-name下播啦,本次直播了-time,粉丝数的变化-follower_change")
|
|
363
|
+
.description("自定义下播提示语,-name代表UP昵称,-follower_change代表本场直播粉丝数变,-time代表开播时长。例如-name下播啦,本次直播了-time,会发送为xxxUP下播啦,直播时长为xx小时xx分钟xx秒"),
|
|
364
|
+
followerDisplay: koishi_1.Schema.boolean()
|
|
365
|
+
.default(true)
|
|
366
|
+
.description("粉丝数变化和看过本场直播的人数是否显示在推送卡片中"),
|
|
371
367
|
hideDesc: koishi_1.Schema.boolean()
|
|
372
368
|
.default(false)
|
|
373
369
|
.description("是否隐藏UP主直播间简介,开启后推送的直播卡片将不再展示简介"),
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare enum LiveType {
|
|
2
|
+
NotLiveBroadcast = 0,
|
|
3
|
+
StartBroadcasting = 1,
|
|
4
|
+
LiveBroadcast = 2,
|
|
5
|
+
StopBroadcast = 3,
|
|
6
|
+
FirstLiveBroadcast = 4
|
|
7
|
+
}
|
|
8
|
+
export type ChannelIdArr = Array<{
|
|
9
|
+
channelId: string;
|
|
10
|
+
dynamic: boolean;
|
|
11
|
+
live: boolean;
|
|
12
|
+
liveGuardBuy: boolean;
|
|
13
|
+
atAll: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export type TargetItem = {
|
|
16
|
+
channelIdArr: ChannelIdArr;
|
|
17
|
+
platform: string;
|
|
18
|
+
};
|
|
19
|
+
export type Target = Array<TargetItem>;
|
|
20
|
+
export type SubItem = {
|
|
21
|
+
id: number;
|
|
22
|
+
uid: string;
|
|
23
|
+
roomId: string;
|
|
24
|
+
target: Target;
|
|
25
|
+
platform: string;
|
|
26
|
+
live: boolean;
|
|
27
|
+
dynamic: boolean;
|
|
28
|
+
};
|
|
29
|
+
export type SubManager = Array<SubItem>;
|
|
30
|
+
export type MasterInfo = {
|
|
31
|
+
username: string;
|
|
32
|
+
userface: string;
|
|
33
|
+
roomId: number;
|
|
34
|
+
liveOpenFollowerNum: number;
|
|
35
|
+
liveEndFollowerNum: number;
|
|
36
|
+
liveFollowerChange: number;
|
|
37
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiveType = void 0;
|
|
4
|
+
var LiveType;
|
|
5
|
+
(function (LiveType) {
|
|
6
|
+
LiveType[LiveType["NotLiveBroadcast"] = 0] = "NotLiveBroadcast";
|
|
7
|
+
LiveType[LiveType["StartBroadcasting"] = 1] = "StartBroadcasting";
|
|
8
|
+
LiveType[LiveType["LiveBroadcast"] = 2] = "LiveBroadcast";
|
|
9
|
+
LiveType[LiveType["StopBroadcast"] = 3] = "StopBroadcast";
|
|
10
|
+
LiveType[LiveType["FirstLiveBroadcast"] = 4] = "FirstLiveBroadcast";
|
|
11
|
+
})(LiveType || (exports.LiveType = LiveType = {}));
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -53,43 +53,11 @@
|
|
|
53
53
|
|
|
54
54
|
订阅UP主:订阅你想要推送的UP主
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
- 参数说明:
|
|
58
|
-
- `uid` 为必填参数,为 `up主` 的 `uid`
|
|
59
|
-
- `groupId` 为可选参数,为需要推送的群号/频道号,可输入多个群号
|
|
60
|
-
- 选项说明:`bili sub <uid>` 有四个选项:-l -d -m -a
|
|
61
|
-
- `-l` 为订阅UP主直播间,包括直播开播通知,定时推送直播内容,下播通知
|
|
62
|
-
- `-d` 为订阅UP主动态推送,目前实现推送的动态类型有:普通图文动态,转发动态,直播预约动态
|
|
63
|
-
- `-m` 为多平台动态推送,格式为:群号/频道号,群号/频道号,群号/频道号.平台名;群号/频道号,群号/频道号.平台号。如果群号/频道号为 `all` 代表推送该平台下的所有群聊或/频道。在群号/频道号后加 `@` 则代表这个群聊/频道需要@全体成员。订阅TG群组时请使用 `bili sub xxx -m "xxxxxxx"` 这样的格式
|
|
64
|
-
- `-a` 为是否艾特全体成员,对 `-m` 参数不生效
|
|
65
|
-
|
|
66
|
-
例如:
|
|
67
|
-
`-m 3247293,324389,89874324.qq;EDBWIUBIU.qqguild;79324792,3247892.onebot` 代表推送QQ下3247293,324389,89874324这三个群聊,QQ频道下EDBWIUBIU这个频道,Onebot平台下79324792,3247892这两个群聊
|
|
68
|
-
`-m 3247293,324389@,89874324.qq` 代表推送QQ下3247293,324389,89874324这三个群聊,其中群聊324389需要艾特全体成员
|
|
69
|
-
所有分隔符均为英文符号
|
|
70
|
-
|
|
71
|
-
- 例如:
|
|
72
|
-
- `bili sub 1194210119 ` 订阅UID为1194210119的UP主动态推送和直播间
|
|
73
|
-
- `bili sub 1194210119 -d` 订阅UID为1194210119的UP主动态推送
|
|
74
|
-
- `bili sub 1194210119 -l` 订阅UID为1194210119的UP主直播间
|
|
75
|
-
- `bili sub 1194210119 -m 3247293,324389,89874324.qq;all.onebot;EHUIWDBUAWD.qqguild` 订阅UID为1194210119的UP主,向群号为3247293,324389,89874324的QQ群,所有onebot平台下的群聊,频道号为EHUIWDBUAWD的QQ频道平台进行推送
|
|
76
|
-
- `bili sub 1194210119 -a` 订阅UID为1194210119的UP主动态推送和直播间并艾特全体成员
|
|
77
|
-
|
|
78
|
-
取消订阅UP主:取消订阅不需要推送的UP主
|
|
79
|
-
|
|
80
|
-
- 使用指令 `bili unsub <uid>` 取消订阅不需要订阅的UP主
|
|
81
|
-
- 参数说明:`uid` 为必填参数,为 `up主` 的 `uid`
|
|
82
|
-
- 选项说明:`bili unsub <uid>` 有两个选项:-l 和 -d
|
|
83
|
-
- `-l` 为取消订阅UP主直播间
|
|
84
|
-
- `-d` 为取消订阅UP主动态
|
|
85
|
-
- 例如:
|
|
86
|
-
- `bili unsub 123456` 取消订阅UID为123456的UP主动态推送和直播间
|
|
87
|
-
- `bili unsub 123456 -d` 取消订阅UID为123456的UP主动态推送
|
|
88
|
-
- `bili unsub 123456 -dl` 取消订阅UID为123456的UP主动态推送和直播间
|
|
56
|
+
在插件配置中配置需要订阅的UP主
|
|
89
57
|
|
|
90
58
|
查看目前已订阅的UP主:
|
|
91
59
|
|
|
92
|
-
- 使用指令 `bili
|
|
60
|
+
- 使用指令 `bili list`
|
|
93
61
|
|
|
94
62
|
插件的启动、停止和重启
|
|
95
63
|
|
|
@@ -227,6 +195,8 @@
|
|
|
227
195
|
- ver 3.0.0-alpha.13 优化:将ESLint替换为Biome; 修复:增加弹幕词云功能产生的bug; 禁用:弹幕词云功能并不能正常运作,暂时将该功能禁用
|
|
228
196
|
- ver 3.0.0-alpha.14 优化:移除不需要的服务
|
|
229
197
|
- ver 3.0.0-alpha.15 修复:启动插件提示发送群组消息失败、直播推送时间显示为负数(不用再特别设置系统时区为UTC+8)
|
|
198
|
+
- ver 3.0.0-alpha.16 重大更新:订阅不再依赖数据库,从指令订阅全面迁移到配置订阅; 修复:直播时长有误; 优化:`bili show` 指令更改为 `bili list`
|
|
199
|
+
- ver 3.0.0-alpha.17 新增:更多的提示语变量,开播,当前粉丝数。正在直播,累计观看人数。下播,粉丝数变化。选项,新增的提示语变量是否展示到推送卡片中
|
|
230
200
|
|
|
231
201
|
## 交流群
|
|
232
202
|
|