koishi-plugin-bilibili-notify 1.0.9-alpha.0 → 1.0.10-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 +1 -0
- package/lib/comRegister.js +41 -27
- package/lib/generateImg.d.ts +6 -0
- package/lib/generateImg.js +24 -5
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -1
- package/package.json +1 -1
- package/readme.md +1 -0
package/lib/comRegister.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ declare class ComRegister {
|
|
|
18
18
|
}[];
|
|
19
19
|
qqBot: Bot<Context>;
|
|
20
20
|
qqguildBot: Bot<Context>;
|
|
21
|
+
oneBot: Bot<Context>;
|
|
21
22
|
constructor(ctx: Context, config: ComRegister.Config);
|
|
22
23
|
dynamicDetect(ctx: Context, bot: Bot<Context>, guildId: string, uid: string): () => Promise<void | string[]>;
|
|
23
24
|
liveDetect(ctx: Context, bot: Bot<Context>, guildId: string, roomId: string): () => Promise<void>;
|
package/lib/comRegister.js
CHANGED
|
@@ -24,13 +24,17 @@ class ComRegister {
|
|
|
24
24
|
qqBot;
|
|
25
25
|
// QQ频道机器人
|
|
26
26
|
qqguildBot;
|
|
27
|
+
// OneBot机器人
|
|
28
|
+
oneBot;
|
|
27
29
|
constructor(ctx, config) {
|
|
28
30
|
this.logger = ctx.logger('commandRegister');
|
|
29
31
|
this.config = config;
|
|
30
32
|
// 拿到QQ群机器人
|
|
31
|
-
this.qqBot = ctx.bots
|
|
33
|
+
this.qqBot = ctx.bots.find(bot => bot.platform === 'qq');
|
|
32
34
|
// 拿到QQ频道机器人
|
|
33
|
-
this.qqguildBot = ctx.bots
|
|
35
|
+
this.qqguildBot = ctx.bots.find(bot => bot.platform === 'qqguild');
|
|
36
|
+
// 拿到OneBot机器人
|
|
37
|
+
this.oneBot = ctx.bots.find(bot => bot.platform === 'onebot');
|
|
34
38
|
// 从数据库获取订阅
|
|
35
39
|
this.getSubFromDatabase(ctx);
|
|
36
40
|
/* const testCom = ctx.command('test', { hidden: true, permissions: ['authority:5'] })
|
|
@@ -311,11 +315,11 @@ class ComRegister {
|
|
|
311
315
|
if (!liveMsg && !dynamicMsg) {
|
|
312
316
|
return '您未订阅该UP的任何消息';
|
|
313
317
|
}
|
|
314
|
-
//
|
|
315
|
-
let platform;
|
|
318
|
+
// 设置群号
|
|
316
319
|
if (!guildId) { // 没有输入群号,默认当前聊天环境
|
|
317
320
|
switch (session.event.platform) {
|
|
318
321
|
case 'qqguild':
|
|
322
|
+
case 'onebot':
|
|
319
323
|
guildId = session.event.channel.id;
|
|
320
324
|
break;
|
|
321
325
|
case 'qq':
|
|
@@ -324,21 +328,8 @@ class ComRegister {
|
|
|
324
328
|
default: return '暂不支持该平台';
|
|
325
329
|
}
|
|
326
330
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
// 判断是哪个聊天平台
|
|
330
|
-
switch (session.event.platform) {
|
|
331
|
-
case 'qqguild': {
|
|
332
|
-
bot = this.qqguildBot;
|
|
333
|
-
platform = 'qqguild';
|
|
334
|
-
break;
|
|
335
|
-
}
|
|
336
|
-
case 'qq': {
|
|
337
|
-
bot = this.qqBot;
|
|
338
|
-
platform = 'qq';
|
|
339
|
-
break;
|
|
340
|
-
}
|
|
341
|
-
default: return '暂不支持该平台';
|
|
331
|
+
else {
|
|
332
|
+
return '暂不支持群号发送!';
|
|
342
333
|
}
|
|
343
334
|
// 保存到数据库中
|
|
344
335
|
const sub = await ctx.database.create('bilibili', {
|
|
@@ -348,7 +339,7 @@ class ComRegister {
|
|
|
348
339
|
video: 1,
|
|
349
340
|
live: liveMsg ? 1 : 0,
|
|
350
341
|
targetId: guildId,
|
|
351
|
-
platform,
|
|
342
|
+
platform: session.event.platform,
|
|
352
343
|
time: new Date()
|
|
353
344
|
});
|
|
354
345
|
// 订阅数+1
|
|
@@ -376,15 +367,15 @@ class ComRegister {
|
|
|
376
367
|
}
|
|
377
368
|
// 需要订阅直播
|
|
378
369
|
if (liveMsg) {
|
|
379
|
-
await session.execute(`bili live ${data.live_room.roomid} ${guildId} -b ${platform}`);
|
|
370
|
+
await session.execute(`bili live ${data.live_room.roomid} ${guildId} -b ${session.event.platform}`);
|
|
380
371
|
// 发送订阅消息通知
|
|
381
|
-
await
|
|
372
|
+
await session.send(`订阅${userData.info.uname}直播通知`);
|
|
382
373
|
}
|
|
383
374
|
// 需要订阅动态
|
|
384
375
|
if (dynamicMsg) {
|
|
385
|
-
await session.execute(`bili dynamic ${mid} ${guildId} -b ${platform}`);
|
|
376
|
+
await session.execute(`bili dynamic ${mid} ${guildId} -b ${session.event.platform}`);
|
|
386
377
|
// 发送订阅消息通知
|
|
387
|
-
await
|
|
378
|
+
await session.send(`订阅${userData.info.uname}动态通知`);
|
|
388
379
|
}
|
|
389
380
|
// 新增订阅展示到控制台
|
|
390
381
|
this.updateSubNotifier(ctx);
|
|
@@ -419,6 +410,9 @@ class ComRegister {
|
|
|
419
410
|
case 'qqguild':
|
|
420
411
|
bot = this.qqguildBot;
|
|
421
412
|
break;
|
|
413
|
+
case 'onebot':
|
|
414
|
+
bot = this.oneBot;
|
|
415
|
+
break;
|
|
422
416
|
default: return '非法调用';
|
|
423
417
|
}
|
|
424
418
|
// 开始循环检测
|
|
@@ -454,6 +448,9 @@ class ComRegister {
|
|
|
454
448
|
case 'qqguild':
|
|
455
449
|
bot = this.qqguildBot;
|
|
456
450
|
break;
|
|
451
|
+
case 'onebot':
|
|
452
|
+
bot = this.oneBot;
|
|
453
|
+
break;
|
|
457
454
|
default: return '非法调用';
|
|
458
455
|
}
|
|
459
456
|
// 开始循环检测
|
|
@@ -583,6 +580,10 @@ class ComRegister {
|
|
|
583
580
|
// 直播开播动态,不做处理
|
|
584
581
|
if (e.message === '直播开播动态,不做处理')
|
|
585
582
|
break;
|
|
583
|
+
if (e.message === '出现关键词,屏蔽该动态') {
|
|
584
|
+
await bot.sendMessage(guildId, `UID:${uid} 发布了一条含有屏蔽关键字的动态`);
|
|
585
|
+
break;
|
|
586
|
+
}
|
|
586
587
|
}
|
|
587
588
|
// 如果pic存在,则直接返回pic
|
|
588
589
|
if (pic)
|
|
@@ -827,7 +828,7 @@ class ComRegister {
|
|
|
827
828
|
if (!this.config.unlockSubLimits && this.num > 3) {
|
|
828
829
|
ctx.notifier.create({
|
|
829
830
|
type: 'danger',
|
|
830
|
-
content: '您未解锁订阅限制,且订阅数大于3人,请您手动删除bilibili
|
|
831
|
+
content: '您未解锁订阅限制,且订阅数大于3人,请您手动删除bilibili表中多余的数据后重启本插件'
|
|
831
832
|
});
|
|
832
833
|
return;
|
|
833
834
|
}
|
|
@@ -844,8 +845,21 @@ class ComRegister {
|
|
|
844
845
|
}
|
|
845
846
|
// 拿到对应bot
|
|
846
847
|
switch (sub.platform) {
|
|
847
|
-
case 'qq':
|
|
848
|
-
|
|
848
|
+
case 'qq':
|
|
849
|
+
bot = this.qqBot;
|
|
850
|
+
break;
|
|
851
|
+
case 'qqguild':
|
|
852
|
+
bot = this.qqguildBot;
|
|
853
|
+
break;
|
|
854
|
+
case 'onebot':
|
|
855
|
+
bot = this.oneBot;
|
|
856
|
+
break;
|
|
857
|
+
default: {
|
|
858
|
+
// 本条数据被篡改,删除该条订阅
|
|
859
|
+
ctx.database.remove('bilibili', { id: sub.id });
|
|
860
|
+
// 继续下个循环
|
|
861
|
+
continue;
|
|
862
|
+
}
|
|
849
863
|
}
|
|
850
864
|
// 判断数据库是否被篡改
|
|
851
865
|
// 获取用户信息
|
package/lib/generateImg.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ declare class GenerateImg extends Service {
|
|
|
33
33
|
declare namespace GenerateImg {
|
|
34
34
|
interface Config {
|
|
35
35
|
renderType: number;
|
|
36
|
+
filter: {
|
|
37
|
+
enable: boolean;
|
|
38
|
+
regex: string;
|
|
39
|
+
keywords: Array<string>;
|
|
40
|
+
filter: boolean;
|
|
41
|
+
};
|
|
36
42
|
removeBorder: boolean;
|
|
37
43
|
cardColorStart: string;
|
|
38
44
|
cardColorEnd: string;
|
package/lib/generateImg.js
CHANGED
|
@@ -232,24 +232,37 @@ class GenerateImg extends koishi_1.Service {
|
|
|
232
232
|
const like = module_stat.like.count;
|
|
233
233
|
// TOPIC
|
|
234
234
|
const topic = data.modules.module_dynamic.topic ? data.modules.module_dynamic.topic.name : '';
|
|
235
|
-
async
|
|
235
|
+
const getDynamicMajor = async (dynamicMajorData, forward) => {
|
|
236
236
|
// 定义返回值
|
|
237
237
|
let main = '';
|
|
238
238
|
let link = '';
|
|
239
239
|
// 定义forward类型返回值
|
|
240
240
|
let forwardInfo;
|
|
241
241
|
// 最基本的图文处理
|
|
242
|
-
|
|
242
|
+
const basicDynamic = () => {
|
|
243
243
|
const module_dynamic = dynamicMajorData.modules.module_dynamic;
|
|
244
244
|
if (module_dynamic.desc) {
|
|
245
245
|
const richText = module_dynamic.desc.rich_text_nodes.reduce((accumulator, currentValue) => {
|
|
246
246
|
if (currentValue.emoji) {
|
|
247
|
-
return accumulator + `<img style="width:
|
|
247
|
+
return accumulator + `<img style="width:28px; height:28px;" src="${currentValue.emoji.icon_url}"/>`;
|
|
248
248
|
}
|
|
249
249
|
else {
|
|
250
250
|
return accumulator + currentValue.text;
|
|
251
251
|
}
|
|
252
252
|
}, '');
|
|
253
|
+
// 关键字和正则屏蔽
|
|
254
|
+
if (this.config.filter.enable) { // 开启关键字和正则屏蔽
|
|
255
|
+
if (this.config.filter.regex) { // 正则屏蔽
|
|
256
|
+
const reg = new RegExp(this.config.filter.regex);
|
|
257
|
+
if (reg.test(richText))
|
|
258
|
+
throw new Error('出现关键词,屏蔽该动态');
|
|
259
|
+
}
|
|
260
|
+
if (this.config.filter.keywords.length !== 0 &&
|
|
261
|
+
this.config.filter.keywords
|
|
262
|
+
.some(keyword => richText.includes(keyword))) {
|
|
263
|
+
throw new Error('出现关键词,屏蔽该动态');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
253
266
|
// 查找\n
|
|
254
267
|
const text = richText.replace(/\n/g, '<br>');
|
|
255
268
|
// 拼接字符串
|
|
@@ -283,7 +296,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
283
296
|
</div>
|
|
284
297
|
`;
|
|
285
298
|
}
|
|
286
|
-
}
|
|
299
|
+
};
|
|
287
300
|
// 判断动态类型
|
|
288
301
|
switch (dynamicMajorData.type) {
|
|
289
302
|
case DYNAMIC_TYPE_WORD:
|
|
@@ -497,7 +510,7 @@ class GenerateImg extends koishi_1.Service {
|
|
|
497
510
|
default: return [`${upName}发布了一条我无法识别的动态,请自行查看`, ''];
|
|
498
511
|
}
|
|
499
512
|
return [main, link, forwardInfo];
|
|
500
|
-
}
|
|
513
|
+
};
|
|
501
514
|
// 获取动态主要内容
|
|
502
515
|
const [main, link] = await getDynamicMajor(data, false);
|
|
503
516
|
// 加载字体
|
|
@@ -994,6 +1007,12 @@ class GenerateImg extends koishi_1.Service {
|
|
|
994
1007
|
(function (GenerateImg) {
|
|
995
1008
|
GenerateImg.Config = koishi_1.Schema.object({
|
|
996
1009
|
renderType: koishi_1.Schema.number(),
|
|
1010
|
+
filter: koishi_1.Schema.object({
|
|
1011
|
+
enable: koishi_1.Schema.boolean(),
|
|
1012
|
+
regex: koishi_1.Schema.string(),
|
|
1013
|
+
keywords: koishi_1.Schema.array(String),
|
|
1014
|
+
filter: koishi_1.Schema.boolean()
|
|
1015
|
+
}),
|
|
997
1016
|
removeBorder: koishi_1.Schema.boolean(),
|
|
998
1017
|
cardColorStart: koishi_1.Schema.string(),
|
|
999
1018
|
cardColorEnd: koishi_1.Schema.string(),
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -70,6 +70,23 @@ exports.Config = koishi_1.Schema.object({
|
|
|
70
70
|
.role('')
|
|
71
71
|
.default('render')
|
|
72
72
|
.description('渲染类型,默认为render模式,渲染速度更快,但会出现乱码问题,若出现乱码问题,请切换到page模式。若使用自定义字体,建议选择render模式'),
|
|
73
|
+
filter: koishi_1.Schema.intersect([
|
|
74
|
+
koishi_1.Schema.object({
|
|
75
|
+
enable: koishi_1.Schema.boolean()
|
|
76
|
+
.default(false)
|
|
77
|
+
.description('是否开启动态关键字屏蔽功能')
|
|
78
|
+
}).description('屏蔽设置'),
|
|
79
|
+
koishi_1.Schema.union([
|
|
80
|
+
koishi_1.Schema.object({
|
|
81
|
+
enable: koishi_1.Schema.const(true).required(),
|
|
82
|
+
regex: koishi_1.Schema.string()
|
|
83
|
+
.description('正则表达式屏蔽'),
|
|
84
|
+
keywords: koishi_1.Schema.array(String)
|
|
85
|
+
.description('关键字屏蔽,一个关键字为一项')
|
|
86
|
+
}),
|
|
87
|
+
koishi_1.Schema.object({})
|
|
88
|
+
])
|
|
89
|
+
]),
|
|
73
90
|
style: koishi_1.Schema.object({}).description('美化设置'),
|
|
74
91
|
removeBorder: koishi_1.Schema.boolean()
|
|
75
92
|
.default(false)
|
|
@@ -128,7 +145,7 @@ function apply(ctx, config) {
|
|
|
128
145
|
ctx.plugin(Database);
|
|
129
146
|
// Regist server
|
|
130
147
|
ctx.plugin(wbi_1.default, { key: config.key });
|
|
131
|
-
ctx.plugin(generateImg_1.default, { renderType, removeBorder: config.removeBorder, cardColorStart: config.cardColorStart, cardColorEnd: config.cardColorEnd, font: config.font });
|
|
148
|
+
ctx.plugin(generateImg_1.default, { renderType, filter: config.filter, removeBorder: config.removeBorder, cardColorStart: config.cardColorStart, cardColorEnd: config.cardColorEnd, font: config.font });
|
|
132
149
|
ctx.plugin(biliAPI_1.default);
|
|
133
150
|
// load plugin
|
|
134
151
|
// ctx.plugin(Authority)
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
- ver 1.0.7 修复了在已登录情况下,再次登录会导致重复订阅和提示用户未订阅任何UP主的提示(实际上已订阅)的bug,新增了订阅对象在控制台的显示,优化了bili show指令的逻辑
|
|
86
86
|
- ver 1.0.8 修复了取消订阅的bug
|
|
87
87
|
- ver 1.0.9 更新请求客户端header信息。优化了动态推送卡片的页面布局,增加了字体大小。提供用户开放订阅数量限制的选项,提供用户移除推送卡片边框的选项。在控制台页面增加订阅信息提示
|
|
88
|
+
- ver 1.0.10 增加对onebot的支持,添加动态关键字屏蔽功能
|
|
88
89
|
|
|
89
90
|
## 感谢
|
|
90
91
|
|