diff --git a/src/StevesBot.Worker/Discord/Events/DiscordOpCodes.cs b/src/StevesBot.Worker/Discord/Events/DiscordOpCodes.cs index cf520d1..0b471a4 100644 --- a/src/StevesBot.Worker/Discord/Events/DiscordOpCodes.cs +++ b/src/StevesBot.Worker/Discord/Events/DiscordOpCodes.cs @@ -5,6 +5,7 @@ internal static class DiscordOpCodes public const int Dispatch = 0; public const int Heartbeat = 1; public const int Identify = 2; + public const int PresenceUpdate = 3; public const int Resume = 6; public const int Reconnect = 7; public const int InvalidSession = 9; diff --git a/src/StevesBot.Worker/Discord/Events/IdentifyDiscordEvent.cs b/src/StevesBot.Worker/Discord/Events/IdentifyDiscordEvent.cs index 6ae95a5..afd6d3d 100644 --- a/src/StevesBot.Worker/Discord/Events/IdentifyDiscordEvent.cs +++ b/src/StevesBot.Worker/Discord/Events/IdentifyDiscordEvent.cs @@ -43,42 +43,3 @@ internal sealed record IdentifyProperties [JsonPropertyName("device")] public string Device { get; init; } = Assembly.GetExecutingAssembly().GetName().FullName; } - -// TODO: Move this to an update presence event file - -internal sealed record UpdatePresenceData -{ - [JsonPropertyName("since")] - public long? Since { get; init; } = null; - - [JsonPropertyName("activities")] - public List Activities { get; init; } = []; - - [JsonPropertyName("status")] - public string Status { get; init; } = PresenceStatus.Online; - - [JsonPropertyName("afk")] - public bool Afk { get; init; } -} - -internal static class PresenceStatus -{ - public const string Online = "online"; -} - -internal sealed record Activity -{ - [JsonPropertyName("name")] - public string Name { get; init; } = string.Empty; - - [JsonPropertyName("type")] - public int Type { get; init; } = ActivityType.Custom; - - [JsonPropertyName("state")] - public string? State { get; init; } -} - -internal static class ActivityType -{ - public const int Custom = 4; -} \ No newline at end of file diff --git a/src/StevesBot.Worker/Discord/Events/UpdatePresenceDiscordEvent.cs b/src/StevesBot.Worker/Discord/Events/UpdatePresenceDiscordEvent.cs new file mode 100644 index 0000000..77d2abb --- /dev/null +++ b/src/StevesBot.Worker/Discord/Events/UpdatePresenceDiscordEvent.cs @@ -0,0 +1,56 @@ +namespace StevesBot.Worker.Discord.Events; + +internal sealed record UpdatePresenceDiscordEvent : DiscordEvent +{ + [JsonPropertyName("d")] + public new UpdatePresenceData Data { get; init; } = new UpdatePresenceData(); + + public UpdatePresenceDiscordEvent(long? since, List activities, string status, bool afk) + { + OpCode = DiscordOpCodes.PresenceUpdate; + Data = new UpdatePresenceData + { + Since = since, + Activities = activities, + Status = status, + Afk = afk, + }; + } +} + +internal sealed record UpdatePresenceData +{ + [JsonPropertyName("since")] + public long? Since { get; init; } = null; + + [JsonPropertyName("activities")] + public List Activities { get; init; } = []; + + [JsonPropertyName("status")] + public string Status { get; init; } = PresenceStatus.Online; + + [JsonPropertyName("afk")] + public bool Afk { get; init; } +} + +internal static class PresenceStatus +{ + public const string Online = "online"; +} + +internal sealed record Activity +{ + [JsonPropertyName("name")] + public string Name { get; init; } = string.Empty; + + [JsonPropertyName("type")] + public int Type { get; init; } = ActivityType.Custom; + + [JsonPropertyName("state")] + public string? State { get; init; } +} + +internal static class ActivityType +{ + public const int Custom = 4; +} \ No newline at end of file