101 lines
3.8 KiB
PowerShell
101 lines
3.8 KiB
PowerShell
# ==========================================
|
||
# 🎮 DISCORD PROXY SETUP
|
||
# ==========================================
|
||
|
||
param([switch]$Force)
|
||
|
||
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
. "$ScriptDir\lib\Common.ps1"
|
||
. "$ScriptDir\lib\Net.ps1"
|
||
. "$ScriptDir\lib\System.ps1"
|
||
|
||
Write-Header "НАСТРОЙКА DISCORD / VESKTOP"
|
||
|
||
Ensure-Admin
|
||
|
||
$InstallPath = "C:\Tools\ProxiFyre"
|
||
$DriverUrl = "https://github.com/wiresock/ndisapi/releases/download/v3.6.2/Windows.Packet.Filter.3.6.2.1.x64.msi"
|
||
$AppUrl = "https://github.com/wiresock/proxifyre/releases/download/v2.1.4/ProxiFyre-v2.1.4-x64-signed.zip"
|
||
|
||
# Проверка Sing-box
|
||
$singboxStatus = Get-TaskStatus -Name "SingBoxProxy"
|
||
$localProxy = "127.0.0.1:1080"
|
||
$useLocal = $false
|
||
|
||
if ($singboxStatus -eq "Running") {
|
||
Write-Info "Обнаружен работающий Native Sing-box."
|
||
$useLocal = $true
|
||
}
|
||
else {
|
||
Write-Warning "Native Sing-box не запущен!"
|
||
Write-Host " Для работы голосовых звонков он необходим." -ForegroundColor Gray
|
||
Write-Host " Вы можете вернуться в главное меню и настроить его." -ForegroundColor Gray
|
||
if ((Read-Host " Продолжить настройку БЕЗ него (голос может не работать)? (y/n)") -ne 'y') { exit }
|
||
}
|
||
|
||
# Меню выбора приложений
|
||
Write-Host "`n🎮 Какие приложения проксировать?" -ForegroundColor Yellow
|
||
$appOpts = [Ordered]@{
|
||
"1" = "Discord"
|
||
"2" = "Vesktop"
|
||
"3" = "Discord + Vesktop"
|
||
}
|
||
$appChoice = Show-Menu -Options $appOpts
|
||
$targetApps = switch ($appChoice) {
|
||
"1" { @("Discord") }
|
||
"2" { @("Vesktop") }
|
||
"3" { @("Vesktop", "Discord") }
|
||
default { @("Discord") }
|
||
}
|
||
|
||
$proxyAddr = $localProxy
|
||
if (!$useLocal) {
|
||
$proxyAddr = Read-Host "Введите адрес прокси (хост:порт) [Enter для $localProxy]"
|
||
if ([string]::IsNullOrWhiteSpace($proxyAddr)) { $proxyAddr = $localProxy }
|
||
}
|
||
|
||
# Установка драйвера
|
||
Write-Step "Установка драйвера..."
|
||
$msi = "$env:TEMP\WinpkFilter.msi"
|
||
if (Download-File -Url $DriverUrl -Destination $msi) {
|
||
Start-Process msiexec.exe -ArgumentList "/i `"$msi`" /qn /norestart" -Wait
|
||
Write-Success "Драйвер готов"
|
||
}
|
||
|
||
# Установка ProxiFyre
|
||
Write-Step "Установка ProxiFyre..."
|
||
if (!(Test-Path $InstallPath) -or $Force) {
|
||
New-Item -ItemType Directory -Path $InstallPath -Force | Out-Null
|
||
$zip = "$env:TEMP\ProxiFyre.zip"
|
||
if (Download-File -Url $AppUrl -Destination $zip) {
|
||
Expand-Archive -Path $zip -DestinationPath $InstallPath -Force
|
||
# Handle update folder structure if needed, simplified here assuming flat or check generic
|
||
$exe = Get-ChildItem $InstallPath -Recurse -Filter "ProxiFyre.exe" | Select -First 1
|
||
if ($exe.DirectoryName -ne $InstallPath) {
|
||
Copy-Item "$($exe.DirectoryName)\*" $InstallPath -Recurse -Force
|
||
}
|
||
Write-Success "Распаковано"
|
||
}
|
||
}
|
||
|
||
# Конфиг
|
||
$cfg = @{
|
||
logLevel = "Info"
|
||
proxies = @(@{
|
||
appNames = $targetApps
|
||
socks5ProxyEndpoint = $proxyAddr
|
||
supportedProtocols = @("TCP", "UDP")
|
||
})
|
||
excludes = @()
|
||
}
|
||
$cfg | ConvertTo-Json -Depth 5 | Set-Content "$InstallPath\app-config.json" -Encoding UTF8
|
||
|
||
# Служба
|
||
Write-Step "Перезапуск службы..."
|
||
Start-Process "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
|
||
Start-Process "$InstallPath\ProxiFyre.exe" -ArgumentList "install" -Wait -NoNewWindow
|
||
Start-Process "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
|
||
|
||
Write-Success "Готово! Discord должен работать через прокси."
|
||
Start-Sleep -Seconds 3
|