add nickname to group member payloads

This commit is contained in:
richjohnrambo
2026-09-12 10:06:28 +08:00
parent a9a4970d9f
commit 80c802af20
2 changed files with 19 additions and 1 deletions
+17
View File
@@ -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 {
+2 -1
View File
@@ -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 {