From 64c1939d717ed2b924f6e84c40b91bd84f20687c Mon Sep 17 00:00:00 2001 From: alyssa Date: Sat, 9 Mar 2024 15:08:30 -0500 Subject: [PATCH] feat(bot): query updated signature parameters of expired discord attachments --- Myriad/Rest/DiscordApiClient.cs | 3 +++ Myriad/Rest/Types/Requests/RefreshUrlsRequest.cs | 3 +++ Myriad/Types/RefreshedUrl.cs | 11 +++++++++++ PluralKit.Bot/Commands/ImportExport.cs | 9 ++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 Myriad/Rest/Types/Requests/RefreshUrlsRequest.cs create mode 100644 Myriad/Types/RefreshedUrl.cs diff --git a/Myriad/Rest/DiscordApiClient.cs b/Myriad/Rest/DiscordApiClient.cs index db0c64d4..c413f5bd 100644 --- a/Myriad/Rest/DiscordApiClient.cs +++ b/Myriad/Rest/DiscordApiClient.cs @@ -159,6 +159,9 @@ public class DiscordApiClient public Task CreateDm(ulong recipientId) => _client.Post("/users/@me/channels", ("CreateDM", default), new CreateDmRequest(recipientId))!; + public Task RefreshUrls(string[] urls) => + _client.Post("/attachments/refresh-urls", ("RefreshUrls", default), new RefreshUrlsRequest(urls)); + private static string EncodeEmoji(Emoji emoji) => WebUtility.UrlEncode(emoji.Id != null ? $"{emoji.Name}:{emoji.Id}" : emoji.Name) ?? throw new ArgumentException("Could not encode emoji"); diff --git a/Myriad/Rest/Types/Requests/RefreshUrlsRequest.cs b/Myriad/Rest/Types/Requests/RefreshUrlsRequest.cs new file mode 100644 index 00000000..5f69bc6e --- /dev/null +++ b/Myriad/Rest/Types/Requests/RefreshUrlsRequest.cs @@ -0,0 +1,3 @@ +namespace Myriad.Rest.Types.Requests; + +public record RefreshUrlsRequest(string[] AttachmentUrls); \ No newline at end of file diff --git a/Myriad/Types/RefreshedUrl.cs b/Myriad/Types/RefreshedUrl.cs new file mode 100644 index 00000000..033f1942 --- /dev/null +++ b/Myriad/Types/RefreshedUrl.cs @@ -0,0 +1,11 @@ +namespace Myriad.Types; + +public record RefreshedUrlsResponse +{ + public record RefreshedUrl + { + public string Original; + public string Refreshed; + } + public RefreshedUrl[] RefreshedUrls; +} \ No newline at end of file diff --git a/PluralKit.Bot/Commands/ImportExport.cs b/PluralKit.Bot/Commands/ImportExport.cs index e5dbff70..56973ecf 100644 --- a/PluralKit.Bot/Commands/ImportExport.cs +++ b/PluralKit.Bot/Commands/ImportExport.cs @@ -45,13 +45,20 @@ public class ImportExport try { var response = await _client.GetAsync(url); + var content = await response.Content.ReadAsStringAsync(); + if (content == "This content is no longer available.") + { + var refreshed = await ctx.Rest.RefreshUrls(new[] { url.ToString() }); + response = await _client.GetAsync(new Uri(refreshed.RefreshedUrls[0].Refreshed)); + content = await response.Content.ReadAsStringAsync(); + } if (!response.IsSuccessStatusCode) throw Errors.InvalidImportFile; // hacky fix for discord api returning nonsense charsets sometimes response.Content.Headers.Remove("content-type"); response.Content.Headers.Add("content-type", "application/json; charset=UTF-8"); data = JsonConvert.DeserializeObject( - await response.Content.ReadAsStringAsync(), + content, _settings ); if (data == null)