diff --git a/src/NadekoBot/Modules/Searches/ReligiousCommands.cs b/src/NadekoBot/Modules/Searches/ReligiousCommands.cs new file mode 100644 index 000000000..ae8cd250d --- /dev/null +++ b/src/NadekoBot/Modules/Searches/ReligiousCommands.cs @@ -0,0 +1,102 @@ +using NadekoBot.Modules.Searches.Common; +using System.Net.Http.Json; +using System.Text.Json.Serialization; + +namespace NadekoBot.Modules.Searches; + +public partial class Searches +{ + public partial class ReligiousCommands : NadekoModule + { + 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/NadekoBot/Modules/Searches/Searches.cs b/src/NadekoBot/Modules/Searches/Searches.cs index 28af76d88..147c0dda0 100644 --- a/src/NadekoBot/Modules/Searches/Searches.cs +++ b/src/NadekoBot/Modules/Searches/Searches.cs @@ -528,34 +528,6 @@ public partial class Searches : NadekoModule } } - [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) { diff --git a/src/NadekoBot/data/aliases.yml b/src/NadekoBot/data/aliases.yml index 4b09f4f92..4143812e4 100644 --- a/src/NadekoBot/data/aliases.yml +++ b/src/NadekoBot/data/aliases.yml @@ -1192,6 +1192,8 @@ xpreset: - xpreset bible: - bible +quran: + - quran edit: - edit delete: diff --git a/src/NadekoBot/data/strings/commands/commands.en-US.yml b/src/NadekoBot/data/strings/commands/commands.en-US.yml index 0cac88833..a9a8fa734 100644 --- a/src/NadekoBot/data/strings/commands/commands.en-US.yml +++ b/src/NadekoBot/data/strings/commands/commands.en-US.yml @@ -4076,6 +4076,16 @@ bible: desc: "The name of the biblical book being referenced." chapterAndVerse: desc: "The reference to a specific passage in the Bible, such as 'Genesis 3:15'" +quran: + desc: |- + Shows the text of an ayah of the Quran, as well as the recitation by Alafasy. + Supply surah:ayah, or ayah number. For instance, 262 or 2:255 will both get you Ayat Al Kursi + ex: + - 2:255 + - 262 + params: + - ayah: + desc: "The number of the ayah in the Quran, for example 2:255." edit: desc: Edits bot's message, you have to specify message ID and new text. You can optionally specify target channel. Supports embeds. ex: