diff --git a/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs b/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs index 05085e6b5..cd210c798 100644 --- a/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs +++ b/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs @@ -1,54 +1,59 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. using System; +using DisCatSharp.ThirdPartyLookups.Entities; + namespace DisCatSharp.ThirdPartyLookups; /// /// The discord client extensions. /// public static class DiscordClientExtensions { /// /// Creates a new Third Party Lookup client with specified settings. /// /// Discord client to create Lavalink instance for. /// Lavalink client instance. - public static ThirdPartyLookupExtension UseThirdPartyLookup(this DiscordClient client) + public static ThirdPartyLookupExtension UseThirdPartyLookup(this DiscordClient client, ThirdPartyLookupConfiguration configuration = null) { if (client.GetExtension() != null) throw new InvalidOperationException("Third Party Lookup is already enabled for that client."); + configuration ??= new(); + var tp = new ThirdPartyLookupExtension(); + tp.lookupConfiguration = configuration; client.AddExtension(tp); return tp; } /// /// Gets the active instance of the Third Party Lookups client for the DiscordClient. /// /// Discord client to get Lavalink instance for. /// Lavalink client instance. public static ThirdPartyLookupExtension GetThirdPartyLookup(this DiscordClient client) => client.GetExtension(); } diff --git a/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs b/DisCatSharp.ThirdPartyLookups/Entities/ThirdPartyLookupConfiguration.cs similarity index 55% copy from DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs copy to DisCatSharp.ThirdPartyLookups/Entities/ThirdPartyLookupConfiguration.cs index 05085e6b5..d730af165 100644 --- a/DisCatSharp.ThirdPartyLookups/DiscordClientExtensions.cs +++ b/DisCatSharp.ThirdPartyLookups/Entities/ThirdPartyLookupConfiguration.cs @@ -1,54 +1,46 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; -namespace DisCatSharp.ThirdPartyLookups; +namespace DisCatSharp.ThirdPartyLookups.Entities; /// -/// The discord client extensions. +/// The configuration for Third Party Lookups /// -public static class DiscordClientExtensions +public class ThirdPartyLookupConfiguration { /// - /// Creates a new Third Party Lookup client with specified settings. + /// The auth token used for lookups via discordbotlist.com /// - /// Discord client to create Lavalink instance for. - /// Lavalink client instance. - public static ThirdPartyLookupExtension UseThirdPartyLookup(this DiscordClient client) - { - if (client.GetExtension() != null) - throw new InvalidOperationException("Third Party Lookup is already enabled for that client."); - - var tp = new ThirdPartyLookupExtension(); - client.AddExtension(tp); - return tp; - } + public string? DiscordBotListToken { get; set; } /// - /// Gets the active instance of the Third Party Lookups client for the DiscordClient. + /// The auth token used for looks up via top.gg. + /// You can find out how to get a token here: /// - /// Discord client to get Lavalink instance for. - /// Lavalink client instance. - public static ThirdPartyLookupExtension GetThirdPartyLookup(this DiscordClient client) - => client.GetExtension(); + public string? TopGGToken { get; set; } } diff --git a/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs b/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs index 5172ccc66..382897b82 100644 --- a/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs +++ b/DisCatSharp.ThirdPartyLookups/ThirdPartyLookupExtension.cs @@ -1,89 +1,91 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using DisCatSharp.Entities; using DisCatSharp.ThirdPartyLookups.Entities; using DisCatSharp.ThirdPartyLookups.Exceptions; using Newtonsoft.Json; namespace DisCatSharp.ThirdPartyLookups; /// /// The third party lookup extension. /// public class ThirdPartyLookupExtension : BaseExtension { + internal ThirdPartyLookupConfiguration lookupConfiguration { get; set; } + /// /// DO NOT USE THIS MANUALLY. /// /// DO NOT USE THIS MANUALLY. /// protected override void Setup(DiscordClient client) { if (this.Client != null) throw new InvalidOperationException("What did I tell you?"); this.Client = client; } /// /// Gets a mee6 leaderboard based of a DiscordGuild. /// /// The guild to fetch. /// /// Thrown if no guild id was provided. /// Thrown if the guild was not found. public async Task GetMee6Leaderboard(DiscordGuild Guild) => await this.GetMee6Leaderboard(Guild.Id); /// /// Gets a mee6 leaderboard based of a guild id. /// /// The guild id to fetch. /// /// Thrown if no guild id was provided. /// Thrown if the guild was not found. public async Task GetMee6Leaderboard(ulong GuildId) { if (GuildId == 0) throw new ArgumentException("Please provide a valid guild id."); var client = new HttpClient(); client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", $"DisCatSharp.ThirdPartyLookups"); client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json"); client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); var response = await client.GetAsync($"https://mee6.xyz/api/plugins/levels/leaderboard/{GuildId}"); var mee6 = JsonConvert.DeserializeObject(await response.EnsureSuccessStatusCode().Content.ReadAsStringAsync()); return mee6 is null ? throw new NotFoundException() : mee6; } }