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.
@@ -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>;
@@ -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[ctx.bots.findIndex(bot => bot.platform === 'qq')];
33
+ this.qqBot = ctx.bots.find(bot => bot.platform === 'qq');
32
34
  // 拿到QQ频道机器人
33
- this.qqguildBot = ctx.bots[ctx.bots.findIndex(bot => bot.platform === 'qqguild')];
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
- // 定义Bot
328
- let bot;
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 bot.sendMessage(sub.targetId, `订阅${userData.info.uname}直播通知`);
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 bot.sendMessage(sub.targetId, `订阅${userData.info.uname}动态通知`);
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': bot = this.qqBot;
848
- case 'qqguild': bot = this.qqguildBot;
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
  // 获取用户信息
@@ -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;
@@ -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 function getDynamicMajor(dynamicMajorData, forward) {
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
- function basicDynamic() {
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:22px; height:22px;" src="${currentValue.emoji.icon_url}"/>`;
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
@@ -10,6 +10,7 @@ export interface Config {
10
10
  dynamicCheckNumber: number;
11
11
  dynamicLoopTime: '1分钟' | '2分钟' | '3分钟' | '5分钟';
12
12
  renderType: 'render' | 'page';
13
+ filter: {};
13
14
  style: {};
14
15
  removeBorder: boolean;
15
16
  cardColorStart: string;
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-bilibili-notify",
3
3
  "description": "Koishi bilibili notify plugin",
4
- "version": "1.0.9-alpha.0",
4
+ "version": "1.0.10-alpha.0",
5
5
  "contributors": [
6
6
  "Akokko <admin@akokko.com>"
7
7
  ],
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