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
|