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 +32 -6
- package/package.json +1 -1
- package/src/index.ts +50 -6
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
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
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
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
|
-
// 解析用户昵称优先级:
|
|
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
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
if (!resolvedName
|
|
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);
|