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 +17 -4
- package/package.json +1 -1
- package/src/index.ts +30 -14
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
|
|
453
|
-
if (!isId(
|
|
454
|
-
else if (!isId(
|
|
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}"
|
|
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
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)
|
|
614
|
-
// 2) session.author.name /
|
|
615
|
-
// 3)
|
|
616
|
-
// 4)
|
|
617
|
-
// 5)
|
|
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:
|
|
624
|
-
const
|
|
625
|
-
if (!isId(
|
|
626
|
-
else if (!isId(
|
|
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))
|
|
632
|
+
if (!isId(author?.name)) resolvedName = author.name
|
|
632
633
|
else if (!isId(author?.nick)) resolvedName = author.nick
|
|
633
634
|
}
|
|
634
635
|
|
|
635
|
-
// 优先级3:
|
|
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
|
-
// 优先级
|
|
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}"
|
|
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);
|