mirror of
https://github.com/yawaflua/SPWorldsWrapper.git
synced 2025-12-14 01:26:21 +02:00
Compare commits
5 Commits
v1.0.2
...
yawaflua-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9a51cd600 | ||
|
|
85c4d5e099 | ||
|
|
1f81fd5cbd | ||
|
|
1201e16caa | ||
|
|
a1862446a6 |
@@ -1,5 +1,5 @@
|
|||||||
# SPWorldsWrapper
|
# SPWorldsWrapper
|
||||||

|

|
||||||
|
|
||||||
Actions pass:
|
Actions pass:
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<PackageId>SPWorldsWrapper</PackageId>
|
<PackageId>SPWorldsWrapper</PackageId>
|
||||||
|
|||||||
@@ -2,13 +2,22 @@
|
|||||||
using SPWorldsWrapper.Types;
|
using SPWorldsWrapper.Types;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
|
using System.Reflection.Metadata.Ecma335;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
|
|
||||||
namespace SPWorldsWrapper
|
namespace SPWorldsWrapper
|
||||||
{
|
{
|
||||||
|
public class AuthentificationError : Exception
|
||||||
|
{
|
||||||
|
public AuthentificationError(string? message, Exception? innerException) : base(message, innerException) { }
|
||||||
|
public AuthentificationError() : base() { }
|
||||||
|
public AuthentificationError(string? message) : base(message) { }
|
||||||
|
}
|
||||||
public class SPWrapper
|
public class SPWrapper
|
||||||
{
|
{
|
||||||
public readonly HttpClient client;
|
public readonly HttpClient client;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Асинхронный wrapper для работы напрямую с сайтом, а не с API SPWorlds.ru
|
/// Асинхронный wrapper для работы напрямую с сайтом, а не с API SPWorlds.ru
|
||||||
@@ -21,7 +30,11 @@ namespace SPWorldsWrapper
|
|||||||
client = new(handler);
|
client = new(handler);
|
||||||
client.BaseAddress = new Uri("https://spworlds.ru/api/");
|
client.BaseAddress = new Uri("https://spworlds.ru/api/");
|
||||||
cookieContainer.Add(client.BaseAddress, new Cookie("jeff", token));
|
cookieContainer.Add(client.BaseAddress, new Cookie("jeff", token));
|
||||||
spwLogin();
|
var spwLoginMethod = spwLogin();
|
||||||
|
if (!spwLoginMethod.Result)
|
||||||
|
{
|
||||||
|
throw new AuthentificationError("Ошибка парсинга данных от сайта. Проверьте токен, IP сервера и статус сайта SPWORLDS.RU");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -30,11 +43,24 @@ namespace SPWorldsWrapper
|
|||||||
/// Если иное - токен слетел!
|
/// Если иное - токен слетел!
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Ничего</returns>
|
/// <returns>Ничего</returns>
|
||||||
public async Task spwLogin()
|
public async Task<bool> spwLogin()
|
||||||
{
|
{
|
||||||
var content = new StringContent(@"{}");
|
var content = new StringContent(@"{}");
|
||||||
var responseMessage = await client.PostAsync("auth/refresh_token", content);
|
var responseMessage = await client.PostAsync("auth/refresh_token", content);
|
||||||
await Console.Out.WriteLineAsync(await responseMessage.Content.ReadAsStringAsync());
|
var bodyFromSPW = await responseMessage.Content.ReadAsStringAsync();
|
||||||
|
var serializedBody = JsonNode.Parse(bodyFromSPW);
|
||||||
|
if (serializedBody == null)
|
||||||
|
{
|
||||||
|
Console.Error.WriteLine("error: Some error returned from site.");
|
||||||
|
Console.WriteLine("debug: please, check your authorization token");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine(await responseMessage.Content.ReadAsStringAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return serializedBody != null;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получение данных пользователя по юзернейму.
|
/// Получение данных пользователя по юзернейму.
|
||||||
@@ -54,12 +80,11 @@ namespace SPWorldsWrapper
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userName">Никнейм пользователя(из майнкрафта)</param>
|
/// <param name="userName">Никнейм пользователя(из майнкрафта)</param>
|
||||||
/// <example> var a = "a";</example>
|
/// <example> var a = "a";</example>
|
||||||
/// <returns><see cref="SPUser" /> пользователь от сайта, или ошибку.</returns>
|
/// <returns><see cref="SPUser" /> пользователь от сайта, или null.</returns>
|
||||||
public async Task<SPUser> getUserData(string userName)
|
public async Task<SPUser?> getUserData(string userName)
|
||||||
{
|
{
|
||||||
var request = await client.GetAsync($"pl/accounts/{userName}");
|
var request = await client.GetAsync($"pl/accounts/{userName}");
|
||||||
await Console.Out.WriteLineAsync(request.Content.ReadAsStringAsync().Result);
|
SPUser? response = JsonConvert.DeserializeObject<SPUser>(request.Content.ReadAsStringAsync().Result.ToString());
|
||||||
SPUser response = JsonConvert.DeserializeObject<SPUser>(request.Content.ReadAsStringAsync().Result.ToString());
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using Microsoft.VisualBasic;
|
||||||
|
using SPWorldsWrapper.Types.UserTypes;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -6,45 +8,59 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace SPWorldsWrapper.Types
|
namespace SPWorldsWrapper.Types
|
||||||
{
|
{
|
||||||
public class CardsOwned
|
|
||||||
{
|
|
||||||
public string name { get; set; }
|
|
||||||
public int color { get; set; }
|
|
||||||
public string number { get; set; }
|
|
||||||
public string id { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class City
|
|
||||||
{
|
|
||||||
public Mayor mayor { get; set; }
|
|
||||||
public string name { get; set; }
|
|
||||||
public int x { get; set; }
|
|
||||||
public int z { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Mayor
|
|
||||||
{
|
|
||||||
public string id { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SPUser
|
public class SPUser
|
||||||
{
|
{
|
||||||
public string id { get; set; }
|
public string id { get; set; }
|
||||||
public bool isBanned { get; set; }
|
public bool isBanned { get; set; }
|
||||||
public User user { get; set; }
|
public User user { get; set; }
|
||||||
public List<string> roles { get; set; }
|
public string[] roles { get; set; }
|
||||||
public City? city { get; set; }
|
public City? city { get; set; }
|
||||||
public string status { get; set; }
|
public string status { get; set; }
|
||||||
public DateTime createdAt { get; set; }
|
public DateTime createdAt { get; set; }
|
||||||
public List<CardsOwned> cardsOwned { get; set; }
|
public List<CardsOwned> cardsOwned { get; set; }
|
||||||
public bool isFollowed { get; set; }
|
public bool isFollowed { get; set; }
|
||||||
public bool isFollowingYou { get; set; }
|
public bool isFollowingYou { get; set; }
|
||||||
}
|
|
||||||
|
|
||||||
public class User
|
public Dictionary<string, object> toKeyValuePairs()
|
||||||
{
|
{
|
||||||
public bool isAdmin { get; set; }
|
string cards = "[\n";
|
||||||
public string minecraftUUID { get; set; }
|
foreach (var card in cardsOwned)
|
||||||
public string username { get; set; }
|
{
|
||||||
|
cards += " {\n";
|
||||||
|
foreach (var kvp in card.toKeyValuePairs())
|
||||||
|
{
|
||||||
|
cards += $" {kvp.Key}: {kvp.Value},\n";
|
||||||
|
}
|
||||||
|
cards += " },\n";
|
||||||
|
}
|
||||||
|
cards += "]";
|
||||||
|
return new ()
|
||||||
|
{
|
||||||
|
{ "id", id },
|
||||||
|
{ "isBanned", isBanned },
|
||||||
|
{ "status", status },
|
||||||
|
{ "created_at", createdAt },
|
||||||
|
{ "isFollowed", isFollowed },
|
||||||
|
{ "isFollowingYou", isFollowingYou },
|
||||||
|
{ "user", user.ToString() },
|
||||||
|
{ "roles", $"[{string.Join(", ", roles)}]" },
|
||||||
|
{ "city", city?.ToString() ?? "Null" },
|
||||||
|
{ "cardsOwner", cards },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
string stringToReturn = "{\n";
|
||||||
|
foreach (var kvp in toKeyValuePairs())
|
||||||
|
{
|
||||||
|
stringToReturn += $"\n {kvp.Key}: {kvp.Value},";
|
||||||
|
}
|
||||||
|
stringToReturn += "\n}";
|
||||||
|
return stringToReturn;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user