From 3cddd06efad737b6ce1fa32d623318bfe6a1942c Mon Sep 17 00:00:00 2001 From: ambdroid Date: Tue, 20 Feb 2024 19:44:41 -0500 Subject: [PATCH] feat(core): add dispatch for autoproxy events --- PluralKit.Core/Dispatch/DispatchModels.cs | 3 ++- PluralKit.Core/Dispatch/DispatchService.cs | 24 ++++++++++++++++--- PluralKit.Core/Models/Patch/AutoproxyPatch.cs | 19 +++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/PluralKit.Core/Dispatch/DispatchModels.cs b/PluralKit.Core/Dispatch/DispatchModels.cs index ce758a1d..3d870a92 100644 --- a/PluralKit.Core/Dispatch/DispatchModels.cs +++ b/PluralKit.Core/Dispatch/DispatchModels.cs @@ -28,7 +28,8 @@ public enum DispatchEvent UPDATE_SWITCH, DELETE_SWITCH, DELETE_ALL_SWITCHES, - SUCCESSFUL_IMPORT + SUCCESSFUL_IMPORT, + UPDATE_AUTOPROXY, } public struct UpdateDispatchData diff --git a/PluralKit.Core/Dispatch/DispatchService.cs b/PluralKit.Core/Dispatch/DispatchService.cs index 58f88b56..f4a0c279 100644 --- a/PluralKit.Core/Dispatch/DispatchService.cs +++ b/PluralKit.Core/Dispatch/DispatchService.cs @@ -38,10 +38,28 @@ public class DispatchService } } - public Task Dispatch(SystemId systemId, ulong? guildId, ulong? channelId, AutoproxyPatch patch) + public async Task Dispatch(SystemId systemId, ulong? guildId, ulong? channelId, AutoproxyPatch patch) { - // todo - return Task.CompletedTask; + var repo = _provider.Resolve(); + var system = await repo.GetSystem(systemId); + if (system.WebhookUrl == null) + return; + + var memberUuid = patch.AutoproxyMember.IsPresent && patch.AutoproxyMember.Value is MemberId id + ? (await repo.GetMember(id)).Uuid.ToString() + : null; + + var data = new UpdateDispatchData(); + data.Event = DispatchEvent.UPDATE_AUTOPROXY; + data.SigningToken = system.WebhookToken; + data.SystemId = system.Uuid.ToString(); + data.EventData = patch.ToJson(guildId, channelId, memberUuid); + + _logger.Debug( + "Dispatching webhook for system {SystemId} autoproxy update in guild {GuildId}/{ChannelId}", + system.Id, guildId, channelId + ); + await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody()); } public async Task Dispatch(SystemId systemId, UpdateDispatchData data) diff --git a/PluralKit.Core/Models/Patch/AutoproxyPatch.cs b/PluralKit.Core/Models/Patch/AutoproxyPatch.cs index 66d3c35c..529fda08 100644 --- a/PluralKit.Core/Models/Patch/AutoproxyPatch.cs +++ b/PluralKit.Core/Models/Patch/AutoproxyPatch.cs @@ -44,4 +44,23 @@ public class AutoproxyPatch: PatchObject return p; } + + public JObject ToJson(ulong? guild_id, ulong? channel_id, string? memberId = null) + { + var o = new JObject(); + + o.Add("guild_id", guild_id?.ToString()); + o.Add("channel_id", channel_id?.ToString()); + + if (AutoproxyMode.IsPresent) + o.Add("autoproxy_mode", AutoproxyMode.Value.ToString().ToLower()); + + if (AutoproxyMember.IsPresent) + o.Add("autoproxy_member", memberId); + + if (LastLatchTimestamp.IsPresent) + o.Add("last_latch_timestamp", LastLatchTimestamp.Value.FormatExport()); + + return o; + } } \ No newline at end of file