summary refs log tree commit diff
path: root/extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs
diff options
context:
space:
mode:
Diffstat (limited to 'extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs')
-rw-r--r--extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs43
1 files changed, 43 insertions, 0 deletions
diff --git a/extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs b/extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs

index 1693edd3..3f7c4fb6 100644 --- a/extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs +++ b/extra/admin-api/DataMappings/Spacebar.DataMappings.Generic/Member.cs
@@ -20,4 +20,47 @@ public static class MemberExtensions Roles = member.Roles.Select(x => x.Id).ToList() }; } + + public static MemberWithPresence ToPublicMemberWithPresence(this Models.Db.Models.Member member, PartialUser? partialUser = null) + { + var onlineSessions = member.IdNavigation.Sessions.Where(x => x.Status is not ("offline" or "invisible" or "unknown")).ToList(); + var presence = new Presence() + { + User = partialUser ?? member.IdNavigation.ToPartialUser(), + Status = onlineSessions.OrderByDescending(x => x.LastSeen).First().Status, + GuildId = member.GuildId, + Activities = onlineSessions.SelectMany(x => x.GetActivities()).ToList(), + ClientStatus = onlineSessions.Aggregate(new Presence.ClientStatuses() { }, (res, sess) => + { + var cs = sess.GetClientStatuses(); + string? Maybe(string? source) + { + if (!string.IsNullOrWhiteSpace(source) && source is not ("offline" or "invisible" or "unknown")) return source; + return null; + } + + res.Desktop ??= Maybe(cs.Desktop); + res.Embedded ??= Maybe(cs.Embedded); + res.Mobile ??= Maybe(cs.Mobile); + res.Vr ??= Maybe(cs.Vr); + res.Web ??= Maybe(cs.Web); + + return res; + }) + }; + + return new() + { + User = partialUser ?? member.IdNavigation.ToPartialUser(), + AvatarDecorationData = member.AvatarDecorationData, + Avatar = string.IsNullOrWhiteSpace(member.Avatar) ? null : member.Avatar, + Banner = string.IsNullOrWhiteSpace(member.Banner) ? null : member.Banner, + Collectibles = member.Collectibles, + DisplayNameStyles = JsonSerializer.Deserialize<DisplayNameStyle>(member.DisplayNameStyles ?? "null"), + Bio = string.IsNullOrWhiteSpace(member.Bio) ? null : member.Bio, + Nick = string.IsNullOrWhiteSpace(member.Nick) ? null : member.Nick, + Roles = member.Roles.Select(x => x.Id).ToList(), + Presence = presence + }; + } } \ No newline at end of file