forked from EllieBotDevs/elliebot
100 lines
No EOL
2.8 KiB
C#
100 lines
No EOL
2.8 KiB
C#
#nullable disable
|
|
using EllieBot.Modules.Searches.Common;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace EllieBot.Modules.Searches;
|
|
|
|
public sealed class OsuService : IEService
|
|
{
|
|
private readonly IHttpClientFactory _httpFactory;
|
|
private readonly IBotCredentials _creds;
|
|
|
|
public OsuService(IHttpClientFactory httpFactory, IBotCredentials creds)
|
|
{
|
|
_httpFactory = httpFactory;
|
|
_creds = creds;
|
|
}
|
|
|
|
public async Task<OsuUserData> GetOsuData(string username, string mode)
|
|
{
|
|
using var http = _httpFactory.CreateClient();
|
|
|
|
var modeNumber = string.IsNullOrWhiteSpace(mode) ? 0 : ResolveGameMode(mode);
|
|
var userReq = $"https://osu.ppy.sh/api/get_user?k={_creds.OsuApiKey}&u={username}&m={modeNumber}";
|
|
var userResString = await http.GetStringAsync(userReq);
|
|
|
|
if (string.IsNullOrWhiteSpace(userResString))
|
|
return null;
|
|
var objs = JsonConvert.DeserializeObject<List<OsuUserData>>(userResString);
|
|
|
|
if (objs.Count == 0)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var obj = objs[0];
|
|
|
|
obj.ModeNumber = modeNumber;
|
|
return obj;
|
|
}
|
|
|
|
public static int ResolveGameMode(string mode)
|
|
{
|
|
switch (mode.ToUpperInvariant())
|
|
{
|
|
case "STD":
|
|
case "STANDARD":
|
|
return 0;
|
|
case "TAIKO":
|
|
return 1;
|
|
case "CTB":
|
|
case "CATCHTHEBEAT":
|
|
return 2;
|
|
case "MANIA":
|
|
case "OSU!MANIA":
|
|
return 3;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public static string ResolveGameMode(int mode)
|
|
{
|
|
switch (mode)
|
|
{
|
|
case 0:
|
|
return "Standard";
|
|
case 1:
|
|
return "Taiko";
|
|
case 2:
|
|
return "Catch";
|
|
case 3:
|
|
return "Mania";
|
|
default:
|
|
return "Standard";
|
|
}
|
|
}
|
|
|
|
public async Task<(GatariUserData userData, GatariUserStats userStats)> GetGatariDataAsync(
|
|
string user,
|
|
string mode)
|
|
{
|
|
using var http = _httpFactory.CreateClient();
|
|
var modeNumber = string.IsNullOrWhiteSpace(mode) ? 0 : ResolveGameMode(mode);
|
|
|
|
var resString = await http.GetStringAsync($"https://api.gatari.pw/user/stats?u={user}&mode={modeNumber}");
|
|
|
|
var statsResponse = JsonConvert.DeserializeObject<GatariUserStatsResponse>(resString);
|
|
if (statsResponse.Code != 200 || statsResponse.Stats.Id == 0)
|
|
{
|
|
return default;
|
|
}
|
|
|
|
var usrResString = await http.GetStringAsync($"https://api.gatari.pw/users/get?u={user}");
|
|
|
|
var userData = JsonConvert.DeserializeObject<GatariUserResponse>(usrResString).Users[0];
|
|
var userStats = statsResponse.Stats;
|
|
|
|
return (userData, userStats);
|
|
}
|
|
} |