Updates to API Client

main
exsersewo 2 years ago
parent e562a90c35
commit 98be07e9fc
Signed by: exsersewo
GPG Key ID: 9C6DDF9AC9BA14A0
  1. 223
      Interfaces/ISkuldAPIClient.cs
  2. 16
      Skuld.API.Client.csproj
  3. 15
      Skuld.API.csproj
  4. 295
      SkuldAPI.cs

@ -5,117 +5,116 @@ using System;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Skuld.API namespace Skuld.API.Client;
public interface ISkuldAPIClient : IDisposable
{ {
public interface ISkuldAPIClient : IDisposable #region Guild
{ /// <summary>
#region Guild /// Get a guild
/// <summary> /// </summary>
/// Get a guild /// <param name="id">Guild Id</param>
/// </summary> /// <returns><see cref="EventResult"/> wrapped <see cref="Guild"/></returns>
/// <param name="id">Guild Id</param> [Get("/guild/{id}")]
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="Guild"/></returns> public Task<EventResult> GetGuildAsync([Path] ulong id);
[Get("/guild/{id}")] #endregion Guild
public Task<EventResult> GetGuildAsync([Path] ulong id);
#endregion Guild #region User
/// <summary>
#region User /// Get a user
/// <summary> /// </summary>
/// Get a user /// <param name="id">User Id</param>
/// </summary> /// <returns><see cref="EventResult"/> wrapped <see cref="User"/></returns>
/// <param name="id">User Id</param> [Get("/user/{id}")]
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns> public Task<EventResult> GetUserAsync([Path] ulong id);
[Get("/user/{id}")] #endregion User
public Task<EventResult> GetUserAsync([Path] ulong id);
#endregion User #region Experience
/// <summary>
#region Experience /// Gets the experience leaderboard
/// <summary> /// </summary>
/// Gets the experience leaderboard /// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// </summary> /// <param name="page">%10 offset page</param>
/// <param name="guildId">Guild Id, Accepts 0 for all</param> /// <returns><see cref="EventResult"/> wrapped <see cref="UserExperience"/></returns>
/// <param name="page">%10 offset page</param> [Get("/experience/{guildId}/{page}")]
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="UserExperience"/></returns> public Task<EventResult> GetExperienceLeaderboardAsync([Path] ulong guildId, [Path] int page = 0);
[Get("/experience/{guildId}/{page}")] #endregion Experience
public Task<EventResult> GetExperienceLeaderboardAsync([Path] ulong guildId, [Path] int page = 0);
#endregion Experience #region Money
/// <summary>
#region Money /// Gets the money leaderboard
/// <summary> /// </summary>
/// Gets the money leaderboard /// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// </summary> /// <param name="page">%10 offset page</param>
/// <param name="guildId">Guild Id, Accepts 0 for all</param> /// <returns><see cref="EventResult"/> wrapped <see cref="User"/></returns>
/// <param name="page">%10 offset page</param> [Get("/money/{guildId}/{page}")]
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns> public Task<EventResult> GetMoneyLeaderboardAsync([Path] ulong guildId, [Path] int page = 0);
[Get("/money/{guildId}/{page}")] #endregion Money
public Task<EventResult> GetMoneyLeaderboardAsync([Path] ulong guildId, [Path] int page = 0);
#endregion Money #region Profile
/// <summary>
#region Profile /// Get a user's profile card
/// <summary> /// </summary>
/// Get a user's profile card /// <param name="id">User Id</param>
/// </summary> /// <returns><see cref="Stream"/> of profile card data</returns>
/// <param name="id">User Id</param> [Get("/image/profile/{id}")]
/// <returns><see cref="Stream"/> of profile card data</returns> public Task<Stream> GetProfileCardAsync([Path] ulong id);
[Get("/image/profile/{id}")]
public Task<Stream> GetProfileCardAsync([Path] ulong id); /// <summary>
/// Get a user's profile card with guild attributes
/// <summary> /// </summary>
/// Get a user's profile card with guild attributes /// <param name="id">User Id</param>
/// </summary> /// <param name="id">Guild Id</param>
/// <param name="id">User Id</param> /// <returns><see cref="Stream"/> of profile card data</returns>
/// <param name="id">Guild Id</param> [Get("/image/profile/{id}/{guildId}")]
/// <returns><see cref="Stream"/> of profile card data</returns> public Task<Stream> GetProfileCardAsync([Path] ulong id, [Path] ulong guildId);
[Get("/image/profile/{id}/{guildId}")]
public Task<Stream> GetProfileCardAsync([Path] ulong id, [Path] ulong guildId); /// <summary>
/// Preview's a custom background image
/// <summary> /// </summary>
/// Preview's a custom background image /// <param name="id">User Id</param>
/// </summary> /// <param name="previewBackground">Background to preview</param>
/// <param name="id">User Id</param> /// <returns><see cref="Stream"/> of profile card data</returns>
/// <param name="previewBackground">Background to preview</param> [Get("/image/profile/{id}/example")]
/// <returns><see cref="Stream"/> of profile card data</returns> public Task<Stream> GetExampleProfileCardAsync([Path] ulong id, [Query("previewBackground")] string previewBackground);
[Get("/image/profile/{id}/example")]
public Task<Stream> GetExampleProfileCardAsync([Path] ulong id, [Query("previewBackground")] string previewBackground); #endregion Profile
#endregion Profile #region Rank
#region Rank /// <summary>
/// Get a user's rank card
/// <summary> /// </summary>
/// Get a user's rank card /// <param name="id">User Id</param>
/// </summary> /// <param name="guildId">Guild Id</param>
/// <param name="id">User Id</param> /// <returns><see cref="Stream"/> of profile card data</returns>
/// <param name="guildId">Guild Id</param> [Get("/image/rank/{id}/{guildId}")]
/// <returns><see cref="Stream"/> of profile card data</returns> public Task<Stream> GetRankCardAsync([Path] ulong id, [Path] ulong guildId);
[Get("/image/rank/{id}/{guildId}")]
public Task<Stream> GetRankCardAsync([Path] ulong id, [Path] ulong guildId); #endregion Rank
#endregion Rank #region Leave/Join Card
#region Leave/Join Card /// <summary>
/// Get's the join card for a guild
/// <summary> /// </summary>
/// Get's the join card for a guild /// <param name="id">User Id</param>
/// </summary> /// <param name="guildId">Guild Id</param>
/// <param name="id">User Id</param> /// <returns><see cref="Stream"/> of join card</returns>
/// <param name="guildId">Guild Id</param> [Get("/image/join/{id}/{guildId}")]
/// <returns><see cref="Stream"/> of join card</returns> public Task<Stream> GetJoinCardAsync([Path] ulong id, [Path] ulong guildId);
[Get("/image/join/{id}/{guildId}")]
public Task<Stream> GetJoinCardAsync([Path] ulong id, [Path] ulong guildId); /// <summary>
/// Get's the leave card for a guild
/// <summary> /// </summary>
/// Get's the leave card for a guild /// <param name="id">User Id</param>
/// </summary> /// <param name="guildId">Guild Id</param>
/// <param name="id">User Id</param> /// <returns><see cref="Stream"/> of leave card</returns>
/// <param name="guildId">Guild Id</param> [Get("/image/leave/{id}/{guildId}")]
/// <returns><see cref="Stream"/> of leave card</returns> public Task<Stream> GetLeaveCardAsync([Path] ulong id, [Path] ulong guildId);
[Get("/image/leave/{id}/{guildId}")]
public Task<Stream> GetLeaveCardAsync([Path] ulong id, [Path] ulong guildId); #endregion Leave/Join Card
#endregion Leave/Join Card [Get("/image/magik")]
public Task<Stream> GetLiquidRescaledAsync([Query] string image);
[Get("/image/magik")]
public Task<Stream> GetLiquidRescaledAsync([Query] string image);
}
} }

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="RestEase" Version="1.5.7" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\submodules\Skuld.Core\Skuld.Core\Skuld.Core.csproj" />
<ProjectReference Include="..\..\submodules\Skuld.Models\Skuld.Models\Skuld.Models.csproj" />
</ItemGroup>
</Project>

@ -1,15 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="RestEase" Version="1.5.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Skuld.Models\Skuld.Models\Skuld.Models.csproj" />
</ItemGroup>
</Project>

@ -7,170 +7,169 @@ using System.Net.Http;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Skuld.API namespace Skuld.API.Client;
public class SkuldAPI : ISkuldAPIClient, IDisposable
{ {
public class SkuldAPI : ISkuldAPIClient, IDisposable public static string WrapperVersion { get; } =
typeof(SkuldAPI).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ??
typeof(SkuldAPI).GetTypeInfo().Assembly.GetName().Version.ToString(3) ??
"Unknown";
private readonly ISkuldAPIClient _api;
static string ApiBase;
static string Token;
private bool disposedValue;
public SkuldAPI()
{ {
public static string WrapperVersion { get; } =
typeof(SkuldAPI).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ??
typeof(SkuldAPI).GetTypeInfo().Assembly.GetName().Version.ToString(3) ??
"Unknown";
private readonly ISkuldAPIClient _api; }
static string ApiBase; public SkuldAPI(string apiBase, string token)
static string Token; {
private bool disposedValue; ApiBase = apiBase;
Token = token;
public SkuldAPI() var httpClient = new HttpClient
{ {
BaseAddress = new Uri(ApiBase)
};
httpClient.DefaultRequestHeaders.Add("User-Agent", $"Skuld.API.Client.Client/v{WrapperVersion} (https://github.com/skuldbot/Skuld)");
if (!string.IsNullOrWhiteSpace(Token))
{
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {Token}");
} }
public SkuldAPI(string apiBase, string token) JsonSerializerSettings settings = new()
{ {
ApiBase = apiBase; Formatting = Formatting.Indented,
Token = token; NullValueHandling = NullValueHandling.Ignore
};
var httpClient = new HttpClient
{
BaseAddress = new Uri(ApiBase)
};
httpClient.DefaultRequestHeaders.Add("User-Agent", $"Skuld.API.Client/v{WrapperVersion} (https://github.com/skuldbot/Skuld)");
if (!string.IsNullOrWhiteSpace(Token))
{
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {Token}");
}
JsonSerializerSettings settings = new() _api = new RestClient(httpClient)
{ {
Formatting = Formatting.Indented, JsonSerializerSettings = settings
NullValueHandling = NullValueHandling.Ignore }.For<ISkuldAPIClient>();
}; }
_api = new RestClient(httpClient)
{
JsonSerializerSettings = settings
}.For<ISkuldAPIClient>();
}
/// <summary> /// <summary>
/// Get a guild /// Get a guild
/// </summary> /// </summary>
/// <param name="id">Guild Id</param> /// <param name="id">Guild Id</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="Guild"/></returns> /// <returns><see cref="EventResult"/> wrapped <see cref="Guild"/></returns>
public Task<EventResult> GetGuildAsync(ulong id) public Task<EventResult> GetGuildAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetGuildAsync(id) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetGuildAsync(id) : null;
/// <summary> /// <summary>
/// Get a user /// Get a user
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns> /// <returns><see cref="EventResult"/> wrapped <see cref="User"/></returns>
public Task<EventResult> GetUserAsync(ulong id) public Task<EventResult> GetUserAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetUserAsync(id) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetUserAsync(id) : null;
/// <summary> /// <summary>
/// Get a user's profile card /// Get a user's profile card
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns> /// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetProfileCardAsync(ulong id) public Task<Stream> GetProfileCardAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id) : null;
/// <summary> /// <summary>
/// Get a user's profile card with guild attributes /// Get a user's profile card with guild attributes
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <param name="id">Guild Id</param> /// <param name="id">Guild Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns> /// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetProfileCardAsync(ulong id, ulong guildId) public Task<Stream> GetProfileCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id, guildId) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id, guildId) : null;
/// <summary> /// <summary>
/// Get a user's rank card /// Get a user's rank card
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param> /// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns> /// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetRankCardAsync(ulong id, ulong guildId) public Task<Stream> GetRankCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetRankCardAsync(id, guildId) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetRankCardAsync(id, guildId) : null;
/// <summary> /// <summary>
/// Preview's a custom background image /// Preview's a custom background image
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <param name="previewBackground">Background to preview</param> /// <param name="previewBackground">Background to preview</param>
/// <returns><see cref="Stream"/> of profile card data</returns> /// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetExampleProfileCardAsync(ulong id, string previewBackground) public Task<Stream> GetExampleProfileCardAsync(ulong id, string previewBackground)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetExampleProfileCardAsync(id, previewBackground) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetExampleProfileCardAsync(id, previewBackground) : null;
/// <summary> /// <summary>
/// Gets the experience leaderboard /// Gets the experience leaderboard
/// </summary> /// </summary>
/// <param name="guildId">Guild Id, Accepts 0 for all</param> /// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// <param name="page">%10 offset page</param> /// <param name="page">%10 offset page</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="UserExperience"/></returns> /// <returns><see cref="EventResult"/> wrapped <see cref="UserExperience"/></returns>
public Task<EventResult> GetExperienceLeaderboardAsync(ulong guildId, int page = 0) public Task<EventResult> GetExperienceLeaderboardAsync(ulong guildId, int page = 0)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetExperienceLeaderboardAsync(guildId, page) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetExperienceLeaderboardAsync(guildId, page) : null;
/// <summary> /// <summary>
/// Gets the money leaderboard /// Gets the money leaderboard
/// </summary> /// </summary>
/// <param name="guildId">Guild Id, Accepts 0 for all</param> /// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// <param name="page">%10 offset page</param> /// <param name="page">%10 offset page</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns> /// <returns><see cref="EventResult"/> wrapped <see cref="User"/></returns>
public Task<EventResult> GetMoneyLeaderboardAsync(ulong guildId, int page = 0) public Task<EventResult> GetMoneyLeaderboardAsync(ulong guildId, int page = 0)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetMoneyLeaderboardAsync(guildId, page) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetMoneyLeaderboardAsync(guildId, page) : null;
public Task<Stream> GetLiquidRescaledAsync(string image) public Task<Stream> GetLiquidRescaledAsync(string image)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetLiquidRescaledAsync(image) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetLiquidRescaledAsync(image) : null;
/// <summary> /// <summary>
/// Get's the join card for a guild /// Get's the join card for a guild
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param> /// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of join card</returns> /// <returns><see cref="Stream"/> of join card</returns>
public Task<Stream> GetJoinCardAsync(ulong id, ulong guildId) public Task<Stream> GetJoinCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetJoinCardAsync(id, guildId) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetJoinCardAsync(id, guildId) : null;
/// <summary> /// <summary>
/// Get's the leave card for a guild /// Get's the leave card for a guild
/// </summary> /// </summary>
/// <param name="id">User Id</param> /// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param> /// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of leave card</returns> /// <returns><see cref="Stream"/> of leave card</returns>
public Task<Stream> GetLeaveCardAsync(ulong id, ulong guildId) public Task<Stream> GetLeaveCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetLeaveCardAsync(id, guildId) : null; => !string.IsNullOrWhiteSpace(Token) ? _api.GetLeaveCardAsync(id, guildId) : null;
protected virtual void Dispose(bool disposing) protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{ {
if (!disposedValue) if (disposing)
{ {
if (disposing) // TODO: dispose managed state (managed objects)
{
// TODO: dispose managed state (managed objects)
}
// TODO: free unmanaged resources (unmanaged objects) and override finalizer
// TODO: set large fields to null
disposedValue = true;
} }
}
// // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources // TODO: free unmanaged resources (unmanaged objects) and override finalizer
// ~SkuldAPI() // TODO: set large fields to null
// { disposedValue = true;
// // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
// Dispose(disposing: false);
// }
public void Dispose()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: true);
GC.SuppressFinalize(this);
} }
} }
// // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
// ~SkuldAPI()
// {
// // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
// Dispose(disposing: false);
// }
public void Dispose()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
} }
Loading…
Cancel
Save