koishi-plugin-dwrgbwiki 2.0.1 → 2.0.3

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.
Files changed (3) hide show
  1. package/index.js +79 -9
  2. package/match.js +21 -21
  3. package/package.json +1 -1
package/index.js CHANGED
@@ -198,7 +198,10 @@ module.exports = {
198
198
  .description('接收反馈的平台(如 qq),留空则禁用反馈推送')
199
199
  .default(''),
200
200
  feedbackUserId: Schema.string()
201
- .description('接收反馈的账号 id(配合上方平台,反馈将私聊推送给该账号)')
201
+ .description('接收反馈的账号 id(私聊推送给该账号)')
202
+ .default(''),
203
+ feedbackChannelId: Schema.string()
204
+ .description('接收反馈的群/频道 id(推送反馈到该群,QQ 平台推荐使用群推送以避免私聊限制),优先于私聊推送')
202
205
  .default(''),
203
206
  noticeEnable: Schema.boolean()
204
207
  .description('启用网易公告变动监听(正式服+共研服)')
@@ -306,6 +309,7 @@ module.exports = {
306
309
 
307
310
  ctx.command('BWIKI机器人', '显示当前支持的指令列表')
308
311
  .action(async ({ session }) => {
312
+ logCmd(ctx, session, 'BWIKI机器人')
309
313
  return helpImage(ctx, config, MAIN_HELP)
310
314
  })
311
315
 
@@ -315,6 +319,7 @@ module.exports = {
315
319
  .example('胜率 小女孩 第43赛季 第3周 使用率')
316
320
  .example('胜率 小女孩 43 3 胜率')
317
321
  .action(async ({ session }, name, cond) => {
322
+ logCmd(ctx, session, '胜率', { name, cond })
318
323
  if (!name || !name.trim()) return helpImage(ctx, config, HELP, undefined, cmdWidth(config, 'winrateWidth'))
319
324
  return run(ctx, config, lib.collect, lib.buildHtml, name.trim(), cond, 'winrateWidth')
320
325
  })
@@ -325,6 +330,7 @@ module.exports = {
325
330
  .example('地图 红教堂 S44 3 求生者')
326
331
  .example('地图 月亮河公园 全赛季')
327
332
  .action(async ({ session }, name, cond) => {
333
+ logCmd(ctx, session, '地图', { name, cond })
328
334
  if (!name || !name.trim()) return helpImage(ctx, config, MAP_HELP, undefined, cmdWidth(config, 'mapWidth'))
329
335
  return run(ctx, config, lib.collectMap, lib.buildMapHtml, name.trim(), cond, 'mapWidth')
330
336
  })
@@ -334,6 +340,7 @@ module.exports = {
334
340
  .example('模仿者 侦探')
335
341
  .example('模仿者 药剂师 260531 低级场')
336
342
  .action(async ({ session }, name, cond) => {
343
+ logCmd(ctx, session, '模仿者', { name, cond })
337
344
  if (!name || !name.trim()) return helpImage(ctx, config, MIMIC_HELP, undefined, cmdWidth(config, 'mimicWidth'))
338
345
  return run(ctx, config, lib.collectMimic, lib.buildMimicHtml, name.trim(), cond, 'mimicWidth')
339
346
  })
@@ -344,6 +351,7 @@ module.exports = {
344
351
  .example('勋章 小女孩 20250917 7日增长率')
345
352
  .example('勋章 小女孩 赛季同比增长率')
346
353
  .action(async ({ session }, name, cond) => {
354
+ logCmd(ctx, session, '勋章', { name, cond })
347
355
  if (!name || !name.trim()) return helpImage(ctx, config, BADGE_HELP, undefined, cmdWidth(config, 'badgeWidth'))
348
356
  return run(ctx, config, lib.collectBadge, lib.buildBadgeHtml, name.trim(), cond, 'badgeWidth')
349
357
  })
@@ -354,6 +362,7 @@ module.exports = {
354
362
  .example('基础数据 移动速度 厂长')
355
363
  .example('基础数据 厂长')
356
364
  .action(async ({ session }, cond) => {
365
+ logCmd(ctx, session, '基础数据', { cond })
357
366
  return basicDataImage(ctx, config, cond)
358
367
  })
359
368
 
@@ -361,6 +370,7 @@ module.exports = {
361
370
  .usage(CODEX_HELP)
362
371
  .example('图鉴 时装 招风旗')
363
372
  .action(async ({ session }, cond) => {
373
+ logCmd(ctx, session, '图鉴', { cond })
364
374
  return codexImage(ctx, config, cond)
365
375
  })
366
376
 
@@ -369,6 +379,7 @@ module.exports = {
369
379
  .example('WIKI页面 招风旗')
370
380
  .example('WIKI页面 杰克')
371
381
  .action(async ({ session }, name) => {
382
+ logCmd(ctx, session, 'WIKI页面', { name })
372
383
  return wikiPageImage(ctx, config, wikiStore, session.userId, name)
373
384
  })
374
385
 
@@ -379,6 +390,7 @@ module.exports = {
379
390
  .example('藏头 第五人格 谐音 时装')
380
391
  .example('藏头 我爱你 随身物品')
381
392
  .action(async ({ session }, cond) => {
393
+ logCmd(ctx, session, '藏头', { cond })
382
394
  return cangtouText(ctx, config, cond)
383
395
  })
384
396
 
@@ -387,6 +399,7 @@ module.exports = {
387
399
  .example('藏头完整 我爱你')
388
400
  .example('藏头完整 我爱你 首字母 时装')
389
401
  .action(async ({ session }, cond) => {
402
+ logCmd(ctx, session, '藏头完整', { cond })
390
403
  return cangtouFullImage(ctx, config, cond)
391
404
  })
392
405
 
@@ -399,6 +412,7 @@ module.exports = {
399
412
  .option('i <模式>', '合并模式:team/player/all/none,留空用默认配置')
400
413
  .action(async ({ session, options }, sub, p1, p2) => {
401
414
  const subFn = String(sub || '').trim().toLowerCase()
415
+ logCmd(ctx, session, '赛事-' + subFn, { p1, p2, mode: options && options.i })
402
416
  if (!ctx.puppeteer) return '未检测到 puppeteer 服务,请先安装并启用 koishi-plugin-puppeteer'
403
417
  const mode = options && options.i ? String(options.i).trim().toLowerCase() : (config.matchMerge || 'team')
404
418
 
@@ -469,6 +483,7 @@ module.exports = {
469
483
  .usage(ROLE_HELP)
470
484
  .example('角色 古董商')
471
485
  .action(async ({ session }, name) => {
486
+ logCmd(ctx, session, '角色', { name })
472
487
  return roleImage(ctx, config, name)
473
488
  })
474
489
 
@@ -483,6 +498,7 @@ module.exports = {
483
498
  .example('抽卡 幻象迷途')
484
499
  .example('抽卡 加页手记')
485
500
  .action(async ({ session }, type, poolId, count) => {
501
+ logCmd(ctx, session, '抽卡', { type, poolId, count })
486
502
  if (!ctx.puppeteer) return '未检测到 puppeteer 服务,请先安装并启用 koishi-plugin-puppeteer'
487
503
  if (!type || !type.trim()) return helpImage(ctx, config, GACHA_HELP, GACHA_HERO_SUB, cmdWidth(config, 'gachaWidth'))
488
504
  const uid = session.userId
@@ -529,6 +545,7 @@ module.exports = {
529
545
 
530
546
  ctx.command('抽卡资源', '查询自己的抽卡资源与已抽物品(图片版)')
531
547
  .action(async ({ session }) => {
548
+ logCmd(ctx, session, '抽卡资源')
532
549
  if (!ctx.puppeteer) return '未检测到 puppeteer 服务,请先安装并启用 koishi-plugin-puppeteer'
533
550
  try {
534
551
  const res = await gacha.gachaResources(gachaStore, session.userId)
@@ -553,6 +570,7 @@ module.exports = {
553
570
  .example('抽卡重置 @某人')
554
571
  .example('抽卡重置 123456789')
555
572
  .action(async ({ session }, target) => {
573
+ logCmd(ctx, session, '抽卡重置', { target })
556
574
  let uid = target && String(target).trim()
557
575
  if (!uid) return '请 @ 要重置的用户,或直接输入其用户 id'
558
576
  // 兼容 @at 引用:Koishi 会解析为 at 元素,从元素中提取目标用户 id
@@ -575,6 +593,9 @@ module.exports = {
575
593
  }
576
594
  })
577
595
  .action(async ({ session, options }, content) => {
596
+ const raw0 = session.content ? String(session.content).trim() : ''
597
+ const isReply = /\s+-i\s+\d+\s*$/.test(raw0.replace(/^反馈\s*/, '').trim()) || /^-i\s+\d+/.test(raw0.replace(/^反馈\s*/, '').trim())
598
+ logCmd(ctx, session, '反馈' + (isReply ? '(回复)' : ''), { content })
578
599
  // 从原始消息提取完整反馈文字(保留空格;text 类型会去掉空格)
579
600
  const raw = session.content ? String(session.content).trim() : ''
580
601
  const body = raw.replace(/^反馈\s*/, '').trim()
@@ -588,13 +609,38 @@ module.exports = {
588
609
  const replyText = optMatch ? body.replace(/\s+-i\s+\d+\s*$/, '').trim() : (content ? String(content).trim() : '')
589
610
  if (!replyText) return '请附上要回复给反馈者的内容,格式:反馈 <回复内容> -i <编号>'
590
611
  const bot = ctx.bots && ctx.bots.find(b => b.platform === record.platform && b.status === 1)
591
- if (!bot) return '反馈者所在平台没有可用的机器人,无法回复'
612
+ if (!bot) {
613
+ ctx.logger('dwrgbwiki').warn('回复反馈: 未找到可用机器人 | 目标=' + record.platform + ' | bots=' + JSON.stringify((ctx.bots || []).map(b => ({ p: b.platform, s: b.status, id: b.selfId || b.sid }))))
614
+ return '反馈者所在平台没有可用的机器人,无法回复'
615
+ }
616
+ // 优先回复到原发起反馈的群聊(channelId 是群消息端点用的 id),其次私聊反馈者
617
+ const targetChannel = record.channelId || record.guildId
618
+ if (targetChannel) {
619
+ try {
620
+ await bot.sendMessage(targetChannel, '【回复 #' + replyId + '】' + replyText + '\n(回复 ' + record.userId + ' 的反馈:' + String(record.content || '').slice(0, 50) + ')')
621
+ await feedbackStore.markReplied(replyId)
622
+ return '已回复编号 ' + replyId + '(已发到原反馈群)'
623
+ } catch (e) {
624
+ ctx.logger('dwrgbwiki').warn('回复反馈到原群失败,尝试私聊: ' + (e && e.message ? e.message : e) + ' | channelId=' + record.channelId + ' guildId=' + record.guildId + ' | stack: ' + (e && e.stack ? String(e.stack).slice(0, 200) : ''))
625
+ }
626
+ }
592
627
  try {
593
628
  await bot.sendPrivateMessage(record.userId, '【回复】' + replyText)
594
629
  await feedbackStore.markReplied(replyId)
595
630
  return '已回复编号 ' + replyId + ' 的反馈者'
596
631
  } catch (e) {
597
- ctx.logger('dwrgbwiki').warn('回复反馈失败: ' + (e && e.message ? e.message : e))
632
+ // 私聊失败时,若配置了反馈群则发到群里兜底
633
+ if (config.feedbackChannelId) {
634
+ try {
635
+ await bot.sendMessage(config.feedbackChannelId, '【反馈回复 #' + replyId + '】' + replyText + '\n(目标:' + record.userId + ',私聊失败已转发至此)')
636
+ await feedbackStore.markReplied(replyId)
637
+ return '已回复编号 ' + replyId + '(私聊失败,已转发到反馈群)'
638
+ } catch (e2) {
639
+ ctx.logger('dwrgbwiki').warn('回复反馈失败: ' + (e2 && e2.message ? e2.message : e2))
640
+ return '回复失败:' + (e2 && e2.message ? e2.message : e2)
641
+ }
642
+ }
643
+ ctx.logger('dwrgbwiki').warn('回复反馈失败: ' + (e && e.message ? e.message : e) + ' | stack: ' + (e && e.stack ? String(e.stack).slice(0, 300) : '') + ' | target: ' + record.platform + '/' + record.userId + ' | bot: ' + (bot.platform || '?') + ':' + (bot.selfId || bot.sid) + ' status=' + bot.status)
598
644
  return '回复失败:' + (e && e.message ? e.message : e)
599
645
  }
600
646
  }
@@ -609,28 +655,52 @@ module.exports = {
609
655
  senderName,
610
656
  platform: session.platform,
611
657
  userId: session.userId,
658
+ channelId: session.channelId || '',
659
+ guildId: session.guildId || '',
612
660
  time,
613
661
  })
614
662
  const feedbackMsg = '【反馈 #' + record.id + '】' + text + '\n反馈人:' + senderName + '\n来源:' + session.platform + '\n账号:' + session.userId + '\n时间:' + time + '\n回复:发送「反馈 <内容> -i ' + record.id + '」'
615
- // 推送反馈给配置的管理员账号
616
- if (config.feedbackPlatform && config.feedbackUserId) {
663
+ // 推送反馈:优先推送到指定群/频道,其次私聊管理员(QQ 官方机器人私聊有共同群限制)
664
+ const hasTarget = (config.feedbackPlatform && (config.feedbackChannelId || config.feedbackUserId))
665
+ if (hasTarget) {
617
666
  const bot = ctx.bots && ctx.bots.find(b => b.platform === config.feedbackPlatform && b.status === 1)
667
+ if (!bot) {
668
+ ctx.logger('dwrgbwiki').warn('反馈推送: 未找到可用机器人 | 目标=' + config.feedbackPlatform + ' | bots=' + JSON.stringify((ctx.bots || []).map(b => ({ p: b.platform, s: b.status, id: b.selfId || b.sid }))))
669
+ }
618
670
  if (bot) {
619
671
  try {
620
- await bot.sendPrivateMessage(config.feedbackUserId, feedbackMsg)
621
- return '已收到反馈(编号 #' + record.id + ')'
672
+ if (config.feedbackChannelId) {
673
+ await bot.sendMessage(config.feedbackChannelId, feedbackMsg)
674
+ } else {
675
+ await bot.sendPrivateMessage(config.feedbackUserId, feedbackMsg)
676
+ }
677
+ return '已收到反馈(编号 #' + record.id + '),如果想收到回复请联系本群群主打开允许机器人主动回复消息功能'
622
678
  } catch (e) {
623
- ctx.logger('dwrgbwiki').warn('反馈推送失败: ' + (e && e.message ? e.message : e))
679
+ ctx.logger('dwrgbwiki').warn('反馈推送失败: ' + (e && e.message ? e.message : e) + ' | stack: ' + (e && e.stack ? String(e.stack).slice(0, 300) : '') + ' | target: ' + config.feedbackPlatform + '/' + (config.feedbackChannelId || config.feedbackUserId) + ' | bot: ' + (bot.platform || '?') + ':' + (bot.selfId || bot.sid) + ' status=' + bot.status)
624
680
  return '已收到反馈(编号 #' + record.id + ',但推送给管理员失败,请稍后重试)'
625
681
  }
626
682
  }
627
683
  return '已收到反馈(编号 #' + record.id + ',但未找到可用的推送机器人,请稍后重试)'
628
684
  }
629
- return '已收到反馈(编号 #' + record.id + ')'
685
+ return '已收到反馈(编号 #' + record.id + '),如果想收到回复请联系本群群主打开允许机器人主动回复消息功能'
630
686
  })
631
687
  },
632
688
  }
633
689
 
690
+ // 记录指令调用日志(用户/平台/参数/耗时)
691
+ function logCmd(ctx, session, name, args, extra) {
692
+ try {
693
+ const logger = ctx.logger('dwrgbwiki')
694
+ const params = args && typeof args === 'object' ? JSON.stringify(args) : String(args || '')
695
+ const user = session && (session.username || session.userId || '未知')
696
+ const platform = session && session.platform || '?'
697
+ const info = ['指令', name, '| 用户', platform + ':' + user]
698
+ if (params && params !== '{}' && params !== '""') info.push('| 参数', params)
699
+ if (extra) info.push('|', extra)
700
+ logger.info(info.join(' '))
701
+ } catch (e) { /* 日志失败不影响主流程 */ }
702
+ }
703
+
634
704
  function cmdWidth(config, key) {
635
705
  const v = config[key]
636
706
  return (v && v > 0) ? v : (config.width || 1300)
package/match.js CHANGED
@@ -298,35 +298,35 @@ body { font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Microsoft YaHei'
298
298
  .page { max-width:${width}px; margin:0 auto; }
299
299
  .head { text-align:center; padding:22px 20px; border-radius:16px; margin-bottom:20px;
300
300
  background:linear-gradient(135deg, #667eea 0%, #764ba2 100%); box-shadow:0 6px 24px rgba(0,0,0,.35); }
301
- .player-id { font-size:30px; font-weight:800; color:#fff; letter-spacing:1px; }
302
- .player-team { font-size:15px; color:rgba(255,255,255,.85); margin-top:8px; }
301
+ .player-id { font-size:34px; font-weight:800; color:#fff; letter-spacing:1px; }
302
+ .player-team { font-size:17px; color:rgba(255,255,255,.85); margin-top:8px; }
303
303
  .role-tag { display:inline-flex; gap:10px; margin-top:12px; }
304
- .role-tag span { font-size:13px; font-weight:700; padding:5px 18px; border-radius:20px;
304
+ .role-tag span { font-size:15px; font-weight:700; padding:5px 18px; border-radius:20px;
305
305
  border:2px solid rgba(255,255,255,.5); background:rgba(255,255,255,.2); color:#fff; }
306
306
  .role-section { margin-bottom:22px; }
307
307
  .career { background:rgba(22,27,34,.75); border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:18px 20px; margin-bottom:14px; }
308
- .career-head { font-size:19px; font-weight:800; color:#ffd76d; margin-bottom:14px; letter-spacing:1px; }
308
+ .career-head { font-size:23px; font-weight:800; color:#ffd76d; margin-bottom:14px; letter-spacing:1px; }
309
309
  .stats-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr)); gap:10px; }
310
310
  .stat { background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.08); border-radius:10px; padding:10px 12px; text-align:center; }
311
- .stat-label { font-size:11.5px; color:#8b949e; margin-bottom:5px; }
312
- .stat-value { font-size:16px; font-weight:700; color:#fff; }
311
+ .stat-label { font-size:13.5px; color:#8b949e; margin-bottom:5px; }
312
+ .stat-value { font-size:19px; font-weight:700; color:#fff; }
313
313
  .stat-value.win { color:#3fb950; }
314
314
  .chars { display:flex; flex-wrap:wrap; gap:7px; margin-top:13px; justify-content:center; }
315
- .chip { font-size:12.5px; color:#79c0ff; background:rgba(88,166,255,.1); border:1px solid rgba(88,166,255,.25); border-radius:999px; padding:3px 11px; }
315
+ .chip { font-size:15px; color:#79c0ff; background:rgba(88,166,255,.1); border:1px solid rgba(88,166,255,.25); border-radius:999px; padding:3px 11px; }
316
316
  .table-wrap { background:rgba(22,27,34,.75); border:1px solid rgba(255,255,255,.09); border-radius:14px; overflow:hidden; }
317
317
  table { width:100%; border-collapse:collapse; }
318
- thead th { background:rgba(139,148,158,.1); color:#c9d1d9; font-size:12.5px; font-weight:700; padding:10px 9px; white-space:nowrap; }
319
- tbody td { text-align:center; padding:8px 9px; font-size:13px; border-top:1px solid rgba(255,255,255,.06); color:#e6edf3; white-space:nowrap; }
318
+ thead th { background:rgba(139,148,158,.1); color:#c9d1d9; font-size:15px; font-weight:700; padding:10px 9px; white-space:nowrap; }
319
+ tbody td { text-align:center; padding:8px 9px; font-size:15.5px; border-top:1px solid rgba(255,255,255,.06); color:#e6edf3; white-space:nowrap; }
320
320
  tbody tr:hover { background:rgba(255,255,255,.03); }
321
321
  td.sname { color:#79c0ff; font-weight:700; }
322
322
  td.win { color:#3fb950; font-weight:700; }
323
323
  td.draw { color:#d29922; }
324
324
  td.loss { color:#f85149; }
325
325
  .chars-inline { display:flex; flex-wrap:wrap; gap:5px; justify-content:center; }
326
- .chip-sm { font-size:11.5px; color:#e6edf3; background:rgba(88,166,255,.08); border:1px solid rgba(88,166,255,.2); border-radius:6px; padding:2px 7px; white-space:nowrap; }
326
+ .chip-sm { font-size:14px; color:#e6edf3; background:rgba(88,166,255,.08); border:1px solid rgba(88,166,255,.2); border-radius:6px; padding:2px 7px; white-space:nowrap; }
327
327
  .chip-sm i { font-style:normal; color:#8b949e; margin-left:3px; }
328
328
  .none { color:#8b949e; }
329
- .foot { text-align:center; color:#8b949e; font-size:12px; margin-top:16px; opacity:.75; }
329
+ .foot { text-align:center; color:#8b949e; font-size:14px; margin-top:16px; opacity:.75; }
330
330
  </style>
331
331
  </head>
332
332
  <body>
@@ -742,30 +742,30 @@ body { font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Microsoft YaHei'
742
742
  .page { max-width:${width}px; margin:0 auto; }
743
743
  .head { text-align:center; padding:20px; border-radius:16px; margin-bottom:20px;
744
744
  background:linear-gradient(135deg, #667eea 0%, #764ba2 100%); box-shadow:0 6px 24px rgba(0,0,0,.35); }
745
- .title { font-size:28px; font-weight:800; color:#fff; letter-spacing:1px; }
746
- .sub { font-size:14px; color:rgba(255,255,255,.85); margin-top:8px; }
745
+ .title { font-size:32px; font-weight:800; color:#fff; letter-spacing:1px; }
746
+ .sub { font-size:16px; color:rgba(255,255,255,.85); margin-top:8px; }
747
747
  .summary { background:rgba(22,27,34,.75); border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:16px 20px; margin-bottom:16px; }
748
- .summary-row { font-size:14px; line-height:1.9; color:#c9d1d9; }
748
+ .summary-row { font-size:17px; line-height:1.9; color:#c9d1d9; }
749
749
  .summary-row b { color:#fff; }
750
750
  .summary-row .cnt { color:#ffd76d; font-weight:700; margin:0 3px; }
751
751
  .summary-row .date { color:#79c0ff; }
752
- .warn { background:rgba(248,81,73,.1); border:1px solid rgba(248,81,73,.35); color:#f85149; font-size:13.5px;
752
+ .warn { background:rgba(248,81,73,.1); border:1px solid rgba(248,81,73,.35); color:#f85149; font-size:16px;
753
753
  border-radius:10px; padding:10px 16px; margin-bottom:14px; }
754
754
  .item { background:rgba(22,27,34,.75); border:1px solid rgba(255,255,255,.09); border-radius:14px; padding:16px 20px; margin-bottom:14px; }
755
755
  .item-head { display:flex; justify-content:space-between; align-items:flex-start; }
756
- .item-info { font-size:14px; color:#c9d1d9; line-height:1.6; }
756
+ .item-info { font-size:17px; color:#c9d1d9; line-height:1.6; }
757
757
  .item-info b { color:#fff; }
758
- .item-result { font-size:18px; font-weight:800; padding:4px 18px; border-radius:10px; }
758
+ .item-result { font-size:22px; font-weight:800; padding:4px 18px; border-radius:10px; }
759
759
  .item-result.win { color:#3fb950; background:rgba(63,185,80,.12); border:1px solid rgba(63,185,80,.35); }
760
760
  .item-result.loss { color:#f85149; background:rgba(248,81,73,.12); border:1px solid rgba(248,81,73,.35); }
761
761
  .item-result.draw { color:#d29922; background:rgba(210,153,34,.12); border:1px solid rgba(210,153,34,.35); }
762
- .item-score { font-size:15px; font-weight:700; color:#fff; margin:10px 0 8px; }
762
+ .item-score { font-size:18px; font-weight:700; color:#fff; margin:10px 0 8px; }
763
763
  .games { margin-top:8px; }
764
764
  .game-tbl { width:100%; border-collapse:collapse; }
765
- .game-tbl th { background:rgba(139,148,158,.1); color:#8b949e; font-size:12px; font-weight:700; padding:7px 8px; text-align:center; white-space:nowrap; }
766
- .game-tbl td { text-align:center; padding:6px 8px; font-size:12.5px; border-top:1px solid rgba(255,255,255,.06); color:#e6edf3; white-space:nowrap; }
765
+ .game-tbl th { background:rgba(139,148,158,.1); color:#8b949e; font-size:14.5px; font-weight:700; padding:7px 8px; text-align:center; white-space:nowrap; }
766
+ .game-tbl td { text-align:center; padding:6px 8px; font-size:15px; border-top:1px solid rgba(255,255,255,.06); color:#e6edf3; white-space:nowrap; }
767
767
  .none { color:#8b949e; }
768
- .foot { text-align:center; color:#8b949e; font-size:12px; margin-top:16px; opacity:.75; }
768
+ .foot { text-align:center; color:#8b949e; font-size:14px; margin-top:16px; opacity:.75; }
769
769
  </style>
770
770
  </head>
771
771
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koishi-plugin-dwrgbwiki",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "第五人格BWIKI编辑组开发,所有代码由DeepSeek V4 Flash 0731编写。支持胜率/地图/模仿者/勋章/基础数据查询、图鉴查询、wiki页面截图、藏头诗、抽卡模拟、加页手记探索、赛事数据(选手/对决)、公告变动推送、反馈系统等功能。",
5
5
  "main": "index.js",
6
6
  "files": [