4 Commits

Author SHA1 Message Date
Дмитрий Шиманский
e9a51cd600 add so many features likely:
- Cards
- Groups
- Posts
- Many parser objects
2024-02-02 21:33:50 +03:00
Dima yawaflua Andreev
85c4d5e099 Update SPWorldsWrapper.csproj 2024-01-19 20:00:58 +03:00
Dima yawaflua Andreev
1f81fd5cbd Update README.md 2024-01-19 19:59:45 +03:00
Дмитрий Шиманский
1201e16caa Add auth exception class for better readibility 2023-12-27 23:15:39 +03:00
4 changed files with 75 additions and 33 deletions

View File

@@ -1,5 +1,5 @@
# SPWorldsWrapper # SPWorldsWrapper
![](https://img.shields.io/badge/dotnet-.NET_8-green) ![](https://img.shields.io/badge/dotnet-.NET_7-green)
Actions pass: Actions pass:

View File

@@ -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>

View File

@@ -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 void spwLogin() public async Task<bool> spwLogin()
{ {
var content = new StringContent(@"{}"); var content = new StringContent(@"{}");
var responseMessage = client.PostAsync("auth/refresh_token", content).Result; var responseMessage = await client.PostAsync("auth/refresh_token", content);
Console.WriteLine(responseMessage.Content.ReadAsStringAsync().Result); 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>
/// Получение данных пользователя по юзернейму. /// Получение данных пользователя по юзернейму.

View File

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