From ff2a4c0e2e867217f2a1db7565774274eae42ec2 Mon Sep 17 00:00:00 2001 From: barelyprofessional <150058423+barelyprofessional@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:34:28 +0800 Subject: [PATCH] Added in support for grabbing Shuffle user profiles --- KfChatDotNetKickBot/Models/ShuffleModels.cs | 31 ++++++++++++++++ KfChatDotNetKickBot/Services/Shuffle.cs | 41 +++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/KfChatDotNetKickBot/Models/ShuffleModels.cs b/KfChatDotNetKickBot/Models/ShuffleModels.cs index fd6243e..1ae9e3f 100644 --- a/KfChatDotNetKickBot/Models/ShuffleModels.cs +++ b/KfChatDotNetKickBot/Models/ShuffleModels.cs @@ -24,4 +24,35 @@ public class ShuffleLatestBetModel public required string GameCategory { get; set; } [JsonPropertyName("gameSlug")] public required string GameSlug { get; set; } +} + +// { +// "data": { +// "user": { +// "id": "a98f83c3-89b7-4e8d-9e11-7dcf1a89b1ba", +// "username": "TheBossmanJack", +// "vipLevel": "SAPPHIRE_3", +// "createdAt": "2024-06-16T23:17:58.533Z", +// "avatar": 36, +// "avatarBackground": 1, +// "bets": 9450, +// "usdWagered": "3518595.04092444", +// "__typename": "User" +// } +// } +// } +public class ShuffleUserModel +{ + [JsonPropertyName("id")] + public required string Id { get; set; } + [JsonPropertyName("username")] + public required string Username { get; set; } + [JsonPropertyName("vipLevel")] + public required string VipLevel { get; set; } + [JsonPropertyName("createdAt")] + public required DateTimeOffset CreatedAt { get; set; } + [JsonPropertyName("bets")] + public required int Bets { get; set; } + [JsonPropertyName("usdWagered")] + public required string UsdWagered { get; set; } } \ No newline at end of file diff --git a/KfChatDotNetKickBot/Services/Shuffle.cs b/KfChatDotNetKickBot/Services/Shuffle.cs index c27ff13..ffb1cbf 100644 --- a/KfChatDotNetKickBot/Services/Shuffle.cs +++ b/KfChatDotNetKickBot/Services/Shuffle.cs @@ -1,4 +1,5 @@ using System.Net; +using System.Net.Http.Json; using System.Net.WebSockets; using System.Text.Json; using KfChatDotNetKickBot.Models; @@ -173,4 +174,44 @@ public class Shuffle _logger.Error("--- End of JSON Payload ---"); } } + + public async Task GetShuffleUser(string username) + { + var graphQl = + "query GetUserProfile($username: String!) {\n user(username: $username) {\n id\n username\n vipLevel\n createdAt\n avatar\n avatarBackground\n bets\n usdWagered\n __typename\n }\n}"; + _logger.Debug($"Grabbing details for Shuffle user {username}"); + var jsonBody = new Dictionary + { + { "operationName", "GetUserProfile" }, + { "query", graphQl }, + { "variables", new Dictionary { { "username", username } } } + }; + _logger.Debug("Created dictionary object for the JSON payload, should serialize to following value:"); + _logger.Debug(JsonSerializer.Serialize(jsonBody)); + var handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.All }; + if (_proxy != null) + { + handler.UseProxy = false; + handler.Proxy = new WebProxy(_proxy); + _logger.Debug($"Configured to use proxy {_proxy}"); + } + + using var client = new HttpClient(handler); + client.DefaultRequestHeaders.Add("content-type", "application/json"); + var postBody = JsonContent.Create(jsonBody); + var response = await client.PostAsync("https://shuffle.com/graphql", postBody, _cancellationToken); + var responseContent = await response.Content.ReadFromJsonAsync(cancellationToken: _cancellationToken); + _logger.Debug("Shuffle returned following JSON"); + _logger.Debug(responseContent.GetRawText); + var user = responseContent.GetProperty("data").GetProperty("user"); + if (user.ValueKind == JsonValueKind.Null) + { + _logger.Debug("data.user was null"); + throw new ShuffleUserNotFoundException(); + } + + return user.Deserialize() ?? throw new InvalidOperationException(); + } + + public class ShuffleUserNotFoundException : Exception; } \ No newline at end of file