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; }
|