fix: align member meta default avatars

This commit is contained in:
richjohnrambo
2026-09-24 11:00:19 +08:00
parent 75216c311d
commit 48ca3ae684
4 changed files with 108 additions and 6 deletions
+50 -2
View File
@@ -16,12 +16,60 @@ const (
)
func applyDefaultUserAvatar(data map[string]any, userID, gender string) {
if data == nil || strings.TrimSpace(stringFromAny(data["avatar_file_id"])) != "" {
if data == nil {
return
}
if avatarURL := defaultUserAvatarURL(userID, gender); avatarURL != "" {
if strings.TrimSpace(stringFromAny(data["avatar_file_id"])) == "" {
avatarURL := defaultUserAvatarURL(userID, gender)
if avatarURL == "" {
return
}
data["avatar_file_id"] = avatarURL
}
applyAvatarURL(data)
}
func applyAvatarURL(data map[string]any) {
if data == nil || strings.TrimSpace(stringFromAny(data["avatar_url"])) != "" {
return
}
avatar := strings.TrimSpace(stringFromAny(data["avatar_file_id"]))
if isAvatarURLValue(avatar) {
data["avatar_url"] = avatar
}
}
func publicWithDefaultUserAvatar(public any, userID string) any {
data := publicToMap(public)
gender := stringFromAny(data["gender"])
applyDefaultUserAvatar(data, userID, gender)
return data
}
func publicToMap(public any) map[string]any {
switch value := public.(type) {
case nil:
return map[string]any{}
case map[string]any:
out := make(map[string]any, len(value)+1)
for k, v := range value {
out[k] = v
}
return out
case types.KVMap:
out := make(map[string]any, len(value)+1)
for k, v := range value {
out[k] = v
}
return out
default:
return map[string]any{}
}
}
func isAvatarURLValue(value string) bool {
return strings.HasPrefix(value, "http://") || strings.HasPrefix(value, "https://") ||
strings.HasPrefix(value, "data:") || strings.HasPrefix(value, "/")
}
func defaultUserAvatarURL(userID, gender string) string {