DiscordBuddy.psm1

# DiscordBuddy (minimal) - exactly two functions
# Expects Annoyance.wav in the module root (same folder as this .psm1)
$script:DiscordBuddyJob = $null

function Start-DiscordBuddy {
    if ($script:DiscordBuddyJob) { return $script:DiscordBuddyJob }

    $wav = Join-Path $PSScriptRoot 'Annoyance.wav'
    if (-not (Test-Path -LiteralPath $wav)) {
        throw "Annoyance.wav not found. Place it in: $PSScriptRoot"
    }

    $loop = {
        param($wavPath)
        $p = [System.Media.SoundPlayer]::new($wavPath)
        try {
            while ($true) {
                $p.PlaySync()
                Start-Sleep -Seconds (Get-Random -Maximum 421)  # 0..420 inclusive
            }
        } finally {
            $p.Dispose()
        }
    }

    if (Get-Command Start-ThreadJob -ErrorAction Ignore) {
        $script:DiscordBuddyJob = Start-ThreadJob -Name 'DiscordBuddy' -ScriptBlock $loop -ArgumentList $wav
    } else {
        $script:DiscordBuddyJob = Start-Job       -Name 'DiscordBuddy' -ScriptBlock $loop -ArgumentList $wav
    }
    $script:DiscordBuddyJob
}

function Stop-DiscordBuddy {
    if (-not $script:DiscordBuddyJob) { return }
    try { Stop-Job $script:DiscordBuddyJob -ErrorAction SilentlyContinue } catch {}
    try { Remove-Job $script:DiscordBuddyJob -Force -ErrorAction SilentlyContinue } catch {}
    $script:DiscordBuddyJob = $null
}

Export-ModuleMember -Function Start-DiscordBuddy, Stop-DiscordBuddy