summary refs log tree commit diff
path: root/extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-06-23 05:53:09 +0200
committerRory& <root@rory.gay>2026-06-23 05:53:09 +0200
commit6751174792969e36e5afb01784d00236578f444f (patch)
tree57da1a5838e5152dedc36629aaaf0d935a6fe6a5 /extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs
parentClose: use session as predicate rather than session_id due to early init (diff)
downloadserver-ts-dev/lazyrequest.tar.xz
Member list kinda works now? dev/lazyrequest
Diffstat (limited to 'extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs')
-rw-r--r--extra/admin-api/Models/Spacebar.Models.Gateway/GuildMemberListUpdate.cs72
1 files changed, 46 insertions, 26 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>()) }; }