From 890ccb10d51d725cc5f57182aa9b83738a06e235 Mon Sep 17 00:00:00 2001 From: jie65535 Date: Sat, 20 Jun 2026 22:57:52 +0800 Subject: [PATCH] Separate real group role from title in serialized name card MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A custom special title (e.g. a troll "群主" given to a regular member) used to override the permission-based role, misleading the LLM about who actually holds authority. Now the real role (群主/管理员/群员) from member.permission is always shown, with the title slot showing the special title (labeled 头衔"…") when present, otherwise falling back to the activity-level temperatureTitle that everyone sees in chat. Co-Authored-By: Claude Opus 4.8 --- src/main/kotlin/JChatGPT.kt | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/JChatGPT.kt b/src/main/kotlin/JChatGPT.kt index bfabf90..b1fd229 100644 --- a/src/main/kotlin/JChatGPT.kt +++ b/src/main/kotlin/JChatGPT.kt @@ -982,19 +982,22 @@ object JChatGPT : KotlinPlugin( private fun getNameCard(member: Member): String { val nameCard = StringBuilder() // 群活跃等级 - nameCard.append("【lv").append(member.active.temperature).append(" ") + nameCard.append("【lv").append(member.active.temperature) + // 真实群身份:始终按实际权限显示,不会被专属头衔覆盖 + nameCard.append(' ').append( + when (member.permission) { + OWNER -> "群主" + ADMINISTRATOR -> "管理员" + MEMBER -> "群员" + } + ) + // 头衔:有专属头衔则显示专属头衔(群主可任意赋予,可能与真实身份不符,故标注"头衔"以区分), + // 否则回退到聊天窗口可见的活跃等级称号 try { - // 群头衔 if (member.specialTitle.isNotEmpty()) { - nameCard.append(member.specialTitle) - } else { - nameCard.append( - when (member.permission) { - OWNER -> "群主" - ADMINISTRATOR -> "管理员" - MEMBER -> member.temperatureTitle - } - ) + nameCard.append(" 头衔\"").append(member.specialTitle).append('"') + } else if (member.temperatureTitle.isNotEmpty()) { + nameCard.append(' ').append(member.temperatureTitle) } } catch (e: Throwable) { logger.warning("获取群头衔失败", e)