koishi-plugin-group-verification 1.0.38 → 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
@@ -449,17 +449,30 @@ async function handleGuildMemberRequestEvent(ctx, session) {
449
449
  {
450
450
  const isId = /* @__PURE__ */ __name((s) => !s || s === userId, "isId");
451
451
  let resolvedName;
452
- const evUser = session.event?.user;
453
- if (!isId(evUser?.name)) resolvedName = evUser.name;
454
- else if (!isId(evUser?.nick)) resolvedName = evUser.nick;
452
+ const authorUser = session.author?.user;
453
+ if (!isId(authorUser?.name)) resolvedName = authorUser.name;
454
+ else if (!isId(authorUser?.nick)) resolvedName = authorUser.nick;
455
455
  if (!resolvedName) {
456
456
  const author = session.author;
457
457
  if (!isId(author?.name)) resolvedName = author.name;
458
458
  else if (!isId(author?.nick)) resolvedName = author.nick;
459
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
+ }
460
465
  if (!resolvedName && !isId(session.username)) {
461
466
  resolvedName = session.username;
462
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
+ }
463
476
  if (!resolvedName) {
464
477
  try {
465
478
  const userInfo = await session.bot.getUser(userId);
@@ -469,7 +482,7 @@ async function handleGuildMemberRequestEvent(ctx, session) {
469
482
  }
470
483
  }
471
484
  session.username = resolvedName || userId;
472
- clogV(`昵称解析: userId=${userId} resolved="${session.username}" evUser=${JSON.stringify(evUser)} author=${JSON.stringify(session.author)}`);
485
+ clogV(`昵称解析: userId=${userId} resolved="${session.username}" authorUser=${JSON.stringify(authorUser)} author=${JSON.stringify(session.author)} event.user=${JSON.stringify(session.event?.user)}`);
473
486
  }
474
487
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config, message, session);
475
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.38",
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
@@ -610,34 +610,50 @@ export async function handleGuildMemberRequestEvent(ctx: Context, session: any)
610
610
  }
611
611
 
612
612
  // 解析用户昵称优先级:
613
- // 1) event 原始数据(NapCat/OneBot 入群申请事件本身携带昵称)
614
- // 2) session.author.name / session.author.nick
615
- // 3) session.username(若非 userId)
616
- // 4) getUser() API
617
- // 5) 最终 fallback:userId
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
618
619
  {
619
620
  const isId = (s: string | undefined) => !s || s === userId
620
621
 
621
622
  let resolvedName: string | undefined
622
623
 
623
- // 优先级1:event 原始数据
624
- const evUser = (session.event as any)?.user
625
- if (!isId(evUser?.name)) resolvedName = evUser.name
626
- else if (!isId(evUser?.nick)) resolvedName = evUser.nick
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
627
628
 
628
- // 优先级2:author 字段
629
+ // 优先级2:author 自身的 name/nick(群昵称)
629
630
  if (!resolvedName) {
630
631
  const author = session.author as any
631
- if (!isId(author?.name)) resolvedName = author.name
632
+ if (!isId(author?.name)) resolvedName = author.name
632
633
  else if (!isId(author?.nick)) resolvedName = author.nick
633
634
  }
634
635
 
635
- // 优先级3:session.username
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
636
644
  if (!resolvedName && !isId(session.username)) {
637
645
  resolvedName = session.username
638
646
  }
639
647
 
640
- // 优先级4:API 拉取(get_stranger_info)
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
+ }
641
657
  if (!resolvedName) {
642
658
  try {
643
659
  const userInfo = await session.bot.getUser(userId)
@@ -647,7 +663,7 @@ export async function handleGuildMemberRequestEvent(ctx: Context, session: any)
647
663
  }
648
664
 
649
665
  session.username = resolvedName || userId
650
- clogV(`昵称解析: userId=${userId} resolved="${session.username}" evUser=${JSON.stringify(evUser)} author=${JSON.stringify((session as any).author)}`)
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)}`)
651
667
  }
652
668
 
653
669
  const { isValid, matchedCount, requiredThreshold } = await verifyApplication(config, message, session);