diff --git a/src/EllieBot/Modules/Searches/ReligiousCommands.cs b/src/EllieBot/Modules/Searches/ReligiousCommands.cs new file mode 100644 index 0000000..a15bc74 --- /dev/null +++ b/src/EllieBot/Modules/Searches/ReligiousCommands.cs @@ -0,0 +1,102 @@ +using EllieBot.Modules.Searches.Common; +using System.Net.Http.Json; +using System.Text.Json.Serialization; + +namespace EllieBot.Modules.Searches; + +public partial class Searches +{ + public partial class ReligiousCommands : EllieModule + { + private readonly IHttpClientFactory _httpFactory; + + public ReligiousCommands(IHttpClientFactory httpFactory) + { + _httpFactory = httpFactory; + } + + [Cmd] + [RequireContext(ContextType.Guild)] + public async Task Bible(string book, string chapterAndVerse) + { + var obj = new BibleVerses(); + try + { + using var http = _httpFactory.CreateClient(); + obj = await http.GetFromJsonAsync($"https://bible-api.com/{book} {chapterAndVerse}"); + } + catch + { + } + + if (obj.Error is not null || obj.Verses is null || obj.Verses.Length == 0) + await Response().Error(obj.Error ?? "No verse found.").SendAsync(); + else + { + var v = obj.Verses[0]; + await Response() + .Embed(_sender.CreateEmbed() + .WithOkColor() + .WithTitle($"{v.BookName} {v.Chapter}:{v.Verse}") + .WithDescription(v.Text)) + .SendAsync(); + } + } + + [Cmd] + [RequireContext(ContextType.Guild)] + public async Task Quran(string ayah) + { + using var http = _httpFactory.CreateClient(); + + var obj = await http.GetFromJsonAsync>($"https://api.alquran.cloud/v1/ayah/{Uri.EscapeDataString(ayah)}/editions/en.asad,ar.alafasy"); + if(obj is null or not { Code: 200 }) + { + await Response().Error("No verse found.").SendAsync(); + return; + } + + var english = obj.Data[0]; + var arabic = obj.Data[1]; + + await using var audio = await http.GetStreamAsync(arabic.Audio); + + await Response() + .Embed(_sender.CreateEmbed() + .WithOkColor() + .AddField("Arabic", arabic.Text) + .AddField("English", english.Text) + .WithFooter(arabic.Number.ToString())) + .File(audio, Uri.EscapeDataString(ayah) + ".mp3") + .SendAsync(); + } + } +} + +public sealed class QuranResponse +{ + [JsonPropertyName("code")] + public int Code { get; set; } + + [JsonPropertyName("status")] + public string Status { get; set; } + + [JsonPropertyName("data")] + public T[] Data { get; set; } +} + +public sealed class QuranAyah +{ + [JsonPropertyName("number")] + public int Number { get; set; } + + [JsonPropertyName("audio")] + public string Audio { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("text")] + public string Text { get; set; } + +} \ No newline at end of file diff --git a/src/EllieBot/Modules/Searches/Search/Searx/SearxSearchService.cs b/src/EllieBot/Modules/Searches/Search/Searx/SearxSearchService.cs index 0d2d257..5d8ecc6 100644 --- a/src/EllieBot/Modules/Searches/Search/Searx/SearxSearchService.cs +++ b/src/EllieBot/Modules/Searches/Search/Searx/SearxSearchService.cs @@ -33,7 +33,7 @@ public sealed class SearxSearchService : SearchServiceBase, IEService Log.Information("Using {Instance} instance for web search...", instanceUrl); var startTime = Stopwatch.GetTimestamp(); - + using var http = _http.CreateClient(); await using var res = await http.GetStreamAsync($"{instanceUrl}" + $"?q={Uri.EscapeDataString(query)}" diff --git a/src/EllieBot/Modules/Searches/Searches.cs b/src/EllieBot/Modules/Searches/Searches.cs index 7fa6067..b085ea6 100644 --- a/src/EllieBot/Modules/Searches/Searches.cs +++ b/src/EllieBot/Modules/Searches/Searches.cs @@ -528,34 +528,6 @@ public partial class Searches : EllieModule } } - [Cmd] - [RequireContext(ContextType.Guild)] - public async Task Bible(string book, string chapterAndVerse) - { - var obj = new BibleVerses(); - try - { - using var http = _httpFactory.CreateClient(); - obj = await http.GetFromJsonAsync($"https://bible-api.com/{book} {chapterAndVerse}"); - } - catch - { - } - - if (obj.Error is not null || obj.Verses is null || obj.Verses.Length == 0) - await Response().Error(obj.Error ?? "No verse found.").SendAsync(); - else - { - var v = obj.Verses[0]; - await Response() - .Embed(_sender.CreateEmbed() - .WithOkColor() - .WithTitle($"{v.BookName} {v.Chapter}:{v.Verse}") - .WithDescription(v.Text)) - .SendAsync(); - } - } - [Cmd] public async Task Steam([Leftover] string query) {