PhigrosLibraryCSharp 4.3.0
dotnet add package PhigrosLibraryCSharp --version 4.3.0
NuGet\Install-Package PhigrosLibraryCSharp -Version 4.3.0
<PackageReference Include="PhigrosLibraryCSharp" Version="4.3.0" />
<PackageVersion Include="PhigrosLibraryCSharp" Version="4.3.0" />
<PackageReference Include="PhigrosLibraryCSharp" />
paket add PhigrosLibraryCSharp --version 4.3.0
#r "nuget: PhigrosLibraryCSharp, 4.3.0"
#:package PhigrosLibraryCSharp@4.3.0
#addin nuget:?package=PhigrosLibraryCSharp&version=4.3.0
#tool nuget:?package=PhigrosLibraryCSharp&version=4.3.0
PhigrosLibraryCSharp
This is a C# implementation of PhigrosLibrary, allowing you to integrate Phigros login workflow and process your scores nicely.
Now available in NuGet!
API Usage
Local save (Reading from PlayerPrefv2.xml)
- Parse the xml and get the key and value string pair, the string should look like
xaHiFItVgoS6CBFNHTR2%2BA%3D%3D - URL decode it using
System.Net.WebUtility.UrlDecode, to get the Base64 string (ex.xaHiFItVgoS6CBFNHTR2+A==) - Decrypt it using static function
LocalSave.DecryptSaveStringNew(string base64EncodedString), there is also a model for score (RawScore, can be converted into a more dev-friendly format by callingToInternalFormatmethod)- Example:
LocalSave.DecryptSaveStringNew("eSB6QJlXU1vwHjVx7kcpb4/jdk9o5j4Wiatn+jrJ+etI2KFMlPDyH8s7I8zM+qlW") - Decrypted score string pair would be something like
MARENOL.LeaF.0.Record.HDand{"s":992580,"a":99.17559051513672,"c":1}. - Note: the PlayerPrefv2.xml also contains other misc data, so you need to pick scores.
- Example:
- Once decrypted, you can do anything to the score data. <br/> Full example code:
public static SongScore ExampleDecryptLocal(string key, string data)
{
string decryptedKey = LocalSave.DecryptSaveStringNew(WebUtility.UrlDecode(key));
string decryptedData = LocalSave.DecryptSaveStringNew(WebUtility.UrlDecode(data));
string[] splitted = decryptedKey.Split(".");
string id = string.Join(".", splitted.Take(3));
return RawScore.FromJson(decryptedData).ToSongScore(id, Enum.Parse<Difficulty>(splitted[^1]));
}
// somewhere else in ur code...
ExampleDecryptLocal(@"Cgw4SttKwRFIjb68TF8z5EC%2FLwVpK8KjKmjcm9T3M78%3D", @"eSB6QJlXU1vwHjVx7kcpb4%2Fjdk9o5j4Wiatn%2BjrJ%2BetI2KFMlPDyH8s7I8zM%2BqlW");
Cloud Save
Common examples can be found there.
TapTap integration
See this for QRCode login example. There is also a callback login implementation, however it is limited since you can only callback to localhost (which means you cannot use this when you are hosting a server like a Discord bot.)
Fetching scores and other user info
Here is a short example of how to read scores from cloud save:
Save save = new(/* phigros token */, /* is international or not */);
// if you are using it in wasm project then you need to replace the decrypt function since
// aes doesn't work in browser environment:
// save.Decrypter = async (byte[] key, byte[] iv, byte[] data) => { /* your decrypting function here */ };
var context = await save.GetSaveContextAsync(/* save index, 0 for the latest save */);
(List<CompleteScore> Phi3, List<CompleteScore> Other, double RKS) context.ReadGameRecord().GetSortedListForRks(/* difficulty map */, /* name map */); // all scores
context.ReadSummary() // summary info like username, level, etc.
context.ReadGameUserInfo() // in-game user info
// there's also other functions for reading different data, check the documentation for more info.
difficulties parameter should be a IReadOnlyDictionary<ChartConstantKey, float>,
the ChartConstantKey would be song id and difficulty combined together, and the float is the chart constants.<br/>
Example difficulty value pair: { new ChartConstantKey("Credits.Frums.0", Difficulty.IN), 14.0f }
For more info, please check the common examples. <br/>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.3.0 | 92 | 5/24/2026 |
| 4.2.0 | 114 | 5/9/2026 |
| 4.1.1 | 98 | 5/9/2026 |
| 4.1.0 | 93 | 5/3/2026 |
| 4.0.0 | 103 | 4/23/2026 |
| 3.1.5 | 97 | 4/19/2026 |
| 3.1.1 | 93 | 4/4/2026 |
| 3.1.0 | 89 | 4/4/2026 |
| 3.0.0 | 99 | 4/4/2026 |
| 2.3.0 | 107 | 4/4/2026 |
| 2.2.0 | 91 | 4/4/2026 |
| 2.1.1 | 91 | 4/4/2026 |
| 2.1.0 | 89 | 4/4/2026 |
| 2.0.0 | 93 | 4/4/2026 |
| 1.3.0 | 91 | 4/4/2026 |
| 1.2.3 | 89 | 4/4/2026 |
| 1.2.2 | 89 | 4/4/2026 |
| 1.2.1 | 92 | 4/4/2026 |
| 1.2.0 | 94 | 4/4/2026 |
| 1.1.1 | 91 | 4/4/2026 |
# 4.3.0
- Made all async apis in `Save`, `SaveContext`, `TapTapHelper`, and `LCHelper` classes cancellable by accepting `CancellationToken` parameters. Users should recompile to prevent `MethodNotFoundException`s.