PhigrosLibraryCSharp 4.3.0

dotnet add package PhigrosLibraryCSharp --version 4.3.0
                    
NuGet\Install-Package PhigrosLibraryCSharp -Version 4.3.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PhigrosLibraryCSharp" Version="4.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PhigrosLibraryCSharp" Version="4.3.0" />
                    
Directory.Packages.props
<PackageReference Include="PhigrosLibraryCSharp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PhigrosLibraryCSharp --version 4.3.0
                    
#r "nuget: PhigrosLibraryCSharp, 4.3.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PhigrosLibraryCSharp@4.3.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PhigrosLibraryCSharp&version=4.3.0
                    
Install as a Cake Addin
#tool nuget:?package=PhigrosLibraryCSharp&version=4.3.0
                    
Install as a Cake Tool

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

AI generated wiki: Ask DeepWiki

Local save (Reading from PlayerPrefv2.xml)

  1. Parse the xml and get the key and value string pair, the string should look like xaHiFItVgoS6CBFNHTR2%2BA%3D%3D
  2. URL decode it using System.Net.WebUtility.UrlDecode, to get the Base64 string (ex. xaHiFItVgoS6CBFNHTR2+A==)
  3. 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 calling ToInternalFormat method)
    • Example: LocalSave.DecryptSaveStringNew("eSB6QJlXU1vwHjVx7kcpb4/jdk9o5j4Wiatn+jrJ+etI2KFMlPDyH8s7I8zM+qlW")
    • Decrypted score string pair would be something like MARENOL.LeaF.0.Record.HD and {"s":992580,"a":99.17559051513672,"c":1}.
    • Note: the PlayerPrefv2.xml also contains other misc data, so you need to pick scores.
  4. 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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
Loading failed

# 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.