GuildUpdatePacket and tests

This commit is contained in:
Kecskeméti László 2024-07-09 14:40:29 +02:00
parent 073e17c96b
commit c65c371307
5 changed files with 83 additions and 6 deletions

View File

@ -16,6 +16,67 @@ public class JsonTests
_testOutputHelper = testOutputHelper; _testOutputHelper = testOutputHelper;
} }
[Fact]
public void GuildUpdateDeserialize()
{
string src = """
{
"op": 0,
"t": "GUILD_UPDATE",
"s": 3,
"d":{
"id": "197038439483310086",
"name": "Discord Testers",
"icon": "f64c482b807da4f539cff778d174971c",
"description": "The official place to report Discord Bugs!",
"splash": null,
"discovery_splash": null,
"features": [
"ANIMATED_ICON",
"VERIFIED",
"NEWS",
"VANITY_URL",
"DISCOVERABLE",
"MORE_EMOJI",
"INVITE_SPLASH",
"BANNER",
"COMMUNITY"
],
"emojis": [],
"banner": "9b6439a7de04f1d26af92f84ac9e1e4a",
"owner_id": "73193882359173120",
"application_id": null,
"region": null,
"afk_channel_id": null,
"afk_timeout": 300,
"system_channel_id": null,
"widget_enabled": true,
"widget_channel_id": null,
"verification_level": 3,
"roles": [],
"default_message_notifications": 1,
"mfa_level": 1,
"explicit_content_filter": 2,
"max_presences": 40000,
"max_members": 250000,
"vanity_url_code": "discord-testers",
"premium_tier": 3,
"premium_subscription_count": 33,
"system_channel_flags": 0,
"preferred_locale": "en-US",
"rules_channel_id": "441688182833020939",
"public_updates_channel_id": "281283303326089216",
"safety_alerts_channel_id": "281283303326089216",
"nsfw_level": 0
}
}
""";
GatewayPacket? gateway_packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket);
Assert.IsType<GuildUpdatePacket>(gateway_packet);
}
[Fact] [Fact]
public void GuildCreateDeserialize() public void GuildCreateDeserialize()
{ {
@ -69,6 +130,7 @@ public class JsonTests
"safety_alerts_channel_id": "281283303326089216", "safety_alerts_channel_id": "281283303326089216",
"joined_at": "2024-06-27T11:59:36Z", "joined_at": "2024-06-27T11:59:36Z",
"large": false, "large": false,
"nsfw_level": 0,
"member_count": 69, "member_count": 69,
"voice_states": [ "voice_states": [
{ {
@ -132,7 +194,7 @@ public class JsonTests
GatewayPacket? gateway_packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket); GatewayPacket? gateway_packet = JsonSerializer.Deserialize(src, SourceGenerationContext.Default.GatewayPacket);
Assert.IsType<GuildCreatePacket>(gateway_packet); Assert.IsType<GuildCreatePacket>(gateway_packet);
Assert.IsType<GuildData>((gateway_packet as GuildCreatePacket)!.Data); Assert.IsType<GuildCreateData>((gateway_packet as GuildCreatePacket)!.Data);
} }

View File

@ -9,6 +9,7 @@ namespace Discord.API;
[JsonDerivedType(typeof(ChannelDeletePacket))] [JsonDerivedType(typeof(ChannelDeletePacket))]
[JsonDerivedType(typeof(ReadyPacket))] [JsonDerivedType(typeof(ReadyPacket))]
[JsonDerivedType(typeof(GuildCreatePacket))] [JsonDerivedType(typeof(GuildCreatePacket))]
[JsonDerivedType(typeof(GuildUpdatePacket))]
internal abstract class DispatchPacket : GatewayPacket internal abstract class DispatchPacket : GatewayPacket
{ {
public override Opcode Op => Opcode.Dispatch; public override Opcode Op => Opcode.Dispatch;

View File

@ -0,0 +1,11 @@
using System.Text.Json.Serialization;
namespace Discord.API;
internal class GuildUpdatePacket : DispatchPacket
{
public override string Event => "GUILD_UPDATE";
[JsonRequired]
[JsonPropertyName("d")]
public required GuildUpdateData Data { get; init; }
}

View File

@ -54,6 +54,9 @@ internal class GatewayPacketConverter : JsonConverter<GatewayPacket>
SourceGenerationContext.Default.ChannelDeletePacket), SourceGenerationContext.Default.ChannelDeletePacket),
"GUILD_CREATE" => json_doc.Deserialize( "GUILD_CREATE" => json_doc.Deserialize(
SourceGenerationContext.Default.GuildCreatePacket), SourceGenerationContext.Default.GuildCreatePacket),
"GUILD_UPDATE" => json_doc.Deserialize(
SourceGenerationContext.Default.GuildUpdatePacket
),
_ => throw new NotSupportedException($"Packet {event_name} is not supported in json deserialization") _ => throw new NotSupportedException($"Packet {event_name} is not supported in json deserialization")
}; };
default: default:

View File

@ -1,16 +1,16 @@
using System.Runtime.InteropServices.JavaScript;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
namespace Discord.API; namespace Discord.API;
using System.Text.Json;
[JsonSourceGenerationOptions(IgnoreReadOnlyFields = false, [JsonSourceGenerationOptions(IgnoreReadOnlyFields = false,
IgnoreReadOnlyProperties = false, IgnoreReadOnlyProperties = false,
IncludeFields = true, IncludeFields = true,
PropertyNamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower, PropertyNamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower,
Converters = [typeof(GatewayPacketConverter), typeof(UnavailableGuildDataConverter)], Converters = [
typeof(GatewayPacketConverter),
typeof(UnavailableGuildDataConverter),
typeof(GuildDataConverter)
],
NumberHandling = JsonNumberHandling.AllowReadingFromString NumberHandling = JsonNumberHandling.AllowReadingFromString
)] )]
[JsonSerializable(typeof(GatewayPacket))] [JsonSerializable(typeof(GatewayPacket))]