From 80c802af20c24c75891f1b42b524005c57afaf4a Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Sat, 12 Sep 2026 10:06:28 +0800 Subject: [PATCH] add nickname to group member payloads --- server/im_http.go | 17 +++++++++++++++++ server/im_http_test.go | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/server/im_http.go b/server/im_http.go index 7c67c33..ece51fb 100644 --- a/server/im_http.go +++ b/server/im_http.go @@ -7556,6 +7556,7 @@ func groupMemberPayload(sub types.Subscription, mentionable bool, remark string) access := sub.ModeGiven & sub.ModeWant user := &types.User{ObjHeader: types.ObjHeader{Id: sub.User}, Public: sub.GetPublic(), Trusted: sub.GetTrusted()} data := userSummaryPayload(user, remark) + copyUserNickname(data, sub.GetPublic()) if private := groupPrivateMap(sub.Private); stringFromAny(private["nickname"]) != "" { data["group_nickname"] = stringFromAny(private["nickname"]) } @@ -7573,6 +7574,7 @@ func groupBusinessMemberPayload(member types.GroupMember, remark string) map[str access := groupMemberAccess(member) user := &types.User{ObjHeader: types.ObjHeader{Id: member.UserID.String()}, Public: member.Public, Trusted: member.Trusted} data := userSummaryPayload(user, remark) + copyUserNickname(data, member.Public) if nickname := strings.TrimSpace(member.Nickname); nickname != "" { data["group_nickname"] = nickname } @@ -7586,6 +7588,21 @@ func groupBusinessMemberPayload(member types.GroupMember, remark string) map[str return data } +func copyUserNickname(data map[string]any, public any) { + var fields map[string]any + if value, ok := public.(map[string]any); ok { + fields = value + } else if value, ok := public.(types.KVMap); ok { + fields = map[string]any(value) + } + if fields == nil { + return + } + if nickname := strings.TrimSpace(fmt.Sprint(fields["nickname"])); nickname != "" { + data["nickname"] = nickname + } +} + func groupMemberRemarkMap(tenantID types.TenantID, viewer types.Uid, members []types.GroupMember) map[types.Uid]string { remarks := make(map[types.Uid]string) for _, member := range members { diff --git a/server/im_http_test.go b/server/im_http_test.go index 0e41699..1b4717f 100644 --- a/server/im_http_test.go +++ b/server/im_http_test.go @@ -4144,7 +4144,7 @@ func TestServeIMGroupMembers(t *testing.T) { ModeWant: types.ModeCPublic, ModeGiven: types.ModeCPublic, Nickname: "群里小王", - Public: map[string]any{"display_name": "Alice", "avatar_file_id": "alice.jpg"}, + Public: map[string]any{"display_name": "Alice", "nickname": "Alice原名", "avatar_file_id": "alice.jpg"}, MemberStatus: types.GroupMemberStatusActive, }} @@ -4160,6 +4160,7 @@ func TestServeIMGroupMembers(t *testing.T) { data := decodeIMHTTPResponse(t, rec).Data.(map[string]any) items := data["items"].([]any) if len(items) != 1 || items[0].(map[string]any)["display_name"] != "老王" || + items[0].(map[string]any)["nickname"] != "Alice原名" || items[0].(map[string]any)["group_nickname"] != "群里小王" || items[0].(map[string]any)["avatar_file_id"] != "alice.jpg" || items[0].(map[string]any)["mentionable"] != true {