# Configuration $qbtHost = 'ktr.h4ck.me' $qbtPort = '7878' $qbtUser = 'kelly' $qbtPassword = 'KjBWnJC;cabA^gFxcN]5' $excludedTrackers = @( 'digitalcore.club', 'please.passthepopcorn.me:2710', 'please.passthepopcorn.me' ) # Function to authenticate and get a session function Get-QBittorrentSession { $qbtHeaders = @{ Referer = "https://$($qbtHost):$($qbtPort)" } $qbtBody = @{ username = $qbtUser password = $qbtPassword } $qbtSession = [Microsoft.PowerShell.Commands.WebRequestSession]::new() $qbtResponse = Invoke-WebRequest -Uri "https://$($qbtHost):$($qbtPort)/api/v2/auth/login" -WebSession $qbtSession -Method POST -Headers $qbtHeaders -Body $qbtBody return $qbtSession } # Function to get all torrents function Get-Torrents { param ( [Microsoft.PowerShell.Commands.WebRequestSession]$session ) $qbtResponse = Invoke-WebRequest -Uri "https://$($qbtHost):$($qbtPort)/api/v2/torrents/info" -WebSession $session -Method GET return $qbtResponse.Content | ConvertFrom-Json } # Function to delete a torrent function Delete-Torrent { param ( [Microsoft.PowerShell.Commands.WebRequestSession]$session, [string]$hash ) # $session.UploadString("$qbittorrentUrl/api/v2/torrents/delete", "hashes=$hash") } # Main script $session = Get-QBittorrentSession $torrents = Get-Torrents -session $session foreach ($torrent in $torrents) { if ($torrent.state -eq 'uploading' -or $torrent.state -like "*UP") { # Check if any of the excluded trackers are in the torrent's tracker list if ($torrent.tracker -match "https?://([^/]+)") { $trackers = $matches[1] } else { $trackers = @() } if (-not ($trackers | Where-Object { $excludedTrackers -contains $_ })) { # Delete the torrent Write-Host "Would delete: $($torrent.name)" # Delete-Torrent -session $session -hash $torrent.hash } } } # Logout (optional, but good practice) # $session.UploadString("$qbittorrentUrl/api/v2/auth/logout", "")