summary refs log tree commit diff
path: root/extra/admin-api/Models
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs72
-rw-r--r--extra/admin-api/Models/Spacebar.Models.Gateway/LazyRequest.cs4
-rw-r--r--extra/admin-api/Models/Spacebar.Models.Generic/Member.cs4
-rw-r--r--extra/admin-api/Models/Spacebar.Models.Generic/User.cs47
4 files changed, 94 insertions, 33 deletions
diff --git a/extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs b/extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs

index 45d28467f..d1692cc79 100644 --- a/extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs +++ b/extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs
@@ -3,7 +3,8 @@ using System.Text.Json.Nodes; using System.Text.Json.Serialization; using Spacebar.Models.Generic; -public class GuildMemberListUpdate { +public class GuildMemberListUpdate +{ public const string EventId = "GUILD_MEMBER_LIST_UPDATE"; [JsonPropertyName("id")] @@ -22,11 +23,12 @@ public class GuildMemberListUpdate { public List<GuildMemberListUpdateOperation> Operations { get; set; } = null!; [JsonPropertyName("groups")] - public List<GuildMemberListSyncItem.RoleEntry> Groups { get; set; } = null!; + public List<GuildMemberListSyncItem.RoleEntry.Content> Groups { get; set; } = null!; } // i cba to write a dictionary converter for this... -public class GuildMemberListGroupCount { +public class GuildMemberListGroupCount +{ /// <summary> /// Role ID, "online" or "offline" /// </summary> @@ -40,24 +42,28 @@ public class GuildMemberListGroupCount { public static implicit operator GuildMemberListGroupCount(KeyValuePair<string, int> kvp) => new() { Id = kvp.Key, Count = kvp.Value }; } -public enum GuildMemberListUpdateOperationType { - [JsonStringEnumMemberName("sync")] Sync = 0, - [JsonStringEnumMemberName("insert")] Insert = 1, - [JsonStringEnumMemberName("update")] Update = 2, - [JsonStringEnumMemberName("delete")] Delete = 3, +[JsonConverter(typeof(JsonStringEnumConverter<GuildMemberListUpdateOperationType>))] +public enum GuildMemberListUpdateOperationType +{ + [JsonStringEnumMemberName("SYNC")] Sync = 0, + [JsonStringEnumMemberName("INSERT")] Insert = 1, + [JsonStringEnumMemberName("UPDATE")] Update = 2, + [JsonStringEnumMemberName("DELETE")] Delete = 3, - [JsonStringEnumMemberName("invalidate")] + [JsonStringEnumMemberName("INVALIDATE")] Invalidate = 4 } #region Operations [JsonConverter(typeof(GuildMemberListUpdateOperationJsonConverter))] -public class GuildMemberListUpdateOperation { +public class GuildMemberListUpdateOperation +{ [JsonPropertyName("op")] public GuildMemberListUpdateOperationType Operation { get; set; } - - public class SyncOperation : GuildMemberListUpdateOperation { + + public class SyncOperation : GuildMemberListUpdateOperation + { [JsonPropertyName("range")] public int[] Range { get; set; } = null!; @@ -67,25 +73,36 @@ public class GuildMemberListUpdateOperation { } [JsonConverter(typeof(GuildMemberListSyncItemJsonConverter))] -public class GuildMemberListSyncItem { - public class RoleEntry : GuildMemberListSyncItem { - [JsonPropertyName("id")] - public string Id { get; set; } +public class GuildMemberListSyncItem +{ + public class RoleEntry : GuildMemberListSyncItem + { + [JsonPropertyName("group")] + public Content Group { get; set; } + + public class Content + { + [JsonPropertyName("id")] + public string Id { get; set; } - [JsonPropertyName("count")] - public long Count { get; set; } + [JsonPropertyName("count")] + public long Count { get; set; } + } } - public class MemberEntry : GuildMemberListSyncItem { + public class MemberEntry : GuildMemberListSyncItem + { [JsonPropertyName("member")] public Member Member { get; set; } = null!; } } -public class GuildMemberListSyncItemJsonConverter : JsonConverter<GuildMemberListSyncItem> { - public override GuildMemberListSyncItem? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { +public class GuildMemberListSyncItemJsonConverter : JsonConverter<GuildMemberListSyncItem> +{ + public override GuildMemberListSyncItem? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { var n = JsonSerializer.Deserialize<JsonObject>(ref reader, options); - if (n.ContainsKey("id") && n.ContainsKey("count")) return n.Deserialize<GuildMemberListSyncItem.RoleEntry>(); + if (n.ContainsKey("group")) return n.Deserialize<GuildMemberListSyncItem.RoleEntry>(); if (n.ContainsKey("member")) return n.Deserialize<GuildMemberListSyncItem>(); throw new InvalidOperationException("Could not determine sync item type for keys " + string.Join(", ", n.Select(x => x.Key))); } @@ -94,11 +111,14 @@ public class GuildMemberListSyncItemJsonConverter : JsonConverter<GuildMemberLis JsonSerializer.Serialize(writer, value, value.GetType(), options); } -public class GuildMemberListUpdateOperationJsonConverter : JsonConverter<GuildMemberListUpdateOperation> { - public override GuildMemberListUpdateOperation? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { +public class GuildMemberListUpdateOperationJsonConverter : JsonConverter<GuildMemberListUpdateOperation> +{ + public override GuildMemberListUpdateOperation? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { var n = JsonSerializer.Deserialize<JsonObject>(ref reader, options); - return n!["op"]!.GetValue<string>() switch { - "sync" => n.Deserialize<GuildMemberListUpdateOperation.SyncOperation>(), + return n!["op"]!.GetValue<string>() switch + { + "SYNC" => n.Deserialize<GuildMemberListUpdateOperation.SyncOperation>(), _ => throw new InvalidCastException("Unknown operation: " + n["op"]!.GetValue<string>()) }; } diff --git a/extra/admin-api/Models/Spacebar.Models.Gateway/LazyRequest.cs b/extra/admin-api/Models/Spacebar.Models.Gateway/LazyRequest.cs
index c144eb727..ee7895afc 100644 --- a/extra/admin-api/Models/Spacebar.Models.Gateway/LazyRequest.cs +++ b/extra/admin-api/Models/Spacebar.Models.Gateway/LazyRequest.cs
@@ -12,8 +12,8 @@ public class LazyRequest [JsonPropertyName("channels")] public Dictionary<string, List<List<int>>> Channels { get; set; } - [JsonPropertyName("members")] - public bool Members { get; set; } + [JsonPropertyName("members"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] + public List<long>? Members { get; set; } [JsonPropertyName("threads")] public bool Threads { get; set; } diff --git a/extra/admin-api/Models/Spacebar.Models.Generic/Member.cs b/extra/admin-api/Models/Spacebar.Models.Generic/Member.cs
index fa217a377..b11a041b2 100644 --- a/extra/admin-api/Models/Spacebar.Models.Generic/Member.cs +++ b/extra/admin-api/Models/Spacebar.Models.Generic/Member.cs
@@ -23,8 +23,8 @@ public class Member { [JsonPropertyName("collectibles")] public object? Collectibles { get; set; } - [JsonPropertyName("display_name_styles")] - public object? DisplayNameStyles { get; set; } + [JsonPropertyName("display_name_styles"), JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public DisplayNameStyle? DisplayNameStyles { get; set; } [JsonPropertyName("banner")] public string? Banner { get; set; } diff --git a/extra/admin-api/Models/Spacebar.Models.Generic/User.cs b/extra/admin-api/Models/Spacebar.Models.Generic/User.cs
index 428794afb..ad0028d82 100644 --- a/extra/admin-api/Models/Spacebar.Models.Generic/User.cs +++ b/extra/admin-api/Models/Spacebar.Models.Generic/User.cs
@@ -1,10 +1,12 @@ +using System.ComponentModel.DataAnnotations; using System.Diagnostics; using System.Text.Json.Serialization; namespace Spacebar.Models.Generic; [DebuggerDisplay("{Id} ({Username}#{Discriminator})")] -public class PartialUser { +public class PartialUser +{ [JsonPropertyName("id"), JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] public required long Id { get; set; } @@ -26,8 +28,8 @@ public class PartialUser { [JsonPropertyName("collectibles")] public object? Collectibles { get; set; } - [JsonPropertyName("display_name_styles")] - public object? DisplayNameStyles { get; set; } + [JsonPropertyName("display_name_styles"), JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public DisplayNameStyle? DisplayNameStyles { get; set; } [JsonPropertyName("primary_guild")] public object? PrimaryGuild { get; set; } @@ -46,4 +48,43 @@ public class PartialUser { [JsonPropertyName("public_flags")] public ulong? PublicFlags { get; set; } +} + +public class DisplayNameStyle +{ + [JsonPropertyName("font_id")] + public Font FontId { get; set; } = Font.Default; + + [JsonPropertyName("effect_id")] + public Effect EffectId { get; set; } = Effect.Solid; + + [JsonPropertyName("colors"), MaxLength(2)] + public List<int> Colors { get; set; } = []; + + // https://docs.discord.food/resources/user#display-name-font - unsure if these are just really close or directly used by discord while being renamed... + public enum Font + { + Bangers = 1, + BioRhyme = 2, + CherryBomb = 3, + Chicle = 4, + Compagnon = 5, + MuseoModerno = 6, + NeoCastel = 7, + Pixelify = 8, + Ribes = 9, + Sinistre = 10, + Default = 11, + ZillaSlab = 12 + } + + public enum Effect + { + Solid = 1, + Gradient = 2, + Neon = 3, + Toon = 4, + Pop = 5, + Glow = 6 + } } \ No newline at end of file