koishi-plugin-group-verification 1.0.37 → 1.0.39

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/index.js CHANGED
@@ -447,16 +447,42 @@ async function handleGuildMemberRequestEvent(ctx, session) {
447
447
  logger.warn("黑名单检查失败", e);
448
448
  }
449
449
  {
450
+ const isId = /* @__PURE__ */ __name((s) => !s || s === userId, "isId");
450
451
  let resolvedName;
451
- try {
452
- const userInfo = await session.bot.getUser(userId);
453
- if (userInfo?.name) resolvedName = userInfo.name;
454
- } catch (_) {
455
- }
456
- if (!resolvedName && session.username && session.username !== userId) {
452
+ const authorUser = session.author?.user;
453
+ if (!isId(authorUser?.name)) resolvedName = authorUser.name;
454
+ else if (!isId(authorUser?.nick)) resolvedName = authorUser.nick;
455
+ if (!resolvedName) {
456
+ const author = session.author;
457
+ if (!isId(author?.name)) resolvedName = author.name;
458
+ else if (!isId(author?.nick)) resolvedName = author.nick;
459
+ }
460
+ if (!resolvedName) {
461
+ const evUser = session.event?.user;
462
+ if (!isId(evUser?.name)) resolvedName = evUser?.name;
463
+ else if (!isId(evUser?.nick)) resolvedName = evUser?.nick;
464
+ }
465
+ if (!resolvedName && !isId(session.username)) {
457
466
  resolvedName = session.username;
458
467
  }
468
+ if (!resolvedName) {
469
+ try {
470
+ const member = await session.bot.getGuildMember(guildId, userId);
471
+ const n = member?.user?.name || member?.name || member?.nick;
472
+ if (!isId(n)) resolvedName = n;
473
+ } catch (_) {
474
+ }
475
+ }
476
+ if (!resolvedName) {
477
+ try {
478
+ const userInfo = await session.bot.getUser(userId);
479
+ const n = userInfo?.name || userInfo?.nickname;
480
+ if (!isId(n)) resolvedName = n;
481
+ } catch (_) {
482
+ }
483
+ }
459
484
  session.username = resolvedName || userId;
485
+ clogV(`昵称解析: userId=${userId} resolved="${session.username}" authorUser=${JSON.stringify(authorUser)} author=${JSON.stringify(session.author)} event.user=${JSON.stringify(session.event?.user)}`);
460
486
  }
461
487
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config, message, session);
462
488
  clogV(`验证结果 guild=${guildId} user=${userId} msg="${message}" matched=${matchedCount} threshold=${requiredThreshold} valid=${isValid}`);
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "bugs": {
9
9
  "url": "https://github.com/LHDyx/koishi-plugin-group-verification/issues"
10
10
  },
11
- "version": "1.0.37",
11
+ "version": "1.0.39",
12
12
  "main": "lib/index.js",
13
13
  "typings": "lib/index.d.ts",
14
14
  "files": [
package/src/index.ts CHANGED
@@ -609,17 +609,61 @@ export async function handleGuildMemberRequestEvent(ctx: Context, session: any)
609
609
  logger.warn('黑名单检查失败', e);
610
610
  }
611
611
 
612
- // 解析用户昵称优先级:1) API拉取昵称 2) session.username(若非userId) 3) userId
612
+ // 解析用户昵称优先级:
613
+ // 1) session.author.user.name — Koishi GuildMember.user.name(官方标准字段)
614
+ // 2) session.author.name / .nick — 群昵称
615
+ // 3) event 原始 user 字段
616
+ // 4) session.username(若非 userId)
617
+ // 5) getGuildMember() API(申请人尚未入群,通常失败)→ getUser() API
618
+ // 6) 最终 fallback:userId
613
619
  {
620
+ const isId = (s: string | undefined) => !s || s === userId
621
+
614
622
  let resolvedName: string | undefined
615
- try {
616
- const userInfo = await session.bot.getUser(userId)
617
- if (userInfo?.name) resolvedName = userInfo.name
618
- } catch (_) {}
619
- if (!resolvedName && session.username && session.username !== userId) {
623
+
624
+ // 优先级1:GuildMember.user.name OneBot 适配器将申请人 User 对象放在 author.user
625
+ const authorUser = (session.author as any)?.user
626
+ if (!isId(authorUser?.name)) resolvedName = authorUser.name
627
+ else if (!isId(authorUser?.nick)) resolvedName = authorUser.nick
628
+
629
+ // 优先级2:author 自身的 name/nick(群昵称)
630
+ if (!resolvedName) {
631
+ const author = session.author as any
632
+ if (!isId(author?.name)) resolvedName = author.name
633
+ else if (!isId(author?.nick)) resolvedName = author.nick
634
+ }
635
+
636
+ // 优先级3:event 原始 user 字段
637
+ if (!resolvedName) {
638
+ const evUser = (session.event as any)?.user
639
+ if (!isId(evUser?.name)) resolvedName = evUser?.name
640
+ else if (!isId(evUser?.nick)) resolvedName = evUser?.nick
641
+ }
642
+
643
+ // 优先级4:session.username
644
+ if (!resolvedName && !isId(session.username)) {
620
645
  resolvedName = session.username
621
646
  }
647
+
648
+ // 优先级5:API 拉取
649
+ if (!resolvedName) {
650
+ try {
651
+ // 先尝试 getGuildMember(申请人未入群时会 throw,正常)
652
+ const member = await session.bot.getGuildMember(guildId, userId)
653
+ const n = member?.user?.name || member?.name || (member as any)?.nick
654
+ if (!isId(n)) resolvedName = n
655
+ } catch (_) {}
656
+ }
657
+ if (!resolvedName) {
658
+ try {
659
+ const userInfo = await session.bot.getUser(userId)
660
+ const n = (userInfo as any)?.name || (userInfo as any)?.nickname
661
+ if (!isId(n)) resolvedName = n
662
+ } catch (_) {}
663
+ }
664
+
622
665
  session.username = resolvedName || userId
666
+ clogV(`昵称解析: userId=${userId} resolved="${session.username}" authorUser=${JSON.stringify(authorUser)} author=${JSON.stringify((session as any).author)} event.user=${JSON.stringify((session.event as any)?.user)}`)
623
667
  }
624
668
 
625
669
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config, message, session);