summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs
diff options
context:
space:
mode:
Diffstat (limited to 'extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs')
-rw-r--r--extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs147
1 files changed, 11 insertions, 136 deletions
diff --git a/extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs b/extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs

index 2c417bf8..0b7b5c82 100644 --- a/extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs +++ b/extra/admin-api/Spacebar.GatewayOffload/Controllers/Op12Controller.cs
@@ -1,14 +1,13 @@ -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; using System.Text.Json; -using System.Text.Json.Serialization; +using System.Text.Json.Nodes; using ArcaneLibs.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Spacebar.Interop.Authentication.AspNetCore; using Spacebar.Interop.Replication.Abstractions; using Spacebar.Models.Db.Contexts; -using Spacebar.Models.Db.Models; +using Spacebar.Models.Gateway; +using Spacebar.Models.Generic; namespace Spacebar.GatewayOffload.Controllers; @@ -46,7 +45,7 @@ public class Op12Controller(ILogger<Op12Controller> logger, SpacebarAspNetAuthen !s.IsAdminSession && (s.Status != "offline" && s.Status != "invisible") && (memberCount < 1000 || s.LastSeen >= offlineTreshold))) .Where(x => x.IdNavigation.Sessions.Count > 0) // ignore members without sessions .ToListAsync(); - + var mappedPartialUsers = members.Select(x => x.IdNavigation).ToDictionary(x => x.Id, x => new PartialUser() { Id = x.Id, Discriminator = x.Discriminator, @@ -66,21 +65,22 @@ public class Op12Controller(ILogger<Op12Controller> logger, SpacebarAspNetAuthen var mappedMembers = members.ToDictionary(m => m.Id, m => new Member() { User = mappedPartialUsers[m.Id], AvatarDecorationData = m.AvatarDecorationData, - Avatar = m.Avatar, - Banner = m.Banner, + Avatar = string.IsNullOrWhiteSpace(m.Avatar) ? null : m.Avatar, + Banner = string.IsNullOrWhiteSpace(m.Banner) ? null : m.Banner, Collectibles = m.Collectibles, DisplayNameStyles = m.DisplayNameStyles, - Bio = m.Bio, - Nick = m.Nick + Bio = string.IsNullOrWhiteSpace(m.Bio) ? null : m.Bio, + Nick = string.IsNullOrWhiteSpace(m.Nick) ? null : m.Nick }); var presences = members.Select(x => x.IdNavigation).Where(x => x.Sessions.Count > 0).ToDictionary(x => x.Id, x => { var sortedSessions = x.Sessions.OrderByDescending(s => s.LastSeen).ToList(); return new PresenceResponse() { GuildId = guildId, User = mappedPartialUsers[x.Id], - Activities = x.Sessions.SelectMany(s => JsonSerializer.Deserialize<object[]>(s.Activities)).ToList(), + Activities = x.Sessions.Where(s => s.Status is not ("offline" or "invisible" or "unknown")) + .SelectMany(s => JsonSerializer.Deserialize<JsonObject[]>(s.Activities) ?? []).ToList(), Status = sortedSessions.FirstOrDefault(s => !string.IsNullOrWhiteSpace(s.Status))?.Status ?? "offline", - ClientStatus = JsonSerializer.Deserialize<PresenceResponse.ClientStatuses>(sortedSessions.First(s => !string.IsNullOrWhiteSpace(s.ClientStatus)).ClientStatus) + ClientStatus = JsonSerializer.Deserialize<PresenceResponse.ClientStatuses>(sortedSessions.First(s => !string.IsNullOrWhiteSpace(s.ClientStatus)).ClientStatus) ?? new() }; }).Where(x => x.Value.Activities.Count > 0).ToDictionary(); @@ -91,129 +91,4 @@ public class Op12Controller(ILogger<Op12Controller> logger, SpacebarAspNetAuthen }; return r; } -} - -public class GuildSyncResponse { - [JsonPropertyName("id")] - public string GuildId { get; set; } - - [JsonPropertyName("presences")] - public List<PresenceResponse> Presences { get; set; } - - [JsonPropertyName("members")] - public List<Member> Members { get; set; } -} - -public class PresenceResponse { - [JsonPropertyName("user")] - public required PartialUser User { get; set; } - - [JsonPropertyName("guild_id"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? GuildId { get; set; } - - [JsonPropertyName("status")] - public string Status { get; set; } = "unknown"; - - [JsonPropertyName("activities")] - public List<object> Activities { get; set; } - - [JsonPropertyName("hidden_activities")] - - public List<object?> HiddenActivities { get; set; } - - [JsonPropertyName("client_status")] - public ClientStatuses ClientStatus { get; set; } - - [JsonPropertyName("has_played_game")] - public bool? HasPlayedGame { get; set; } - - [SuppressMessage("ReSharper", "UnusedMember.Local")] - public class ClientStatuses { - [JsonPropertyName("desktop"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Desktop { get; set; } - - [JsonPropertyName("mobile"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Mobile { get; set; } - - [JsonPropertyName("web"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Web { get; set; } - - [JsonPropertyName("embedded"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Embedded { get; set; } - - [JsonPropertyName("vr"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string? Vr { get; set; } - } -} - -[DebuggerDisplay("{Id} ({Username}#{Discriminator})")] -public class PartialUser { - [JsonPropertyName("id")] - public required string Id { get; set; } - - [JsonPropertyName("username")] - public string Username { get; set; } - - [JsonPropertyName("discriminator")] - public string Discriminator { get; set; } - - [JsonPropertyName("global_name")] - public string? GlobalName { get; set; } - - [JsonPropertyName("avatar")] - public string? Avatar { get; set; } - - [JsonPropertyName("avatar_decoration_data")] - public object? AvatarDecorationData { get; set; } - - [JsonPropertyName("collectibles")] - public object? Collectibles { get; set; } - - [JsonPropertyName("display_name_styles")] - public object? DisplayNameStyles { get; set; } - - [JsonPropertyName("primary_guild")] - public object? PrimaryGuild { get; set; } - - [JsonPropertyName("bot")] - public bool? Bot { get; set; } - - [JsonPropertyName("system")] - public bool? System { get; set; } - - [JsonPropertyName("banner")] - public string? Banner { get; set; } - - [JsonPropertyName("accent_color")] - public int? AccentColor { get; set; } - - [JsonPropertyName("public_flags")] - public ulong? PublicFlags { get; set; } -} - -[DebuggerDisplay("{User.Id} ({User.Username}#{User.Discriminator})")] -public class Member { - [JsonPropertyName("user")] - public required PartialUser User { get; set; } - - [JsonPropertyName("nick")] - public string? Nick { get; set; } - - [JsonPropertyName("avatar")] - public string? Avatar { get; set; } - - [JsonPropertyName("avatar_decoration_data")] - public object? AvatarDecorationData { get; set; } - - [JsonPropertyName("collectibles")] - public object? Collectibles { get; set; } - - [JsonPropertyName("display_name_styles")] - public object? DisplayNameStyles { get; set; } - - [JsonPropertyName("banner")] - public string? Banner { get; set; } - - [JsonPropertyName("bio")] - public string? Bio { get; set; } } \ No newline at end of file