/// <summary/>
    public IndexedGameBananaPackageProvider(int gameId)
    {
        GameId    = gameId;
        _fallback = new GameBananaPackageProvider(gameId);

        _ = InitializeApiAsync();
    }
    public async Task SearchAsync_WithNoString_ReturnsResults()
    {
        // Arrange
        var provider = new GameBananaPackageProvider(7486);

        // Act
        var packages = await provider.SearchAsync("");

        // Assert
        Assert.True(packages.Any());
    }
    public async Task SearchAsync_WithString_ReturnsMatchingResults()
    {
        // Arrange
        var provider = new GameBananaPackageProvider(7486);

        // Act
        var packages = await provider.SearchAsync("Update Lib. Test");

        // Assert
        Assert.True(packages.Any());
        //Assert.Contains(packages, package => package.Id.Equals("reloaded.sharedlib.hooks", StringComparison.OrdinalIgnoreCase));
    }
    public async Task SearchAsync_CanDownloadReturnedPackage()
    {
        // Arrange
        var provider = new GameBananaPackageProvider(7486);

        // Act
        using var outputDirectory = new TemporaryFolderAllocation();
        var package = (await provider.SearchAsync("Update Lib. Test")).First();
        var downloadedPackagePath = await package.DownloadAsync(outputDirectory.FolderPath, null);

        // Assert
        Assert.True(Directory.Exists(downloadedPackagePath), "This test currently fails because GameBanana cannot distinguish between Delta and Normal packages.");
        Assert.True(File.Exists(Path.Combine(downloadedPackagePath, ModConfig.ConfigFileName)));
    }
    public async Task AddGameBanana(int?appId, string friendlyName, int?durationMinutes = 45)
    {
        // Validate
        if (!appId.HasValue)
        {
            await RespondAsync(embed : Extensions.MakeErrorEmbed("You must specify a GameBanana app id."));

            return;
        }

        try
        {
            var provider = new GameBananaPackageProvider(appId.Value);
            var results  = await provider.SearchAsync("", 0, 10);
            await AddSourceCommon(new SourceEntry(appId.Value), friendlyName, durationMinutes !.Value);
        }
        catch (Exception e)
        {
            await HandleSourceError(e);
        }
    }