HoNTools.psm1

function Set-HoNReconnect {
    param(
        [Parameter(Mandatory = $true)]
        [string] $Ip,

        [Parameter(Mandatory = $false)]
        [boolean] $x64 = $true
    )

    $documentsFolder = [Environment]::GetFolderPath("MyDocuments")
    $honFolder = $x64 ? "Heroes of Newerth x64" : "Heroes of Newerth"
    $reconnectFilePath = Join-Path $documentsFolder $honFolder "game" "reconnect.cfg" -Resolve

    $reconnectFileContent = Get-Content -Path $reconnectFilePath
    
    $reconnectFileObject = [Ordered]@{
        "cl_reconnectAttempts" = $reconnectFileContent[0].Split(" ")[1];
        "cl_reconnectTimestamp" = $reconnectFileContent[1].Split(" ")[1];
        "cl_connectionID" = (Get-Random -Minimum 100 -Maximum 999);
        "CheckReconnect" = "$Ip 4294967295"
    }

    $updatedReconnectFileContent = $reconnectFileObject.Keys | ForEach-Object { "$_ $($reconnectFileObject[$_])" }

    Set-Content -Path $reconnectFilePath -Value $updatedReconnectFileContent

    Write-Host "Updated ""$reconnectFilePath"" content to:"
    $updatedReconnectFileContent | Write-Host
}

function Get-HoNServerInfo {
    param(
        [Parameter(Mandatory = $true)]
        [string] $Ip
    )

    try {
        $serverInfo = Invoke-RestMethod -Method Get -Uri "http://ip-api.com/json/$Ip"
    } catch {
        Write-Error "Cannot get data about ""$Ip"" IP."
        return
    }
    
    $pingInfo = Test-Connection $serverInfo.query -Ping -Count 1
    $ping = $pingInfo.Status -Eq "TimedOut" ? "-" : $pingInfo.Latency

    [PSCustomObject][ordered]@{
        "Host"    = $Ip;
        "IP"      = $serverInfo.query;
        "Country" = $serverInfo.country;
        "Region"  = $serverInfo.regionName;
        "Ping"    = $ping;
    } | Format-Table
}