|
|
@ -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); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |