diff --git a/src/EllieBot/Modules/Searches/Searches.cs b/src/EllieBot/Modules/Searches/Searches.cs index dfd1a8a..21eb45d 100644 --- a/src/EllieBot/Modules/Searches/Searches.cs +++ b/src/EllieBot/Modules/Searches/Searches.cs @@ -399,10 +399,14 @@ public partial class Searches : EllieModule [Cmd] public async Task Catfact() { - using var http = _httpFactory.CreateClient(); - var response = await http.GetStringAsync("https://catfact.ninja/fact"); + var maybeFact = await _service.GetCatFactAsync(); + + if (!maybeFact.TryPickT0(out var fact, out var error)) + { + await HandleErrorAsync(error); + return; + } - var fact = JObject.Parse(response)["fact"].ToString(); await Response().Confirm("🐈" + GetText(strs.catfact), fact).SendAsync(); } diff --git a/src/EllieBot/Modules/Searches/SearchesService.cs b/src/EllieBot/Modules/Searches/SearchesService.cs index f7406cf..4ff9358 100644 --- a/src/EllieBot/Modules/Searches/SearchesService.cs +++ b/src/EllieBot/Modules/Searches/SearchesService.cs @@ -2,14 +2,8 @@ using EllieBot.Modules.Searches.Common; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OneOf.Types; -using SixLabors.Fonts; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Drawing.Processing; -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; -using Color = SixLabors.ImageSharp.Color; -using Image = SixLabors.ImageSharp.Image; +using System.Text.Json; +using OneOf; namespace EllieBot.Modules.Searches.Services; @@ -458,6 +452,21 @@ public class SearchesService : IEService return ErrorType.Unknown; } } + + public async Task> GetCatFactAsync() + { + using var http = _httpFactory.CreateClient(); + var response = await http.GetStringAsync("https://catfact.ninja/fact").ConfigureAwait(false); + + var doc = JsonDocument.Parse(response); + + if (!doc.RootElement.TryGetProperty("fact", out var factElement)) + { + return ErrorType.Unknown; + } + + return factElement.ToString(); + } } public enum ErrorType