Skuld's API Client Wrapper in .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Skuld.API.Client.Net/SkuldAPI.cs

177 lines
5.9 KiB

3 years ago
using Newtonsoft.Json;
using RestEase;
using Skuld.Core.Models;
using System;
using System.IO;
using System.Net.Http;
using System.Reflection;
using System.Threading.Tasks;
namespace Skuld.API
{
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 SkuldAPI(string apiBase, string token)
{
ApiBase = apiBase;
Token = token;
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()
{
Formatting = Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore
};
_api = new RestClient(httpClient)
{
JsonSerializerSettings = settings
}.For<ISkuldAPIClient>();
}
/// <summary>
/// Get a guild
/// </summary>
/// <param name="id">Guild Id</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="Guild"/></returns>
public Task<EventResult> GetGuildAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetGuildAsync(id) : null;
/// <summary>
/// Get a user
/// </summary>
/// <param name="id">User Id</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns>
public Task<EventResult> GetUserAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetUserAsync(id) : null;
/// <summary>
/// Get a user's profile card
/// </summary>
/// <param name="id">User Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetProfileCardAsync(ulong id)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id) : null;
/// <summary>
/// Get a user's profile card with guild attributes
/// </summary>
/// <param name="id">User Id</param>
/// <param name="id">Guild Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetProfileCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetProfileCardAsync(id, guildId) : null;
/// <summary>
/// Get a user's rank card
/// </summary>
/// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetRankCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetRankCardAsync(id, guildId) : null;
/// <summary>
/// Preview's a custom background image
/// </summary>
/// <param name="id">User Id</param>
/// <param name="previewBackground">Background to preview</param>
/// <returns><see cref="Stream"/> of profile card data</returns>
public Task<Stream> GetExampleProfileCardAsync(ulong id, string previewBackground)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetExampleProfileCardAsync(id, previewBackground) : null;
/// <summary>
/// Gets the experience leaderboard
/// </summary>
/// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// <param name="page">%10 offset page</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="UserExperience"/></returns>
public Task<EventResult> GetExperienceLeaderboardAsync(ulong guildId, int page = 0)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetExperienceLeaderboardAsync(guildId, page) : null;
/// <summary>
/// Gets the money leaderboard
/// </summary>
/// <param name="guildId">Guild Id, Accepts 0 for all</param>
/// <param name="page">%10 offset page</param>
/// <returns><see cref="EventResult{T}"/> wrapped <see cref="User"/></returns>
public Task<EventResult> GetMoneyLeaderboardAsync(ulong guildId, int page = 0)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetMoneyLeaderboardAsync(guildId, page) : null;
public Task<Stream> GetLiquidRescaledAsync(string image)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetLiquidRescaledAsync(image) : null;
/// <summary>
/// Get's the join card for a guild
/// </summary>
/// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of join card</returns>
public Task<Stream> GetJoinCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetJoinCardAsync(id, guildId) : null;
/// <summary>
/// Get's the leave card for a guild
/// </summary>
/// <param name="id">User Id</param>
/// <param name="guildId">Guild Id</param>
/// <returns><see cref="Stream"/> of leave card</returns>
public Task<Stream> GetLeaveCardAsync(ulong id, ulong guildId)
=> !string.IsNullOrWhiteSpace(Token) ? _api.GetLeaveCardAsync(id, guildId) : null;
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// 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
// ~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);
}
}
}